1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     socket_Types.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: 27867 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SOCKET_SOCKET_TYPES_H_
17 #define NN_SOCKET_SOCKET_TYPES_H_
18 
19 #include <nn/types.h>
20 #include <nn/config.h>
21 
22 #pragma push
23 #pragma diag_suppress 1301,2530
24 #include <nn/socket/socket_User.autogen.h>
25 #include <nn/socket/socket_Entry.autogen.h>
26 #pragma diag_default 1301,2530 // 本来ならば不要
27 #pragma pop
28 
29 namespace nn {
30 namespace socket {
31     typedef s32             Bool;
32     typedef s64             Tick;
33 
34     namespace detail {
35         /**
36          * @brief NSOCInAddrとNSOCIn6Addrを格納できるだけの大きさの構造体定義
37          * (NSOCIn6AddrはNSOCInAddrよりもサイズが大きいため、NSOCIn6Addrの別名で定義)
38          */
39         typedef In6Addr     InAddrStorage;
40 
41         /**
42          * @brief SocketライブラリとSocketプロセスが、HostEntの情報を授受するための構造体定義
43          */
44         struct HostEntExCarrier
45         {
46             s16      addrType;             /**< 名前解決結果のアドレスのアドレスタイプ。PF_INET|PF_INET6 */
47             s16      length;               /**< 名前解決結果のアドレスのアドレス長(単位はバイト) */
48             s16      addrNum;              /**< 名前解決結果のIPアドレスの個数 */
49             s16      aliasNum;             /**< 名前解決したホストのエイリアス名の個数 */
50             char8    name[NN_SOCKET_MAXDNAME];  /**< 名前解決したホストのオフィシャル名 */
51             char8    aliases[NN_SOCKET_DNS_RESOLV_ALIASNAME_MAX][NN_SOCKET_MAXDNAME]; /**< 名前解決したホストのエイリアス名リスト */
52             InAddrStorage   addrList[NN_SOCKET_DNS_RESOLV_ADDRESS_MAX];      /**< 名前解決したホストのIPアドレスリスト */
53         };
54 
55 
56         /**
57          * @brief SocketライブラリとSocketプロセスが、AddrInfoの情報を授受するための構造体定義
58          */
59         struct AddrInfoCarrier
60         {
61             s32             flags;                /**< フラグ */
62             s32             family;               /**< ソケットのアドレスファミリ(NSOC_AF_INET*) */
63             s32             sockType;             /**< ソケットタイプ(NSOC_SOCK_***) */
64             s32             protocol;             /**< ソケットのプロトコル(NSOC_IP_PROTO_***) */
65             s32             addrLen;              /**< ソケット構造体のサイズ(addrに格納されるNSOCSockAddrInまたはNSOCSockAddrIn6のサイズ*/
66             char8           canonName[NN_SOCKET_MAXDNAME];  /**<ホストの 正規名 */
67             SockAddr        addr;                 /**< ソケット構造体(NSOCSockAddrInかNSOCSockAddrIn6)*/
68         };
69 
70     } // end of namespace detail
71 
72     /*!
73         @brief
74     */
75     struct Config
76     {
77         // HOST
78         InAddr      address;
79         InAddr      netmask;
80         InAddr      defaultRouter;
81         InAddr      nameServer[2];
82         // DHCP
83         bool        useDhcp;
84         bool        useDhcpForDns;
85         s8          dhcpRetryCount;
86         bool        sendDhcpRelease;
87 
88         // PHY
89         s16         mtu;
90         NN_PADDING2;
91 
92         // TCP
93         s32         rwin;               /**< TCP受信ウインドウサイズ(default 2 x MSS) */
94         s32         r2;                 /**< TCP再送のトータル時間(default 100 sec) */
95         // UDP
96         s32         udpRecvBuff;        /**< UDP受信バッファサイズ(default 4416 byte) */
97     };
98 
99 } // end of namespace socket
100 } // end of namespace nn
101 
102 #endif  // ifndef NN_SOCKET_SOCKET_TYPES_H_
103