xref: /illumos-gate/usr/src/lib/libsmbfs/netsmb/nb_lib.h (revision 9c9af2590af49bb395bc8d2eace0f2d4ea16d165)
1 /*
2  * Copyright (c) 2000, Boris Popov
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *    This product includes software developed by Boris Popov.
16  * 4. Neither the name of the author nor the names of any co-contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  *
32  * $Id: nb_lib.h,v 1.4 2004/12/11 05:23:58 lindak Exp $
33  */
34 
35 /*
36  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
37  * Use is subject to license terms.
38  */
39 
40 #ifndef _NETSMB_NB_LIB_H_
41 #define	_NETSMB_NB_LIB_H_
42 
43 /*
44  * Error codes
45  */
46 #define	NBERR_INVALIDFORMAT	0x0001
47 #define	NBERR_SRVFAILURE	0x0002
48 #define	NBERR_NAMENOTFOUND	0x0003
49 #define	NBERR_IMP		0x0004
50 #define	NBERR_REFUSED		0x0005
51 #define	NBERR_ACTIVE		0x0006
52 #define	NBERR_HOSTNOTFOUND	0x0101
53 #define	NBERR_TOOMANYREDIRECTS	0x0102
54 #define	NBERR_INVALIDRESPONSE	0x0103
55 #define	NBERR_NAMETOOLONG	0x0104
56 #define	NBERR_NOBCASTIFS	0x0105
57 #define	NBERR_MAX		0x0106
58 #define	NBERROR(e)		((e) |  SMB_NB_ERROR)
59 
60 #define	NBCF_RESOLVED	0x0001
61 #define	NBCF_NS_ENABLE	0x0002		/* any NetBIOS lookup */
62 #define	NBCF_BC_ENABLE	0x0004		/* lookup via broadcast */
63 
64 /*
65  * nb environment
66  */
67 struct nb_ctx {
68 	int		nb_flags;
69 	int		nb_timo;
70 	char		*nb_scope;	/* NetBIOS scope */
71 	in_addr_t	nb_wins1;	/* primary WINS */
72 	in_addr_t	nb_wins2;	/* secondary WINS (unused now) */
73 	struct sockaddr_in	nb_lastns; /* see cmd:lookup.c */
74 };
75 typedef struct nb_ctx nb_ctx_t;
76 
77 /*
78  * resource record
79  */
80 struct nbns_rr {
81 	uchar_t		*rr_name;	/* compressed NETBIOS name */
82 	uint16_t	rr_type;
83 	uint16_t	rr_class;
84 	uint32_t	rr_ttl;
85 	uint16_t	rr_rdlength;
86 	uchar_t		*rr_data;
87 };
88 typedef struct nbns_rr nfns_rr_t;
89 
90 /*
91  * NetBIOS name return
92  */
93 struct nbns_nr {
94 	char		ns_name[NB_NAMELEN];
95 	uint16_t	ns_flags;
96 };
97 typedef struct nbns_nr nbns_nr_t;
98 
99 #define	NBRQF_POINT	0x0000
100 #define	NBRQF_BROADCAST	0x0001
101 
102 #define	NBNS_GROUPFLG 0x8000
103 
104 struct sockaddr;
105 
106 #ifdef __cplusplus
107 extern "C" {
108 #endif
109 
110 int  nb_resolvehost_in(const char *, struct sockaddr **);
111 int  nbns_resolvename(const char *, struct nb_ctx *, struct sockaddr **);
112 int  nbns_getnodestatus(struct sockaddr *targethost,
113     struct nb_ctx *ctx, char *system, char *workgroup);
114 int  nb_getlocalname(char *name, size_t maxlen);
115 const char *nb_strerror(int error);
116 
117 int  nb_ctx_create(struct nb_ctx **);
118 void nb_ctx_done(struct nb_ctx *);
119 int  nb_ctx_setns(struct nb_ctx *, const char *);
120 int  nb_ctx_setscope(struct nb_ctx *, const char *);
121 int  nb_ctx_resolve(struct nb_ctx *);
122 int  nb_ctx_readrcsection(struct rcfile *, struct nb_ctx *, const char *, int);
123 
124 #ifdef __cplusplus
125 }
126 #endif
127 
128 #endif /* !_NETSMB_NB_LIB_H_ */
129