1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     nsoc_user.h
4   Copyright (C)2010 Nintendo Co., Ltd.  All rights reserved.
5   These coded instructions, statements, and computer programs contain
6   proprietary information of Nintendo of America Inc. and/or Nintendo
7   Company Ltd., and are protected by Federal copyright law. They may
8   not be disclosed to third parties or copied or duplicated in any form,
9   in whole or in part, without the prior written consent of Nintendo.
10   $Rev:$
11  *---------------------------------------------------------------------------
12 
13 
14 */
15 
16 /* Please see man pages for details
17 
18 
19  */
20 
21 #ifndef NSOC_USER_H
22 #define NSOC_USER_H
23 
24 #include <nn/net/compatible/nos/nos.h>	/* for NOSxxxx */
25 
26 #ifdef  __cplusplus
27 extern "C" {
28 #endif
29 
30 //#undef NSOC_IP6_ENABLE     /**< Uses IPv6 */
31 
32 
33 /* Please see man pages for details
34 
35  */
36 enum NSOCProtocolFamily {
37 	NSOC_PF_UNSPEC  = 0,           /* Please see man pages for details */
38 	NSOC_PF_INET    = 2,           /* Please see man pages for details */
39 	NSOC_PF_INET6   = 23           /* Please see man pages for details */
40 };
41 
42 /* Please see man pages for details
43 
44  */
45 enum NSOCAddressFamily {
46 	NSOC_AF_UNSPEC  = NSOC_PF_UNSPEC,   /* Please see man pages for details */
47 	NSOC_AF_INET    = NSOC_PF_INET,     /* Please see man pages for details */
48 	NSOC_AF_INET6   = NSOC_PF_INET6     /* Please see man pages for details */
49 };
50 
51 /* Please see man pages for details
52 
53  */
54 enum NSOCSocketType {
55 	NSOC_SOCK_STREAM    = 1,           /* Please see man pages for details */
56 	NSOC_SOCK_DGRAM     = 2            /* Please see man pages for details */
57 };
58 
59 /* Please see man pages for details
60 
61  */
62 enum NSOCMessageFlag {
63 	NSOC_MSG_OOB        = 0x01,        /* Please see man pages for details */
64 	NSOC_MSG_PEEK       = 0x02,        /* Please see man pages for details */
65 	NSOC_MSG_DONTWAIT   = 0x04         /* Please see man pages for details */
66 };
67 
68 /* Please see man pages for details
69 
70  */
71 enum NSOCPollType {
72 	NSOC_POLLRDNORM     = 0x0001,     /* Please see man pages for details */
73 	NSOC_POLLRDBAND     = 0x0002,     /* Please see man pages for details */
74 	NSOC_POLLPRI        = 0x0004,     /* Please see man pages for details */
75 	NSOC_POLLWRNORM     = 0x0008,     /* Please see man pages for details */
76 	NSOC_POLLWRBAND     = 0x0010,     /* Please see man pages for details */
77 	NSOC_POLLERR        = 0x0020,     /* Please see man pages for details */
78 	NSOC_POLLHUP        = 0x0040,     /* Please see man pages for details */
79 	NSOC_POLLNVAL       = 0x0080,     /* Please see man pages for details */
80 	NSOC_POLLIN         = (NSOC_POLLRDNORM | NSOC_POLLRDBAND), /* Please see man pages for details */
81 	NSOC_POLLOUT        = NSOC_POLLWRNORM /* Please see man pages for details */
82 };
83 
84 /* Please see man pages for details
85 
86  */
87 enum NSOCSocketLevel {
88 	NSOC_SOL_SOCKET     = 0xffff,      /* Please see man pages for details */
89 	NSOC_SOL_CONFIG     = 0xfffe,      /* Please see man pages for details */
90 	NSOC_SOL_IP         = 0,           /* Please see man pages for details */
91 	NSOC_SOL_ICMP       = 1,           /* Please see man pages for details */
92 	NSOC_SOL_TCP        = 6,           /* Please see man pages for details */
93 	NSOC_SOL_UDP        = 17,          /* Please see man pages for details */
94 	NSOC_SOL_IP6        = 41           /* Please see man pages for details */
95 };
96 
97 /* Please see man pages for details
98 
99  */
100 enum NSOCSocketOptionType {
101 	NSOC_IP_TOS             = 0x00000007, /* Please see man pages for details */
102 	NSOC_IP_TTL             = 0x00000008, /* Please see man pages for details */
103 	NSOC_IP_MULTICAST_LOOP  = 0x00000009, /* Please see man pages for details */
104 	NSOC_IP_MULTICAST_TTL   = 0x0000000a, /* Please see man pages for details */
105 	NSOC_IP_ADD_MEMBERSHIP  = 0x0000000b, /* Please see man pages for details */
106 	NSOC_IP_DROP_MEMBERSHIP = 0x0000000c, /* Please see man pages for details */
107 	NSOC_SO_REUSEADDR       = 0x00000004, /* Please see man pages for details */
108 	NSOC_SO_LINGER          = 0x00000080, /* Please see man pages for details */
109 	NSOC_SO_OOBINLINE       = 0x00000100, /* Please see man pages for details */
110 	NSOC_SO_SNDBUF          = 0x00001001, /* Please see man pages for details */
111 	NSOC_SO_RCVBUF          = 0x00001002, /* Please see man pages for details */
112 	NSOC_SO_SNDLOWAT        = 0x00001003, /* Please see man pages for details */
113 	NSOC_SO_RCVLOWAT        = 0x00001004, /* Please see man pages for details */
114 	NSOC_SO_TYPE            = 0x00001008, /* Please see man pages for details */
115 	NSOC_SO_ERROR           = 0x00001009, /* Please see man pages for details */
116 	NSOC_TCP_NODELAY        = 0x00002001, /* Please see man pages for details */
117 	NSOC_TCP_MAXSEG         = 0x00002002, /* Please see man pages for details */
118 	NSOC_TCP_STDURG         = 0x00002003, /* Please see man pages for details */
119 	NSOC_TCP_R2             = 0x00002004, /* Please see man pages for details */
120 	NSOC_TCP_R2_SYN         = 0x00002005  /* Please see man pages for details */
121 #ifdef NSOC_IP6_ENABLE
122 	,
123 	NSOC_IP6_MULTICAST_LOOP = 0x00010009, /* Please see man pages for details */
124 	NSOC_IP6_HOPLIMIT       = 0x0001000a, /* Please see man pages for details */
125 	NSOC_IP6_ADD_MEMBERSHIP = 0x0001000b, /* Please see man pages for details */
126 	NSOC_IP6_DROP_MEMBERSHIP= 0x0001000c  /* Please see man pages for details */
127 #endif
128 };
129 
130 /* Please see man pages for details
131 
132  */
133 enum NSOCShutdownType {
134 	NSOC_SHUT_RD        = 0,           /* Please see man pages for details */
135 	NSOC_SHUT_WR        = 1,           /* Please see man pages for details */
136 	NSOC_SHUT_RDWR      = 2            /* Please see man pages for details */
137 };
138 
139 /* Please see man pages for details
140 
141  */
142 enum NSOCFctrlFlag {
143 	NSOC_F_GETFL        = 3,            /* Please see man pages for details */
144 	NSOC_F_SETFL        = 4             /* Please see man pages for details */
145 };
146 
147 /* Please see man pages for details
148 
149  */
150 enum NSOCFctrlOperation {
151 	NSOC_O_NONBLOCK     = 0x04          /* Please see man pages for details */
152 };
153 
154 /* Please see man pages for details
155 
156  */
157 enum NSOCAddrInfoType {
158 	NSOC_AI_PASSIVE     = 0x01,         /* Please see man pages for details */
159 	NSOC_AI_CANONNAME   = 0x02,         /* Please see man pages for details */
160 	NSOC_AI_NUMERICHOST = 0x04,         /* Please see man pages for details */
161 	NSOC_AI_NUMERICSERV = 0x08          /* Please see man pages for details */
162 };
163 
164 /* Please see man pages for details
165 
166  */
167 enum NSOCNameInfoType {
168 	NSOC_NI_NOFQDN      = 0x01,         /* Please see man pages for details */
169 	NSOC_NI_NUMERICHOST = 0x02,         /* Please see man pages for details */
170 	NSOC_NI_NAMEREQD    = 0x04,         /* Please see man pages for details */
171 	NSOC_NI_NUMERICSERV = 0x08,         /* Please see man pages for details */
172 	NSOC_NI_DGRAM       = 0x10          /* Please see man pages for details */
173 };
174 
175 /* Please see man pages for details
176 
177  */
178 enum NSOCAddrInfoError {
179 	NSOC_EAI_BADFLAGS   = -301,         /* Please see man pages for details */
180 	NSOC_EAI_FAIL       = -302,         /* Please see man pages for details */
181 	NSOC_EAI_FAMILY     = -303,         /* Please see man pages for details */
182 	NSOC_EAI_MEMORY     = -304,         /* Please see man pages for details */
183 	NSOC_EAI_NONAME     = -305,         /* Please see man pages for details */
184 	NSOC_EAI_SOCKTYPE   = -307,         /* Please see man pages for details */
185 	NSOC_EAI_SYSTEM     = -308          /* Please see man pages for details */
186 };
187 
188 /* Please see man pages for details
189 
190  */
191 enum NSOCRRsetError {
192 	NSOC_ERRSET_NONAME  = -350,
193 	NSOC_ERRSET_NODATA  = -351,
194 	NSOC_ERRSET_NOMEMORY= -352,         /* Please see man pages for details */
195 	NSOC_ERRSET_INVAL   = -353,         /* Please see man pages for details */
196 	NSOC_ERRSET_FAIL    = -354
197 };
198 
199 /* Please see man pages for details
200 
201  */
202 enum NSOCSocketError {
203 	NSOC_E2BIG          = -1,
204 	NSOC_EACCES         = -2,     /* Please see man pages for details */
205 	NSOC_EADDRINUSE     = -3,     /* Please see man pages for details */
206 	NSOC_EADDRNOTAVAIL  = -4,     /* Please see man pages for details */
207 	NSOC_EAFNOSUPPORT   = -5,     /* Please see man pages for details */
208 	NSOC_EAGAIN         = -6,     /* Please see man pages for details */
209 	NSOC_EALREADY       = -7,
210 	NSOC_EBADF          = -8,     /* Please see man pages for details */
211 	NSOC_EBADMSG        = -9,
212 	NSOC_EBUSY          = -10,
213 	NSOC_ECANCELED      = -11,
214 	NSOC_ECHILD         = -12,
215 	NSOC_ECONNABORTED   = -13,    /* Please see man pages for details */
216 	NSOC_ECONNREFUSED   = -14,    /* Please see man pages for details */
217 	NSOC_ECONNRESET     = -15,    /* Please see man pages for details */
218 	NSOC_EDEADLK        = -16,
219 	NSOC_EDESTADDRREQ   = -17,    /* Please see man pages for details */
220 	NSOC_EDOM           = -18,
221 	NSOC_EDQUOT         = -19,
222 	NSOC_EEXIST         = -20,
223 	NSOC_EFAULT         = -21,
224 	NSOC_EFBIG          = -22,
225 	NSOC_EHOSTUNREACH   = -23,
226 	NSOC_EIDRM          = -24,
227 	NSOC_EILSEQ         = -25,
228 	NSOC_EINPROGRESS    = -26,    /* Please see man pages for details */
229 	NSOC_EINTR          = -27,    /* Please see man pages for details */
230 	NSOC_EINVAL         = -28,    /* Please see man pages for details */
231 	NSOC_EIO            = -29,    /* Please see man pages for details */
232 	NSOC_EISCONN        = -30,    /* Please see man pages for details */
233 	NSOC_EISDIR         = -31,
234 	NSOC_ELOOP          = -32,
235 	NSOC_EMFILE         = -33,    /* Please see man pages for details */
236 	NSOC_EMLINK         = -34,
237 	NSOC_EMSGSIZE       = -35,    /* Please see man pages for details */
238 	NSOC_EMULTIHOP      = -36,
239 	NSOC_ENAMETOOLONG   = -37,
240 	NSOC_ENETDOWN       = -38,    /* Please see man pages for details */
241 	NSOC_ENETRESET      = -39,    /* Please see man pages for details */
242 	NSOC_ENETUNREACH    = -40,    /* Please see man pages for details */
243 	NSOC_ENFILE         = -41,
244 	NSOC_ENOBUFS        = -42,    /* Please see man pages for details */
245 	NSOC_ENODATA        = -43,
246 	NSOC_ENODEV         = -44,
247 	NSOC_ENOENT         = -45,
248 	NSOC_ENOEXEC        = -46,
249 	NSOC_ENOLCK         = -47,
250 	NSOC_ENOLINK        = -48,
251 	NSOC_ENOMEM         = -49,    /* Please see man pages for details */
252 	NSOC_ENOMSG         = -50,
253 	NSOC_ENOPROTOOPT    = -51,    /* Please see man pages for details */
254 	NSOC_ENOSPC         = -52,
255 	NSOC_ENOSR          = -53,
256 	NSOC_ENOSTR         = -54,
257 	NSOC_ENOSYS         = -55,
258 	NSOC_ENOTCONN       = -56,    /* Please see man pages for details */
259 	NSOC_ENOTDIR        = -57,
260 	NSOC_ENOTEMPTY      = -58,
261 	NSOC_ENOTSOCK       = -59,
262 	NSOC_ENOTSUP        = -60,
263 	NSOC_ENOTTY         = -61,
264 	NSOC_ENXIO          = -62,
265 	NSOC_EOPNOTSUPP     = -63,    /* Please see man pages for details */
266 	NSOC_EOVERFLOW      = -64,
267 	NSOC_EPERM          = -65,
268 	NSOC_EPIPE          = -66,
269 	NSOC_EPROTO         = -67,
270 	NSOC_EPROTONOSUPPORT= -68,    /* Please see man pages for details */
271 	NSOC_EPROTOTYPE     = -69,    /* Please see man pages for details */
272 	NSOC_ERANGE         = -70,
273 	NSOC_EROFS          = -71,
274 	NSOC_ESPIPE         = -72,
275 	NSOC_ESRCH          = -73,
276 	NSOC_ESTALE         = -74,
277 	NSOC_ETIME          = -75,
278 	NSOC_ETIMEDOUT      = -76,    /* Please see man pages for details */
279 	NSOC_ETXTBSY        = -77,
280 	NSOC_EWOULDBLOCK    = NSOC_EAGAIN,   /* Please see man pages for details */  /* Posix.1g */
281 	NSOC_EXDEV          = -78
282 };
283 
284 /* Please see man pages for details
285 
286  */
287 enum NSOCInstanceOptionType {
288 	NSOC_CONFIG_FILTER_INPUT                   =  0x1001,    /* Please see man pages for details */
289 	NSOC_CONFIG_FILTER_OUTPUT                  =  0x1002,    /* Please see man pages for details */
290 	NSOC_CONFIG_ERROR                          =  0x1003,    /* Please see man pages for details */
291 	NSOC_CONFIG_MAC_ADDRESS                    =  0x1004,    /* Please see man pages for details */
292 	NSOC_CONFIG_LINK_STATE                     =  0x1005,    /* Please see man pages for details */
293 	NSOC_CONFIG_INTERFACE_STATISTICS           =  0x1006,    /* Please see man pages for details */
294 	NSOC_CONFIG_MUTE                           =  0x1007,    /* Please see man pages for details */
295 	NSOC_CONFIG_ARP_NUMBER                     =  0x3001,    /* Please see man pages for details */
296 	NSOC_CONFIG_ARP_TABLE                      =  0x3002,    /* Please see man pages for details */
297 	NSOC_CONFIG_ARP_REFRESH                    =  0x3003,    /* Please see man pages for details */
298 	NSOC_CONFIG_ARP_ADD                        =  0x3004,    /* Please see man pages for details */
299 	NSOC_CONFIG_ARP_REMOVE                     =  0x3005,    /* Please see man pages for details */
300 	NSOC_CONFIG_IP_STATISTICS                  =  0x4001,    /* Please see man pages for details */
301 	NSOC_CONFIG_IP_ADDR_NUMBER                 =  0x4002,    /* Please see man pages for details */
302 	NSOC_CONFIG_IP_ADDR_TABLE                  =  0x4003,    /* Please see man pages for details */
303 	NSOC_CONFIG_IP_MTU                         =  0x4004,    /* Please see man pages for details */
304 	NSOC_CONFIG_IP_ROUTING_NUMBER              =  0x4005,    /* Please see man pages for details */
305 	NSOC_CONFIG_IP_ROUTING_TABLE               =  0x4006,    /* Please see man pages for details */
306 	NSOC_CONFIG_IP_ADD_ROUTE                   =  0x4007,    /* Please see man pages for details */
307 	NSOC_CONFIG_IP_REMOVE_ROUTE                =  0x4008,    /* Please see man pages for details */
308 	NSOC_CONFIG_IP_ADDR                        =  0x400a,    /* Please see man pages for details */
309 	NSOC_CONFIG_IP_GATEWAY                     =  0x400b,    /* Please see man pages for details */
310 	NSOC_CONFIG_IP_NETMASK                     =  0x400c,    /* Please see man pages for details */
311 	NSOC_CONFIG_IP_REFRESH_ROUTE               =  0x400d,    /* Please see man pages for details */
312 	NSOC_CONFIG_ICMP_STATISTICS                =  0x5001,    /* Please see man pages for details */
313 #ifdef NSOC_IP6_ENABLE
314 	NSOC_CONFIG_IP6_STATISTICS                 =  0x6001,    /* Please see man pages for details */
315 	NSOC_CONFIG_IP6_MTU                        =  0x6002,    /* Please see man pages for details */
316 	NSOC_CONFIG_IP6_PREFIX_NUMBER              =  0x6003,    /* Please see man pages for details */
317 	NSOC_CONFIG_IP6_PREFIX_TABLE               =  0x6004,    /* Please see man pages for details */
318 	NSOC_CONFIG_IP6_ADD_ROUTE                  =  0x6005,    /* Please see man pages for details */
319 	NSOC_CONFIG_IP6_REMOVE_ROUTE               =  0x6006,    /* Please see man pages for details */
320 	NSOC_CONFIG_IP6_ADD_ADDRESS                =  0x6007,    /* Please see man pages for details */
321 	NSOC_CONFIG_IP6_REMOVE_ADDRESS             =  0x6008,    /* Please see man pages for details */
322 	NSOC_CONFIG_IP6_HOPLIMIT                   =  0x6009,    /* Please see man pages for details */
323 	NSOC_CONFIG_IP6_RETRANSMIT_TIMER           =  0x600a,    /* Please see man pages for details */
324 	NSOC_CONFIG_IP6_DUP_ADDR_DETECT_TRANSMITS  =  0x600b,    /* Please see man pages for details */
325 	NSOC_CONFIG_IP6_INTERFACE_ID               =  0x600c,    /* Please see man pages for details */
326 	NSOC_CONFIG_IP6_DESTINATION_CACHE_NUMBER   =  0x600d,    /* Please see man pages for details */
327 	NSOC_CONFIG_IP6_DESTINATION_CACHE_TABLE    =  0x600e,    /* Please see man pages for details */
328 	NSOC_CONFIG_IP6_ADDR_NUMBER                =  0x600f,    /* Please see man pages for details */
329 	NSOC_CONFIG_IP6_ADDR_TABLE                 =  0x6010,    /* Please see man pages for details */
330 	NSOC_CONFIG_IP6_ROUTE_NUMBER               =  0x6011,    /* Please see man pages for details */
331 	NSOC_CONFIG_IP6_ROUTE_TABLE                =  0x6012,    /* Please see man pages for details */
332 	NSOC_CONFIG_IP6_NEIGHBOR_CACHE_NUMBER      =  0x6013,    /* Please see man pages for details */
333 	NSOC_CONFIG_IP6_NEIGHBOR_CACHE_TABLE       =  0x6014,    /* Please see man pages for details */
334 	NSOC_CONFIG_IP6_DEFAULT_ROUTER_NUMBER      =  0x6015,    /* Please see man pages for details */
335 	NSOC_CONFIG_IP6_DEFAULT_ROUTER_TABLE       =  0x6016,    /* Please see man pages for details */
336 	NSOC_CONFIG_IP6_ADD_PREFIX                 =  0x6017,    /* Please see man pages for details */
337 	NSOC_CONFIG_IP6_REMOVE_PREFIX              =  0x6018,    /* Please see man pages for details */
338 	NSOC_CONFIG_ICMP6_STATISTICS               =  0x7001,    /* Please see man pages for details */
339 #endif /* NSOC_IP6_ENABLE */
340 	NSOC_CONFIG_UDP_STATISTICS                 =  0x8001,    /* Please see man pages for details */
341 	NSOC_CONFIG_UDP_NUMBER                     =  0x8002,    /* Please see man pages for details */
342 	NSOC_CONFIG_UDP_TABLE                      =  0x8003,    /* Please see man pages for details */
343 	NSOC_CONFIG_TCP_STATISTICS                 =  0x9001,    /* Please see man pages for details */
344 	NSOC_CONFIG_TCP_NUMBER                     =  0x9002,    /* Please see man pages for details */
345 	NSOC_CONFIG_TCP_TABLE                      =  0x9003,    /* Please see man pages for details */
346 	NSOC_CONFIG_TCP_MSL                        =  0x9006,    /* Please see man pages for details */
347 	NSOC_CONFIG_TCP_RTO_MIN                    =  0x9007,    /* Please see man pages for details */
348 	NSOC_CONFIG_TCP_RTO_MAX                    =  0x9008,    /* Please see man pages for details */
349 	NSOC_CONFIG_TCP_RTO_DEFAULT                =  0x9009,    /* Please see man pages for details */
350 	NSOC_CONFIG_IGMP_MODE                      =  0xA001,    /* Please see man pages for details */
351 	NSOC_CONFIG_DNS_DOMAIN_NAME                =  0xB001,    /* Please see man pages for details */
352 	NSOC_CONFIG_DNS_SERVER_NUMBER              =  0xB002,    /* Please see man pages for details */
353 	NSOC_CONFIG_DNS_SERVER_TABLE               =  0xB003,    /* Please see man pages for details */
354 	NSOC_CONFIG_DHCP_REMAINING_LEASE_TIME      =  0xC001     /* Please see man pages for details */
355 };
356 
357 /* Please see man pages for details
358 
359  */
360 enum NSOCInstanceState {
361     NSOC_STATE_INIT = 0,        /* Please see man pages for details */
362     NSOC_STATE_WAIT_LINKUP,     /* Please see man pages for details */
363     NSOC_STATE_ACTIVE,          /* Please see man pages for details */
364     NSOC_STATE_MORIBUND         /* Please see man pages for details */
365 };
366 
367 /*---------------------------------------------------------------------------*
368  * Types/Declarations
369  *---------------------------------------------------------------------------*/
370 
371 /* Please see man pages for details
372 
373  */
374 typedef void * NSOCInstancePtr;
375 
376 /*
377  * Address length
378  */
379 #define NSOC_ETH_ALEN           6       /* Please see man pages for details */
380 #define NSOC_IP_ALEN            4       /* Please see man pages for details */
381 #define NSOC_IP6_ALEN           16      /* Please see man pages for details */
382 
383 /* Please see man pages for details
384 
385 
386 
387 
388 
389 
390  */
391 #define NSOC_INET_ADDRSTRLEN    16
392 #define NSOC_INET6_ADDRSTRLEN   46
393 
394 /* Please see man pages for details
395 
396  */
397 #define NSOC_INADDR_ANY           ((u32) 0x00000000)  /*  */
398 
399 typedef struct NSOCInAddr
400 {
401     u32         addr;   /* Please see man pages for details */
402 } NSOCInAddr;
403 
404 /* Please see man pages for details
405 
406  */
407 typedef struct NSOCSockAddrIn
408 {
409     u8          len;            /* Please see man pages for details */
410     u8          family;         /* Please see man pages for details */
411     u16         port;           /* Please see man pages for details */
412     NSOCInAddr  addr;           /* Please see man pages for details */
413 } NSOCSockAddrIn;
414 
415 /* Please see man pages for details
416 
417  */
418 typedef struct NSOCIn6Addr
419 {
420     u8         addr[NSOC_IP6_ALEN];    /* Please see man pages for details */
421 } NSOCIn6Addr;
422 
423 /* Please see man pages for details
424 
425  */
426 typedef struct NSOCSockAddrIn6
427 {
428     u8          len;            /* Please see man pages for details */
429     u8          family;         /* Please see man pages for details */
430     u16         port;           /* Please see man pages for details */
431     NSOCIn6Addr addr;           /* Please see man pages for details */
432     u32         flowInfo;       /* Please see man pages for details */
433     u32         scopeId;        /* Please see man pages for details */
434 } NSOCSockAddrIn6;
435 
436 /* Please see man pages for details
437 
438  */
439 typedef struct NSOCSockAddr
440 {
441     u8          len;            /* Please see man pages for details */
442     u8          family;         /* Please see man pages for details */
443     u16         pad1;           /* Please see man pages for details */
444     u32         pad2[6];        /* Please see man pages for details */
445 } NSOCSockAddr;
446 
447 /* Please see man pages for details
448 
449  */
450 typedef struct NSOCSockAddrStorage
451 {
452     u8          len;            /* Please see man pages for details */
453     u8          family;         /* Please see man pages for details */
454     u16         pad1;           /* Please see man pages for details */
455     u32         pad2[6];        /* Please see man pages for details */
456 } NSOCSockAddrStorage;
457 
458 /* Please see man pages for details
459 
460  */
461 typedef struct NSOCLinger
462 {
463     int         onoff;          /* Please see man pages for details */
464     int         linger;         /* Please see man pages for details */
465 } NSOCLinger;
466 
467 /* Please see man pages for details
468 
469  */
470 typedef struct NSOCIPMreq
471 {
472    NSOCInAddr     multiaddr;      /* Please see man pages for details */
473    NSOCInAddr     interface;      /* Please see man pages for details */
474 } NSOCIPMreq;
475 
476 /* Please see man pages for details
477 
478  */
479 typedef struct NSOCIP6Mreq
480 {
481    u32            scopeId;                  /* Please see man pages for details */
482    u8             maddr[NSOC_IP6_ALEN];     /* Please see man pages for details */
483    u8             filterType;               /* Please see man pages for details */
484    u32            srcNum;                   /* Please see man pages for details */
485    u8             srcList[NSOC_IP6_ALEN];   /* Please see man pages for details */
486 } NSOCIP6Mreq;
487 
488 enum NSOCIP6MreqType {
489 	NSOC_IP6MREQ_INCLUDE = 0,   /* Please see man pages for details */
490 	NSOC_IP6MREQ_EXCLUDE = 1    /* Please see man pages for details */
491 };
492 
493 /* Please see man pages for details
494 
495  */
496 typedef struct NSOCPollFD
497 {
498     int         fd;             /* Please see man pages for details */
499     int         events;         /* Please see man pages for details */
500     int         revents;        /* Please see man pages for details */
501 } NSOCPollFD;
502 
503 
504 typedef struct NSOCAddrInfo   NSOCAddrInfo;
505 
506 /* Please see man pages for details
507 
508  */
509 struct NSOCAddrInfo
510 {
511     int             flags;         /* Please see man pages for details */
512     int             family;        /* Please see man pages for details */
513     int             sockType;      /* Please see man pages for details */
514     int             protocol;      /* Please see man pages for details */
515     unsigned        addrLen;       /* Please see man pages for details */
516     char*           canonName;     /* Please see man pages for details */
517     void*           addr;          /* Please see man pages for details */
518     NSOCAddrInfo*   next;          /* Please see man pages for details */
519 };
520 
521 typedef struct NSOCRDataInfo {
522     u32 length;
523     u8 *data;
524 } NSOCRDataInfo;
525 
526 /* Please see man pages for details
527 
528  */
529 typedef struct NSOCRRSetInfo {
530     u16 rdClass;
531     u16 rdType;
532     u32 ttl;
533     u32 nrDatas;
534     char *name;
535     NSOCRDataInfo *rDatas;
536 } NSOCRRSetInfo;
537 
538 /* Please see man pages for details
539 
540  */
541 typedef struct NSOCHostEnt
542 {
543     char*       name;           /* Please see man pages for details */
544     char**      aliases;        /* Please see man pages for details */
545     s16         addrType;       /* Please see man pages for details */
546     s16         length;         /* Please see man pages for details */
547     u8**        addrList;       /* Please see man pages for details */
548 } NSOCHostEnt;
549 
550 
551 /* Please see man pages for details
552 
553  */
554 typedef struct NSOCDNSAddr {
555     int af;                 /* Please see man pages for details */
556     u8 addr[NSOC_IP6_ALEN];  /* Please see man pages for details */
557 } NSOCDNSAddr;
558 
559 /* Please see man pages for details
560 
561  */
562 #define NSOC_DNSSERVER_NUM_MAX          4      /* Please see man pages for details */
563 #define NSOC_DOMAIN_NAME_LEN_MAX        255
564 typedef struct NSOCDNSServerInfo {
565     NSOCDNSAddr entry[NSOC_DNSSERVER_NUM_MAX];         /* Please see man pages for details */
566 
567     char domain[NSOC_DOMAIN_NAME_LEN_MAX + 1];        /* Please see man pages for details */
568 
569 } NSOCDNSServerInfo;
570 
571 #define NSOC_DNS_NAME_MAX               255 /* Please see man pages for details */
572 #define NSOC_MAXDNAME                   (NSOC_DNS_NAME_MAX + 1) /* Please see man pages for details */
573 #define NSOC_DNS_RESOLV_ADDRESS_MAX     24  /* Please see man pages for details */
574 #define NSOC_DNS_RESOLV_ALIASNAME_MAX   24  /* Please see man pages for details */
575 
576 /*
577  * Definitions for well-known address initialization
578  */
579 #define NSOC_IN6ADDR_UNSPECIFIED_INIT               {0}
580 #define NSOC_IN6ADDR_LOOPBACK_INIT                  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}
581 #define NSOC_IN6ADDR_LINKLOCAL_ALL_NODES_INIT       {0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,1}
582 #define NSOC_IN6ADDR_LINKLOCAL_ALL_ROUTERS_INIT     {0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,2}
583 #define NSOC_IN6ADDR_MULTICAST_SOLICITED_NODE_INIT  {0xff,0x02,0,0,0,0,0,0,0,0,0,0x01,0xff,0,0,0}
584 #define NSOC_IN6ADDR_LINKLOCAL_UNICAST_INIT         {0xfe,0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
585 #define NSOC_IN6ADDR_MULTICAST_ALL_ROUTERS_INIT     {0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,16}
586 
587 #ifdef SWITCH_SO_ENDIAN_BIG
588 // Big Endian environment
589 #define NSOC_NtoHl(netlong)        ((u32) (netlong))
590 #define NSOC_NtoHs(netshort)       ((u16) (netshort))
591 #define NSOC_HtoNl(hostlong)       ((u32) (hostlong))
592 #define NSOC_HtoNs(hostshort)      ((u16) (hostshort))
593 
594 #else
595 // Little Endian environment
596 /* Please see man pages for details
597 
598  */
599 #define NSOC_NtoHl(netlong)        ( (u32)( (((u32)(netlong)>>24)&0x000000FF) | (((u32)(netlong)>> 8)&0x0000FF00) | (((u32)(netlong)<< 8)&0x00FF0000) | (((u32)(netlong)<<24)&0xFF000000) ) )
600 
601 /* Please see man pages for details
602 
603  */
604 #define NSOC_NtoHs(netshort)       ( (u16)( (((u16)(netshort)>>8)&0x00FF) | (((u16)(netshort)<<8)&0xFF00) ) )
605 
606 /* Please see man pages for details
607 
608  */
609 #define NSOC_HtoNl(hostlong)       ( (u32)( (((u32)(hostlong)>>24)&0x000000FF) | (((u32)(hostlong)>> 8)&0x0000FF00) | (((u32)(hostlong)<< 8)&0x00FF0000) | (((u32)(hostlong)<<24)&0xFF000000) ) )
610 
611 /* Please see man pages for details
612 
613  */
614 #define NSOC_HtoNs(hostshort)      ( (u16)( (((u16)(hostshort)>>8)&0x00FF) | (((u16)(hostshort)<<8)&0xFF00) ) )
615 
616 #endif
617 
618 /* Please see man pages for details
619 
620  */
621 /* nsoc_socket.c */
622 extern int NSOC_Socket(int af, int type, int protocol);
623 extern int NSOC_SocketEx(int af, int type, int protocol, void *userInfo);
624 extern int NSOC_Listen(int s, int backlog);
625 extern int NSOC_Accept(int s, void* sockAddr);
626 extern int NSOC_Bind(int s, const void* sockAddr);
627 extern int NSOC_Connect(int s, const void* sockAddr);
628 extern int NSOC_Read(int s, void* buf, int len);
629 extern int NSOC_Recv(int s, void* buf, int len, int flags);
630 extern int NSOC_RecvFrom(int s, void* buf, int len, int flags, void* sockFrom);
631 extern int NSOC_Write(int s, const void* buf, int len);
632 extern int NSOC_Send(int s, const void* buf, int len, int flags);
633 extern int NSOC_SendTo(int s, const void* buf, int len, int flags, const void* sockTo);
634 extern int NSOC_Close(int s);
635 extern int NSOC_Shutdown(int s, int how);
636 extern int NSOC_GetSockOpt(int s, int level, int optname, void* optval, int* optlen);
637 extern int NSOC_SetSockOpt(int s, int level, int optname,  const void* optval, int optlen);
638 extern int NSOC_Fcntl(int s, int cmd, ...);
639 extern int NSOC_Poll(NSOCPollFD fds[], unsigned nfds, s32 timeout);
640 extern int NSOC_SockAtMark(int s);
641 extern u32 NSOC_GetHostID(NSOCInstancePtr insP);
642 extern NSOCHostEnt* NSOC_GetHostByAddr(const void* addr, int len, int type);
643 extern NSOCHostEnt* NSOC_GetHostByName(const char* name);
644 extern int NSOC_GetSockName(int s, void* sockAddr);
645 extern int NSOC_GetPeerName(int s, void* sockAddr);
646 extern int NSOC_SetDNSInstance(NSOCInstancePtr insP);
647 extern int NSOC_SetResolverIns(NSOCInstancePtr insP, NSOCDNSServerInfo *dnsServer);
648 extern int NSOC_GetResolverIns(NSOCInstancePtr insP, NSOCDNSServerInfo *dnsServer);
649 extern int NSOC_SetResolver(const NSOCInAddr* dns1, const NSOCInAddr* dns2); /* deprecated */
650 extern int NSOC_GetResolver(NSOCInAddr* dns1, NSOCInAddr* dns2); /* deprecated */
651 extern int NSOC_SetSuffix(const char* domainName);
652 extern int NSOC_GetSuffix(char* domainName);
653 extern int NSOC_SetInstanceOpt(NSOCInstancePtr insP, int level, int optname, const void* optval, int optlen);
654 extern int NSOC_GetInstanceOpt(NSOCInstancePtr insP, int level, int optname, void* optval, int* optlen);
655 extern void NSOC_SetLastError(int error);
656 extern int NSOC_GetLastError(void);
657 
658 /* nsoc_dns.c */
659 extern int NSOC_GetAddrInfo(const char* nodeName, const char* servName, const NSOCAddrInfo* hints, NSOCAddrInfo** res);
660 extern int NSOC_GetNameInfo(const void* sa, char* node, unsigned nodeLen, char* service, unsigned serviceLen, int flags);
661 extern void NSOC_FreeAddrInfo(NSOCAddrInfo* head);
662 extern void NSOC_FreeRRSet(NSOCRRSetInfo *rrset);
663 extern int NSOC_GetRRSetByName(const char *hostName, u16 rdClass, u16 rdType, u32 flags, NSOCRRSetInfo **res);
664 extern int NSOC_GetServiceLocation(const char* domainName, const char* servName, const NSOCAddrInfo* hints, NSOCAddrInfo** res);
665 
666 /* nsoc_inet.c */
667 extern char* NSOC_IPAtoN(const char* dotted, u8* addr);
668 extern char* NSOC_IPNtoA(const u8* addr);
669 #ifdef NSOC_IP6_ENABLE
670 extern char *NSOC_IP6AtoN(const char *dotted, u8 *addr);
671 extern char *NSOC_IP6NtoA(const u8 *addr, char *ascii, u32 buflen);
672 extern char *NSOC_IP6NtoAs(const u8 *addr);
673 #endif
674 extern int NSOC_InetAtoN(const char* cp, NSOCInAddr* inp);
675 extern char* NSOC_InetNtoA(NSOCInAddr in);
676 extern int NSOC_InetPtoN(int af, const char* src, void* dst);
677 extern const char* NSOC_InetNtoP(int af, const void* src, char* dst, unsigned len);
678 
679 /* nsoc_main.c */
680 extern u32 NSOC_IP6GetScopeIdByInstance(NSOCInstancePtr insP);
681 
682 /* nsoc_state.c */
683 extern s32 NSOC_GetStateIns(NSOCInstancePtr insP);
684 extern void NSOC_ChangeStateIns(NSOCInstancePtr insP, s32 state);
685 
686 
687 extern int NSOC_TST_GetNodeParam(int socket, NOSMutexId *mtxid, u8 *proto, u8 *flag, s32 *id);
688 extern int NSOC_TST_UDPGetObj(int socket, void*  getobj);
689 extern int NSOC_TST_IPGetInfo(int socket, void* ipinfo);
690 extern int NSOC_TST_TCPGetObj(int socket, void*  getobj);
691 
692 #ifdef  __cplusplus
693 }
694 #endif
695 
696 /* NSOC_USER_H */
697 #endif
698