1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: nsoc_admin.h
4
5 Copyright (C)2010 Nintendo Co., Ltd. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Rev:$
14 *---------------------------------------------------------------------------*/
15
16 /**
17 * NSOCモジュール 接続管理プロセス用定義
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 /**< 本実装が対応している設定のベンダーコード */
38 #define NSOC_COMMON_CONF_VERSION 0x3100 /**< 本実装が対応している全体設定のバージョン */
39 #define NSOC_INS_CONF_VERSION 0x4100 /**< 本実装が対応しているインスタンス設定のバージョン */
40
41 /**
42 * NSOCモジュールのエラーコード
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), /**< パラメータエラー */
49 NSOC_ERR_INIT = NSOC_ERROR_CODE(2), /**< 初期状態のため実行不可 */
50 NSOC_ERR_FINISH = NSOC_ERROR_CODE(3), /**< 終了状態のため実行不可 */
51 NSOC_ERR_CONFVER = NSOC_ERROR_CODE(4), /**< 設定のバージョンエラー */
52 NSOC_ERR_STATE = NSOC_ERROR_CODE(5), /**< ステートエラー */
53 NSOC_ERR_EXIST = NSOC_ERROR_CODE(6), /**< 既に作成済み */
54 NSOC_ERR_NOMEM = NSOC_ERROR_CODE(7), /**< メモリ不足 */
55 NSOC_ERR_NOS = NSOC_ERROR_CODE(8), /**< OSサービス関数がエラーを返した */
56 NSOC_ERR_LOWER = NSOC_ERROR_CODE(9), /**< 下位レイヤからのエラー */
57 NSOC_ERR_TIMEOUT = NSOC_ERROR_CODE(10), /**< タイムアウト */
58 NSOC_ERR_INS_RESOURCES = NSOC_ERROR_CODE(11), /**< OSリソース確保失敗 */
59 NSOC_ERR_MAXSOCKET = NSOC_ERROR_CODE(12), /**< ソケット数が最大に達した */
60 NSOC_ERR_ABORT = NSOC_ERROR_CODE(13), /**< アボートされた */
61
62 NSOC_ERR_IP_UNREACHABLE = NSOC_ERROR_CODE(21), /**< 到達できなかった */
63 NSOC_ERR_IP_DATASIZE = NSOC_ERROR_CODE(22), /**< データサイズ不正 */
64 NSOC_ERR_IP_NETDOWN = NSOC_ERROR_CODE(23), /**< ネットワークダウン */
65 NSOC_ERR_IP_INVALID = NSOC_ERROR_CODE(24), /**< 不正パラメータ */
66 NSOC_ERR_IP_REFUSED = NSOC_ERROR_CODE(25), /**< 処理の拒否 */
67 NSOC_ERR_IP_TIMEOUT = NSOC_ERROR_CODE(26), /**< タイムアウト */
68 NSOC_ERR_IP_CANCELED = NSOC_ERROR_CODE(27), /**< キャンセル */
69 NSOC_ERR_IP_BUSY = NSOC_ERROR_CODE(28), /**< ビジー */
70 NSOC_ERR_IP_CLOSING = NSOC_ERROR_CODE(29), /**< ソケットを閉じた */
71 NSOC_ERR_IP_EXIST = NSOC_ERROR_CODE(30), /**< 既に存在する */
72 NSOC_ERR_IP_RESET = NSOC_ERROR_CODE(31), /**< リセットを受けた */
73 NSOC_ERR_IP_NOT_EXIST = NSOC_ERROR_CODE(32), /**< 最早存在しない */
74 NSOC_ERR_IP_INV_SOCKET = NSOC_ERROR_CODE(33), /**< 無効なソケット */
75 NSOC_ERR_IP_AGAIN = NSOC_ERROR_CODE(34), /**< 実行中 */
76 NSOC_ERR_IP_SOCKET_UNSPECIFIED = NSOC_ERROR_CODE(35), /**< ソケットが指定されていない */
77 NSOC_ERR_IP_SOURCE_QUENCH = NSOC_ERROR_CODE(36), /**< 送信抑制 */
78 NSOC_ERR_IP_INV_OPTION = NSOC_ERROR_CODE(37), /**< 不正なオプション */
79 NSOC_ERR_IP_ADDR_COLLISION = NSOC_ERROR_CODE(38), /**< IPアドレス重複 */
80 NSOC_ERR_IP_SHUTDOWN = NSOC_ERROR_CODE(39), /**< シャットダウン状態 */
81 NSOC_ERR_IP_INV_HEADER = NSOC_ERROR_CODE(40), /**< 不正なIPヘッダ */
82 NSOC_ERR_IP_INV_ADDR = NSOC_ERROR_CODE(41), /**< 不正なIPアドレス */
83 NSOC_ERR_IP_INV_DATA = NSOC_ERROR_CODE(42), /**< 不正なIPデータ */
84
85 NSOC_ERR_DHCP_EXPIRED = NSOC_ERROR_CODE(51), /**< DHCPリース時間満了 */
86 NSOC_ERR_DHCP_TIMEOUT = NSOC_ERROR_CODE(52), /**< DHCPタイムアウト */
87 NSOC_ERR_DHCP_NAK = NSOC_ERROR_CODE(53), /**< DHCPのNAKを受信 */
88
89 NSOC_ERR_IP6_ADDR_COLLISION = NSOC_ERROR_CODE(60), /**< IPv6アドレス重複 */
90
91 NSOC_ERR_NONE = 0 /**< 正常終了 */
92 };
93
94 /*---------------------------------------------------------------------------*
95 * Types/Declarations
96 *---------------------------------------------------------------------------*/
97 /**
98 * NSOC_set_common_config()で使用するモジュール全体の設定構造体
99 */
100 typedef struct NSOCCommonConfig {
101 u16 vendor; /**< ベンダーコード。NSOC_VENDOR_NINTENDOを指定すること */
102 u16 version; /**< バージョンコード。NSOC_COMMON_CONF_VERSIONを指定すること */
103
104 s32 timeWaitBuffer; /**< TCPのTIME-WAITソケットを保持するためのバッファサイズ */
105
106 s32 reassembleMtu; /**< 再構築後の最大IPパケットサイズ */
107
108 // TCP
109 s32 rwin; /**< TCP受信ウインドウサイズ(default 2 x MSS) */
110 s32 r2; /**< TCP再送のトータル時間(default 100 sec) */
111
112 // UDP
113 s32 udpRecvBuff; /**< UDP受信バッファサイズ(default 4416 byte) */
114
115 // DHCP
116 const char* hostName; /**< DHCPで使用するホスト名へのポインタ */
117 s32 rdhcp; /**< DHCP再送回数(default 4) */
118
119 } NSOCCommonConfig;
120
121 /*
122 * NSOCInstanceConfigのflagにセットするフラグ
123 */
124 enum NSOCInstanceConfigFlag {
125 NSOC_FLAG_DHCP = 0x0001, /**< DHCPによるIPアドレス取得 */
126 NSOC_FLAG_PPP = 0x0002, /**< PPPによるIPアドレス取得 */
127 NSOC_FLAG_IP4 = 0x0004, /**< IPv4を有効にする */
128 NSOC_FLAG_IP6 = 0x0008, /**< IPv6を有効にする */
129 NSOC_FLAG_DHCP6 = 0x0010, /**< DHCPv6によるIPv6アドレス取得 */
130 NSOC_FLAG_NORA_DHCP6 = 0x0020, /**< NDP RAが受信されないとき、DHCPv6を起動する */
131 NSOC_FLAG_DHCP_REBOOT = 0x0100, /**< DHCPでのIPアドレス取得失敗時に再度実行する */
132 NSOC_FLAG_DHCP_RELEASE = 0x0200, /**< NSOC_CleanupIns()実行時に、DHCP Releaseを送信する */
133 NSOC_FLAG_DNS_AUTO = 0x1000, /**< DHCPやPPPで取得したDNSサーバを使用する */
134 NSOC_FLAG_ZEROCONF = 0x8000 /**< リンクローカルアドレスを取得する */
135 };
136
137 /**
138 * NSOC_SetInstanceConfig()で使用するインスタンスごとの設定
139 */
140 typedef struct NSOCInstanceConfig {
141 u16 vendor; /**< ベンダーコード。NSOC_VENDOR_NINTENDOを指定すること */
142 u16 version; /**< バージョンコード。NSOC_INS_CONF_VERSIONを指定すること */
143
144 u32 flag; /**< フラグ。NSOC_FLAG_XXXのORをとったもの */
145 NSOCInAddr addr; /**< 自IPアドレス */
146 NSOCInAddr netmask; /**< サブネットマスク */
147 NSOCInAddr router; /**< デフォルトゲートウエイIPアドレス */
148 s32 mtu; /**< MTUサイズ */
149
150 NSOCDNSServerInfo dnsserver; /**< DNSサーバアドレスリスト */
151
152 #ifdef NSOC_IP6_ENABLE
153 u8 curHopLimit; /* ホップリミット */
154 u32 retransTimer; /* NS再送間隔(msec) */
155 u32 dadNSTransmits; /* アドアレス重複検査用NS送信回数 */
156 u8 interfaceId[8]; /* インタフェースID */
157 #endif /* NSOC_IP6_ENABLE */
158 } NSOCInstanceConfig;
159
160 /**
161 * NSOCインスタンスで発生したエラーを通知するコールバック関数
162 */
163 typedef void (* NSOCConfigErrorCallback )(NSOCInstancePtr insP, s32 err);
164
165 #ifndef NSOC_NO_DEPEND_HEADER
166 /**
167 * NSOC_GetInstanceOpt(), NSOC_SetInstanceOpt()でNSOC_CONFIG_FILTER_INPUT/NSOC_CONFIG_FILTER_OUTPUT使用時の型
168 */
169 typedef BOOL (* NSOCFilter)(NSOCInstancePtr insP, NOSMessageBuf *mbuf);
170 #endif
171
172 /**
173 * NSOCインスタンスからNNETInstanceを取得する
174 */
NSOC_GetNNETInstance(NSOCInstancePtr insP)175 NN_INLINE NNETInstance *NSOC_GetNNETInstance(NSOCInstancePtr insP)
176 {
177 return (NNETInstance *)insP;
178 }
179
180 /**
181 * NNETInstanceからNSOCインスタンスを取得する
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