1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     nsoc_admin.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 #ifndef NSOC_ADMIN_H
21 #define NSOC_ADMIN_H
22 
23 #ifndef NSOC_NO_DEPEND_HEADER
24 #include <nn/net/compatible/nos/nos.h>			/* for NOSxxxx */
25 #include <nn/net/compatible/nnet/nnet.h>			/* for NNETxxxx */
26 #include <nn/net/compatible/nsoc/nsoc_user.h>		/* for NSOCInAddr, NSOCDNSServerInfo */
27 #endif
28 
29 #ifdef  __cplusplus
30 extern "C" {
31 #endif
32 
33 /*---------------------------------------------------------------------------*
34  * Definitions
35  *---------------------------------------------------------------------------*/
36 
37 #define NSOC_VENDOR_NINTENDO        0x0000  /* Please see man pages for details */
38 #define NSOC_COMMON_CONF_VERSION    0x3100  /* Please see man pages for details */
39 #define NSOC_INS_CONF_VERSION       0x4100  /* Please see man pages for details */
40 
41 /* Please see man pages for details
42 
43  */
44 #define NSOC_ERROR_BASE                          0xffff8000
45 #define NSOC_ERROR_CODE(code)                    ((s32)(NSOC_ERROR_BASE|(code)))
46 
47 enum NSOCErrorCode {
48     NSOC_ERR_PARAM          = NSOC_ERROR_CODE(1),       /* Please see man pages for details */
49     NSOC_ERR_INIT           = NSOC_ERROR_CODE(2),       /* Please see man pages for details */
50     NSOC_ERR_FINISH         = NSOC_ERROR_CODE(3),       /* Please see man pages for details */
51     NSOC_ERR_CONFVER        = NSOC_ERROR_CODE(4),       /* Please see man pages for details */
52     NSOC_ERR_STATE          = NSOC_ERROR_CODE(5),       /* Please see man pages for details */
53     NSOC_ERR_EXIST          = NSOC_ERROR_CODE(6),       /* Please see man pages for details */
54     NSOC_ERR_NOMEM          = NSOC_ERROR_CODE(7),       /* Please see man pages for details */
55     NSOC_ERR_NOS            = NSOC_ERROR_CODE(8),       /* Please see man pages for details */
56     NSOC_ERR_LOWER          = NSOC_ERROR_CODE(9),       /* Please see man pages for details */
57     NSOC_ERR_TIMEOUT        = NSOC_ERROR_CODE(10),      /* Please see man pages for details */
58     NSOC_ERR_INS_RESOURCES  = NSOC_ERROR_CODE(11),      /* Please see man pages for details */
59     NSOC_ERR_MAXSOCKET      = NSOC_ERROR_CODE(12),      /* Please see man pages for details */
60     NSOC_ERR_ABORT          = NSOC_ERROR_CODE(13),      /* Please see man pages for details */
61 
62     NSOC_ERR_IP_UNREACHABLE = NSOC_ERROR_CODE(21),      /* Please see man pages for details */
63     NSOC_ERR_IP_DATASIZE    = NSOC_ERROR_CODE(22),      /* Please see man pages for details */
64     NSOC_ERR_IP_NETDOWN     = NSOC_ERROR_CODE(23),      /* Please see man pages for details */
65     NSOC_ERR_IP_INVALID     = NSOC_ERROR_CODE(24),      /* Please see man pages for details */
66     NSOC_ERR_IP_REFUSED     = NSOC_ERROR_CODE(25),      /* Please see man pages for details */
67     NSOC_ERR_IP_TIMEOUT     = NSOC_ERROR_CODE(26),      /* Please see man pages for details */
68     NSOC_ERR_IP_CANCELED    = NSOC_ERROR_CODE(27),      /* Please see man pages for details */
69     NSOC_ERR_IP_BUSY        = NSOC_ERROR_CODE(28),      /* Please see man pages for details */
70     NSOC_ERR_IP_CLOSING     = NSOC_ERROR_CODE(29),      /* Please see man pages for details */
71     NSOC_ERR_IP_EXIST       = NSOC_ERROR_CODE(30),      /* Please see man pages for details */
72     NSOC_ERR_IP_RESET       = NSOC_ERROR_CODE(31),      /* Please see man pages for details */
73     NSOC_ERR_IP_NOT_EXIST   = NSOC_ERROR_CODE(32),      /* Please see man pages for details */
74     NSOC_ERR_IP_INV_SOCKET  = NSOC_ERROR_CODE(33),      /* Please see man pages for details */
75     NSOC_ERR_IP_AGAIN       = NSOC_ERROR_CODE(34),      /* Please see man pages for details */
76     NSOC_ERR_IP_SOCKET_UNSPECIFIED = NSOC_ERROR_CODE(35),   /* Please see man pages for details */
77     NSOC_ERR_IP_SOURCE_QUENCH = NSOC_ERROR_CODE(36),    /* Please see man pages for details */
78     NSOC_ERR_IP_INV_OPTION  = NSOC_ERROR_CODE(37),      /* Please see man pages for details */
79     NSOC_ERR_IP_ADDR_COLLISION = NSOC_ERROR_CODE(38),   /* Please see man pages for details */
80     NSOC_ERR_IP_SHUTDOWN    = NSOC_ERROR_CODE(39),      /* Please see man pages for details */
81     NSOC_ERR_IP_INV_HEADER  = NSOC_ERROR_CODE(40),      /* Please see man pages for details */
82     NSOC_ERR_IP_INV_ADDR    = NSOC_ERROR_CODE(41),      /* Please see man pages for details */
83     NSOC_ERR_IP_INV_DATA    = NSOC_ERROR_CODE(42),      /* Please see man pages for details */
84 
85     NSOC_ERR_DHCP_EXPIRED   = NSOC_ERROR_CODE(51),      /* Please see man pages for details */
86     NSOC_ERR_DHCP_TIMEOUT   = NSOC_ERROR_CODE(52),      /* Please see man pages for details */
87     NSOC_ERR_DHCP_NAK       = NSOC_ERROR_CODE(53),      /* Please see man pages for details */
88 
89     NSOC_ERR_IP6_ADDR_COLLISION = NSOC_ERROR_CODE(60),  /* Please see man pages for details */
90 
91     NSOC_ERR_NONE           = 0                         /* Please see man pages for details */
92 };
93 
94 /*---------------------------------------------------------------------------*
95  * Types/Declarations
96  *---------------------------------------------------------------------------*/
97 /* Please see man pages for details
98 
99  */
100 typedef struct NSOCCommonConfig {
101     u16         vendor;             /* Please see man pages for details */
102     u16         version;            /* Please see man pages for details */
103 
104     s32         timeWaitBuffer;     /* Please see man pages for details */
105 
106     s32         reassembleMtu;      /* Please see man pages for details */
107 
108     // TCP
109     s32         rwin;               /* Please see man pages for details */
110     s32         r2;                 /* Please see man pages for details */
111 
112     // UDP
113     s32         udpRecvBuff;        /* Please see man pages for details */
114 
115     // DHCP
116     const char* hostName;           /* Please see man pages for details */
117     s32         rdhcp;              /* Please see man pages for details */
118 
119 } NSOCCommonConfig;
120 
121 /*
122  * Flag that sets NSOCInstanceConfig flag
123  */
124 enum NSOCInstanceConfigFlag {
125 	NSOC_FLAG_DHCP         =  0x0001, /* Please see man pages for details */
126 	NSOC_FLAG_PPP          =  0x0002, /* Please see man pages for details */
127 	NSOC_FLAG_IP4          =  0x0004, /* Please see man pages for details */
128 	NSOC_FLAG_IP6          =  0x0008, /* Please see man pages for details */
129 	NSOC_FLAG_DHCP6        =  0x0010, /* Please see man pages for details */
130 	NSOC_FLAG_NORA_DHCP6   =  0x0020, /* Please see man pages for details */
131 	NSOC_FLAG_DHCP_REBOOT  =  0x0100, /* Please see man pages for details */
132 	NSOC_FLAG_DHCP_RELEASE =  0x0200, /* Please see man pages for details */
133 	NSOC_FLAG_DNS_AUTO     =  0x1000, /* Please see man pages for details */
134 	NSOC_FLAG_ZEROCONF     =  0x8000  /* Please see man pages for details */
135 };
136 
137 /* Please see man pages for details
138 
139  */
140 typedef struct NSOCInstanceConfig {
141     u16         vendor;             /* Please see man pages for details */
142     u16         version;            /* Please see man pages for details */
143 
144     u32         flag;               /* Please see man pages for details */
145     NSOCInAddr  addr;               /* Please see man pages for details */
146     NSOCInAddr  netmask;            /* Please see man pages for details */
147     NSOCInAddr  router;             /* Please see man pages for details */
148     s32         mtu;                /* Please see man pages for details */
149 
150     NSOCDNSServerInfo dnsserver;    /* Please see man pages for details */
151 
152 #ifdef NSOC_IP6_ENABLE
153     u8          curHopLimit;     /* Hop limit */
154     u32         retransTimer;    /* NS retransmission interval (msec) */
155     u32         dadNSTransmits;  /* Number of NS transmissions for duplicate address detection */
156     u8          interfaceId[8];  /* Interface ID */
157 #endif /* NSOC_IP6_ENABLE */
158 } NSOCInstanceConfig;
159 
160 /* Please see man pages for details
161 
162  */
163 typedef void (* NSOCConfigErrorCallback )(NSOCInstancePtr insP, s32 err);
164 
165 #ifndef NSOC_NO_DEPEND_HEADER
166 /* Please see man pages for details
167 
168  */
169 typedef BOOL (* NSOCFilter)(NSOCInstancePtr insP, NOSMessageBuf *mbuf);
170 #endif
171 
172 /* Please see man pages for details
173 
174  */
NSOC_GetNNETInstance(NSOCInstancePtr insP)175 NN_INLINE NNETInstance *NSOC_GetNNETInstance(NSOCInstancePtr insP)
176 {
177     return (NNETInstance *)insP;
178 }
179 
180 /* Please see man pages for details
181 
182  */
NSOC_GetNSOCInstance(NNETInstance * ins)183 NN_INLINE NSOCInstancePtr NSOC_GetNSOCInstance(NNETInstance *ins)
184 {
185     return (NSOCInstancePtr)ins;
186 }
187 
188 /*---------------------------------------------------------------------------*
189  * Function Prototypes
190  *---------------------------------------------------------------------------*/
191 /* nsoc_main.c */
192 extern s32 NSOC_Init(const NNETAllocator *allocator);
193 extern s32 NSOC_Finish(void);
194 extern s32 NSOC_SetCommonConfig(const NSOCCommonConfig *common_conf);
195 extern s32 NSOC_SetInstanceConfig(NSOCInstancePtr ins, const NSOCInstanceConfig *ins_conf);
196 extern s32 NSOC_StartupIns(NNETInstance *ins, s32 timeout);
197 extern s32 NSOC_CleanupIns(NNETInstance *ins, s32 timeout);
198 extern s32 NSOC_AbortIns(NNETInstance *ins);
199 extern s32 NSOC_CreateIns(NSOCInstancePtr *insP);
200 extern s32 NSOC_DestroyIns(NSOCInstancePtr insP);
201 extern s32 NSOC_AttachIF(NSOCInstancePtr insP, NNETEthernetAPI *low_api);
202 extern s32 NSOC_DetachIF(NSOCInstancePtr insP);
203 extern s32 NSOC_SetConfigErrorCallback(NSOCInstancePtr nsoc_insP, NSOCConfigErrorCallback callback);
204 extern s32 NSOC_SetUserInsParam(NSOCInstancePtr insP, void* param);
205 extern s32 NSOC_GetUserInsParam(NSOCInstancePtr insP, void** param);
206 
207 /* nsoc_socket.c */
208 extern int NSOC_GetUserInfo(int s, void** userInfo);
209 extern void NSOC_FreeUserInfo(void* userInfo);
210 extern void* NSOC_DuplicateUserInfo(void* userInfo, int socket);
211 
212 
213 
214 #ifdef  __cplusplus
215 }
216 #endif
217 
218 /* NSOC_ADMIN_H */
219 #endif
220 
221 
222