1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     socket_Admin.autogen.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: 27829 $
14  *---------------------------------------------------------------------------*/
15 
16 /**
17  * モジュール 接続管理プロセス用定義
18  */
19 
20 #ifndef NN_SOCKET_SOCKET_ADMIN_AUTOGEN_H_
21 #define NN_SOCKET_SOCKET_ADMIN_AUTOGEN_H_
22 
23 #ifndef NN_SOCKET_NO_DEPEND_HEADER
24 #include <nn/types.h>			/* for NOSxxxx */
25 #include <nn/net/compatible/nnet/nnet.h>			/* for NNETxxxx */
26 #include <nn/socket/socket_User.autogen.h>		/* for InAddr, DnsServerInfo */
27 #endif
28 
29 namespace nn {
30 namespace socket {
31 
32 /*---------------------------------------------------------------------------*
33  * Definitions
34  *---------------------------------------------------------------------------*/
35 
36 #define NN_SOCKET_VENDOR_NINTENDO        0x0000  //!< 本実装が対応している設定のベンダーコード
37 #define NN_SOCKET_COMMON_CONF_VERSION    0x3100  //!< 本実装が対応している全体設定のバージョン
38 #define NN_SOCKET_INS_CONF_VERSION       0x4100  //!< 本実装が対応しているインスタンス設定のバージョン
39 
40 /**
41  * モジュールのエラーコード
42  */
43 #define ERROR_BASE                          0xffff8000
44 #define ERROR_CODE(code)                    ((s32)(ERROR_BASE|(code)))
45 
46 enum ErrorCode {
47     ERR_PARAM          = ERROR_CODE(1),       //!< パラメータエラー
48     ERR_INIT           = ERROR_CODE(2),       //!< 初期状態のため実行不可
49     ERR_FINISH         = ERROR_CODE(3),       //!< 終了状態のため実行不可
50     ERR_CONFVER        = ERROR_CODE(4),       //!< 設定のバージョンエラー
51     ERR_STATE          = ERROR_CODE(5),       //!< ステートエラー
52     ERR_EXIST          = ERROR_CODE(6),       //!< 既に作成済み
53     ERR_NOMEM          = ERROR_CODE(7),       //!< メモリ不足
54     ERR_NOS            = ERROR_CODE(8),       //!< OSサービス関数がエラーを返した
55     ERR_LOWER          = ERROR_CODE(9),       //!< 下位レイヤからのエラー
56     ERR_TIMEOUT        = ERROR_CODE(10),      //!< タイムアウト
57     ERR_INS_RESOURCES  = ERROR_CODE(11),      //!< OSリソース確保失敗
58     ERR_MAXSOCKET      = ERROR_CODE(12),      //!< ソケット数が最大に達した
59     ERR_ABORT          = ERROR_CODE(13),      //!< アボートされた
60 
61     ERR_IP_UNREACHABLE = ERROR_CODE(21),      //!< 到達できなかった
62     ERR_IP_DATASIZE    = ERROR_CODE(22),      //!< データサイズ不正
63     ERR_IP_NETDOWN     = ERROR_CODE(23),      //!< ネットワークダウン
64     ERR_IP_INVALID     = ERROR_CODE(24),      //!< 不正パラメータ
65     ERR_IP_REFUSED     = ERROR_CODE(25),      //!< 処理の拒否
66     ERR_IP_TIMEOUT     = ERROR_CODE(26),      //!< タイムアウト
67     ERR_IP_CANCELED    = ERROR_CODE(27),      //!< キャンセル
68     ERR_IP_BUSY        = ERROR_CODE(28),      //!< ビジー
69     ERR_IP_CLOSING     = ERROR_CODE(29),      //!< ソケットを閉じた
70     ERR_IP_EXIST       = ERROR_CODE(30),      //!< 既に存在する
71     ERR_IP_RESET       = ERROR_CODE(31),      //!< リセットを受けた
72     ERR_IP_NOT_EXIST   = ERROR_CODE(32),      //!< 最早存在しない
73     ERR_IP_INV_SOCKET  = ERROR_CODE(33),      //!< 無効なソケット
74     ERR_IP_AGAIN       = ERROR_CODE(34),      //!< 実行中
75     ERR_IP_SOCKET_UNSPECIFIED = ERROR_CODE(35),   //!< ソケットが指定されていない
76     ERR_IP_SOURCE_QUENCH = ERROR_CODE(36),    //!< 送信抑制
77     ERR_IP_INV_OPTION  = ERROR_CODE(37),      //!< 不正なオプション
78     ERR_IP_ADDR_COLLISION = ERROR_CODE(38),   //!< IPアドレス重複
79     ERR_IP_SHUTDOWN    = ERROR_CODE(39),      //!< シャットダウン状態
80     ERR_IP_INV_HEADER  = ERROR_CODE(40),      //!< 不正なIPヘッダ
81     ERR_IP_INV_ADDR    = ERROR_CODE(41),      //!< 不正なIPアドレス
82     ERR_IP_INV_DATA    = ERROR_CODE(42),      //!< 不正なIPデータ
83 
84     ERR_DHCP_EXPIRED   = ERROR_CODE(51),      //!< DHCPリース時間満了
85     ERR_DHCP_TIMEOUT   = ERROR_CODE(52),      //!< DHCPタイムアウト
86     ERR_DHCP_NAK       = ERROR_CODE(53),      //!< DHCPのNAKを受信
87 
88     ERR_IP6_ADDR_COLLISION = ERROR_CODE(60),  //!< IPv6アドレス重複
89 
90     ERR_NONE           = 0                         //!< 正常終了
91 };
92 
93 /*---------------------------------------------------------------------------*
94  * Types/Declarations
95  *---------------------------------------------------------------------------*/
96 /**
97  * set_common_config()で使用するモジュール全体の設定構造体
98  */
99 struct CommonConfig {
100     u16         vendor;             //!< ベンダーコード。VENDOR_NINTENDOを指定すること
101     u16         version;            //!< バージョンコード。COMMON_CONF_VERSIONを指定すること
102 
103     s32         timeWaitBuffer;     //!< TCPのTIME-WAITソケットを保持するためのバッファサイズ
104 
105     s32         reassembleMtu;      //!< 再構築後の最大IPパケットサイズ
106 
107     // TCP
108     s32         rwin;               //!< TCP受信ウインドウサイズ(default 2 x MSS)
109     s32         r2;                 //!< TCP再送のトータル時間(default 100 sec)
110 
111     // UDP
112     s32         udpRecvBuff;        //!< UDP受信バッファサイズ(default 4416 byte)
113 
114     // DHCP
115     const char* hostName;           //!< DHCPで使用するホスト名へのポインタ
116     s32         rdhcp;              //!< DHCP再送回数(default 4)
117 
118 };
119 
120 /*
121  * InstanceConfigのflagにセットするフラグ
122  */
123 enum InstanceConfigFlag {
124 	FLAG_DHCP         =  0x0001, //!< DHCPによるIPアドレス取得
125 	FLAG_PPP          =  0x0002, //!< PPPによるIPアドレス取得
126 	FLAG_IP4          =  0x0004, //!< IPv4を有効にする
127 	FLAG_IP6          =  0x0008, //!< IPv6を有効にする
128 	FLAG_DHCP6        =  0x0010, //!< DHCPv6によるIPv6アドレス取得
129 	FLAG_NORA_DHCP6   =  0x0020, //!< NDP RAが受信されないとき、DHCPv6を起動する
130 	FLAG_DHCP_REBOOT  =  0x0100, //!< DHCPでのIPアドレス取得失敗時に再度実行する
131 	FLAG_DHCP_RELEASE =  0x0200, //!< CleanupIns()実行時に、DHCP Releaseを送信する
132 	FLAG_DNS_AUTO     =  0x1000, //!< DHCPやPPPで取得したDNSサーバを使用する
133 	FLAG_ZEROCONF     =  0x8000  //!< リンクローカルアドレスを取得する
134 };
135 
136 /**
137  * SetInstanceConfig()で使用するインスタンスごとの設定
138  */
139 struct InstanceConfig {
140     u16         vendor;             //!< ベンダーコード。VENDOR_NINTENDOを指定すること
141     u16         version;            //!< バージョンコード。INS_CONF_VERSIONを指定すること
142 
143     u32         flag;               //!< フラグ。FLAG_XXXのORをとったもの
144     InAddr  addr;               //!< 自IPアドレス
145     InAddr  netmask;            //!< サブネットマスク
146     InAddr  router;             //!< デフォルトゲートウエイIPアドレス
147     s32         mtu;                //!< MTUサイズ
148 
149     DnsServerInfo dnsserver;    //!< DNSサーバアドレスリスト
150 
151 #ifdef NN_SOCKET_IP6_ENABLE
152     u8          curHopLimit;     /* ホップリミット */
153     u32         retransTimer;    /* NS再送間隔(msec) */
154     u32         dadNSTransmits;  /* アドアレス重複検査用NS送信回数 */
155     u8          interfaceId[8];  /* インタフェースID */
156 #endif /* NN_SOCKET_IP6_ENABLE */
157 };
158 
159 /**
160  * インスタンスで発生したエラーを通知するコールバック関数
161  */
162 typedef void (* ConfigErrorCallback )(InstancePtr insP, s32 err);
163 
164 #ifndef NN_SOCKET_NO_DEPEND_HEADER
165 /**
166  * GetInstanceOpt(), SetInstanceOpt()でCONFIG_FILTER_INPUT/CONFIG_FILTER_OUTPUT使用時の型
167  */
168 typedef Bool (* Filter)(InstancePtr insP, NOSMessageBuf *mbuf);
169 
170 /**
171  * インスタンスからNNETInstanceを取得する
172  */
GetNNETInstance(InstancePtr insP)173 NN_INLINE NNETInstance *GetNNETInstance(InstancePtr insP)
174 {
175     return (NNETInstance *)insP;
176 }
177 
178 /**
179  * NNETInstanceからインスタンスを取得する
180  */
GetInstance(NNETInstance * ins)181 NN_INLINE InstancePtr GetInstance(NNETInstance *ins)
182 {
183     return (InstancePtr)ins;
184 }
185 #endif
186 
187 /*---------------------------------------------------------------------------*
188  * Function Prototypes
189  *---------------------------------------------------------------------------*/
190 /* nsoc_main.c */
191 
192 /* nsoc_socket.c */
193 
194 
195 
196 
197 } // socket
198 } // nn
199 /* NN_SOCKET_SOCKET_ADMIN_AUTOGEN_H_ */
200 #endif
201 
202 
203