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_DNS_AUTO = 0x1000, /**< DHCPやPPPで取得したDNSサーバを使用する */
133 NSOC_FLAG_ZEROCONF = 0x8000 /**< リンクローカルアドレスを取得する */
134 };
135
136 /**
137 * NSOC_SetInstanceConfig()で使用するインスタンスごとの設定
138 */
139 typedef struct NSOCInstanceConfig {
140 u16 vendor; /**< ベンダーコード。NSOC_VENDOR_NINTENDOを指定すること */
141 u16 version; /**< バージョンコード。NSOC_INS_CONF_VERSIONを指定すること */
142
143 u32 flag; /**< フラグ。NSOC_FLAG_XXXのORをとったもの */
144 NSOCInAddr addr; /**< 自IPアドレス */
145 NSOCInAddr netmask; /**< サブネットマスク */
146 NSOCInAddr router; /**< デフォルトゲートウエイIPアドレス */
147 s32 mtu; /**< MTUサイズ */
148
149 NSOCDNSServerInfo dnsserver; /**< DNSサーバアドレスリスト */
150
151 #ifdef NSOC_IP6_ENABLE
152 u8 curHopLimit; /* ホップリミット */
153 u32 retransTimer; /* NS再送間隔(msec) */
154 u32 dadNSTransmits; /* アドアレス重複検査用NS送信回数 */
155 u8 interfaceId[8]; /* インタフェースID */
156 #endif /* NSOC_IP6_ENABLE */
157 } NSOCInstanceConfig;
158
159 #ifndef NSOC_NO_DEPEND_HEADER
160 /**
161 * NSOC_GetInstanceOpt(), NSOC_SetInstanceOpt()でNSOC_CONFIG_FILTER_INPUT/NSOC_CONFIG_FILTER_OUTPUT使用時の型
162 */
163 typedef BOOL (* NSOCFilter)(NSOCInstancePtr insP, NOSMessageBuf *mbuf);
164 #endif
165 typedef void (* NSOCConfigErrorCallback )(NSOCInstancePtr insP, s32 err);
166
167 /**
168 * NSOCインスタンスからNNETInstanceを取得する
169 */
NSOC_GetNNETInstance(NSOCInstancePtr insP)170 NN_INLINE NNETInstance *NSOC_GetNNETInstance(NSOCInstancePtr insP)
171 {
172 return (NNETInstance *)insP;
173 }
174
175 /**
176 * NNETInstanceからNSOCインスタンスを取得する
177 */
NSOC_GetNSOCInstance(NNETInstance * ins)178 NN_INLINE NSOCInstancePtr NSOC_GetNSOCInstance(NNETInstance *ins)
179 {
180 return (NSOCInstancePtr)ins;
181 }
182
183 /*---------------------------------------------------------------------------*
184 * Function Prototypes
185 *---------------------------------------------------------------------------*/
186 /* nsoc_main.c */
187 extern s32 NSOC_Init(const NNETAllocator *allocator);
188 extern s32 NSOC_Finish(void);
189 extern s32 NSOC_SetCommonConfig(const NSOCCommonConfig *common_conf);
190 extern s32 NSOC_SetInstanceConfig(NSOCInstancePtr ins, const NSOCInstanceConfig *ins_conf);
191 extern s32 NSOC_StartupIns(NNETInstance *ins, s32 timeout);
192 extern s32 NSOC_CleanupIns(NNETInstance *ins, s32 timeout);
193 extern s32 NSOC_AbortIns(NNETInstance *ins);
194 extern s32 NSOC_CreateIns(NSOCInstancePtr *insP);
195 extern s32 NSOC_DestroyIns(NSOCInstancePtr insP);
196 extern s32 NSOC_AttachIF(NSOCInstancePtr insP, NNETEthernetAPI *low_api);
197 extern s32 NSOC_DetachIF(NSOCInstancePtr insP);
198 extern s32 NSOC_SetConfigErrorCallback(NSOCInstancePtr nsoc_insP, NSOCConfigErrorCallback callback);
199 extern s32 NSOC_SetUserInsParam(NSOCInstancePtr insP, void* param);
200 extern s32 NSOC_GetUserInsParam(NSOCInstancePtr insP, void** param);
201
202 /* nsoc_socket.c */
203 extern int NSOC_GetUserInfo(int s, void** userInfo);
204 extern void NSOC_FreeUserInfo(void* userInfo);
205 extern void* NSOC_DuplicateUserInfo(void* userInfo, int socket);
206
207
208
209 #ifdef __cplusplus
210 }
211 #endif
212
213 /* NSOC_ADMIN_H */
214 #endif
215
216
217