/*---------------------------------------------------------------------------* Project: Horizon File: socket_User.autogen.h Copyright (C)2010 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 26793 $ *---------------------------------------------------------------------------*/ /** * モジュール 一般アプリケーション開発者用定義 */ #ifndef NN_SOCKET_SOCKET_USER_AUTOGEN_H_ #define NN_SOCKET_SOCKET_USER_AUTOGEN_H_ #include /* for NOSxxxx */ namespace nn { namespace socket { //#undef NN_SOCKET_IP6_ENABLE //!< IPv6を使用 /** * @brief プロトコルファミリ表す列挙型です。 */ enum ProtocolFamily { PF_UNSPEC = 0, //!< Unspecified PF_INET = 2, //!< ARPA Internet protocols PF_INET6 = 23 //!< ARPA Internet protocols version 6 }; /** * @brief アドレスファミリを表す列挙型です。 */ enum AddressFamily { AF_UNSPEC = PF_UNSPEC, //!< Unspecified AF_INET = PF_INET, //!< ARPA Internet protocols AF_INET6 = PF_INET6 //!< ARPA Internet protocols version 6 }; /** * @brief ソケット種別表す列挙型です。 */ enum SocketType { SOCK_STREAM = 1, //!< ストリームソケット SOCK_DGRAM = 2 //!< データグラムソケット }; /** * @brief @ref RecvFrom や @ref SendTo などに与えるフラグです。 */ enum MessageFlag { MSG_OOB = 0x01, //!< 対域外データの送受信を行います。 MSG_PEEK = 0x02, //!< データ読み出すだけで、取り出さずそのまま残します。 MSG_DONTWAIT = 0x04 //!< 非同期操作を行います。 }; /** * @brief @ref Poll に与えるフラグです。 */ enum PollType { POLLRDNORM = 0x0001, //!< 通常のデータを読み出し可能な状態。 SOCListen 関数により受付を開始したソケットが接続要求を受けた状態を含みます。 POLLRDBAND = 0x0002, //!< 優先帯域のデータを読み出し可能な状態。 TCP の緊急モードのデータを読み出し可能な状態です。 POLLPRI = 0x0004, //!< 緊急のデータを読み出し可能な状態。この状態になり得るプロトコルをサポートしていません。 POLLWRNORM = 0x0008, //!< 通常のデータを書き込み可能な状態です。 POLLWRBAND = 0x0010, //!< 優先帯域のデータを書き込み可能な状態。 TCP の緊急モードのデータを書き込み可能な状態です。 POLLERR = 0x0020, //!< 何らかの異常を検知した状態。 (revents のみ) POLLHUP = 0x0040, //!< ハングアップした状態。 (revents のみ) POLLNVAL = 0x0080, //!< 不正な処理が行われた状態。(revents のみ) POLLIN = (POLLRDNORM | POLLRDBAND), //!< データを読み出し可能な状態。 POLLRDNORM と POLLRDBAND の論理和と同じです。 POLLOUT = POLLWRNORM //!< データを書き込み可能な状態。POLLWRNORM と同じです。 }; /** * @brief @ref GetSockOpt(), @ref SetSockOpt() などに与えるオプションレベルです。 */ enum SocketLevel { SOL_SOCKET = 0xffff, //!< ソケット SOL_CONFIG = 0xfffe, //!< インスタンス SOL_IP = 0, //!< IP SOL_ICMP = 1, //!< ICMP SOL_TCP = 6, //!< TCP SOL_UDP = 17, //!< UDP SOL_IP6 = 41 //!< IPv6 }; /** * @brief @ref GetSockOpt(), @ref SetSockOpt() に与えるオプション番号です。 */ enum SocketOptionType { IP_TOS = 0x00000007, //!< IPヘッダのTOSフィールド値(int) IP_TTL = 0x00000008, //!< IPヘッダのTTLフィールド値(int) IP_MULTICAST_LOOP = 0x00000009, //!< マルチキャストパケットをループさせる(unsigned char) IP_MULTICAST_TTL = 0x0000000a, //!< マルチキャストパケットのTTLフィールド値(unsigned char) IP_ADD_MEMBERSHIP = 0x0000000b, //!< マルチキャストグループ追加(IpMreq) IP_DROP_MEMBERSHIP = 0x0000000c, //!< マルチキャストグループ削除(IpMreq) SO_REUSEADDR = 0x00000004, //!< ソケットの再利用を許可する(Bool) SO_LINGER = 0x00000080, //!< TCP切断完了を待つ(Linger) SO_OOBINLINE = 0x00000100, //!< 緊急データをオンラインデータとして扱う(Bool) SO_SNDBUF = 0x00001001, //!< TCP送信バッファサイズ(int) SO_RCVBUF = 0x00001002, //!< TCP受信バッファサイズ(int) SO_SNDLOWAT = 0x00001003, //!< TCP送信バッファの利用可能下限値(int) SO_RCVLOWAT = 0x00001004, //!< TCP受信バッファの利用可能下限値(int) SO_TYPE = 0x00001008, //!< ソケット種別(int) SO_ERROR = 0x00001009, //!< ソケットにセットされているエラー(int) TCP_NODELAY = 0x00002001, //!< 遅延ACKを使用しない(Bool) TCP_MAXSEG = 0x00002002, //!< TCPのMSS値(int) TCP_STDURG = 0x00002003, //!< TCPのurgentポインタをRFC仕様にする(Bool) TCP_R2 = 0x00002004, //!< TCPのR2タイマ値(int) TCP_R2_SYN = 0x00002005 //!< TCPのSYN用R2タイマ値(int) #ifdef NN_SOCKET_IP6_ENABLE , IP6_MULTICAST_LOOP = 0x00010009, //!< IPv6マルチキャストパケットをループさせる(unsigned char) IP6_HOPLIMIT = 0x0001000a, //!< IPv6ヘッダのホップリミット値(unsigned char) IP6_ADD_MEMBERSHIP = 0x0001000b, //!< IPv6マルチキャストグループ追加(Ip6Mreq) IP6_DROP_MEMBERSHIP= 0x0001000c //!< IPv6マルチキャストグループ削除(Ip6Mreq) #endif }; /** * @brief @ref Shutdown に与えるフラグです。 */ enum ShutdownType { SHUT_RD = 0, //!< 受信 SHUT_WR = 1, //!< 送信 SHUT_RDWR = 2 //!< 送受信 }; /** * @brief @ref Fcntl に与えるフラグです。 */ enum FctrlFlag { F_GETFL = 3, //!< ソケットのフラグ値取得 F_SETFL = 4 //!< ソケットのフラグ値セット }; /** * @brief @ref Fcntl に与えるモード値です。 */ enum FctrlOperation { O_NONBLOCK = 0x04 //!< APIをノンブロッキングモードに変更 }; /** * @brief @ref GetAddrInfo に与えるフラグです。 */ enum AddrInfoType { AI_PASSIVE = 0x01, //!< nodeNameがNULLのとき、0.0.0.0が設定される AI_CANONNAME = 0x02, //!< nodeNameに対応する正規名の取得 AI_NUMERICHOST = 0x04, //!< 数値表現のホストアドレス文字列をnodeNameに指定 AI_NUMERICSERV = 0x08 //!< 数値表現のポート番号文字列をservNameに指定 }; /** * @brief @ref GetNameInfo に与えるフラグです。 */ enum NameInfoType { NI_NOFQDN = 0x01, //!< 完全修飾ドメイン名(FQDN)のうちノード名の部分だけを取得 NI_NUMERICHOST = 0x02, //!< アドレスを数値記法で格納 NI_NAMEREQD = 0x04, //!< ホスト名の問い合わせに失敗した場合にエラー NI_NUMERICSERV = 0x08, //!< ポート番号を数値記法で格納 NI_DGRAM = 0x10 //!< UDPでの問い合わせ }; /** @brief @ref GetAddrInfo, @ref GetNameInfo が返すエラー値です。 */ enum AddrInfoError { EAI_BADFLAGS = -301, //!< フラグが不正 EAI_FAIL = -302, //!< 修復不可能なエラー EAI_FAMILY = -303, //!< 不明なアドレスファミリ EAI_MEMORY = -304, //!< メモリ割り当てに失敗 EAI_NONAME = -305, //!< 名前を解決できません EAI_SOCKTYPE = -307, //!< ソケットタイプエラー EAI_SYSTEM = -308 //!< システムエラー }; /** * @ref GetRRSetByName が返すエラー値です。 */ enum RRsetError { ERRSET_NONAME = -350, ERRSET_NODATA = -351, ERRSET_NOMEMORY= -352, //!< メモリ不足 ERRSET_INVAL = -353, //!< 引数が不正 ERRSET_FAIL = -354 }; /** * @brief ソケット API 共通で使用するエラー値です。説明のないエラーは内部で使用され、ソケット API が返すことはありません。 */ enum SocketError { E2BIG = -1, EACCES = -2, //!< 使用する権限がありません EADDRINUSE = -3, //!< アドレスがすでに使用中です EADDRNOTAVAIL = -4, //!< アドレスが使用できません EAFNOSUPPORT = -5, //!< サポートされていないアドレスファミリです EAGAIN = -6, //!< 要求した操作は封鎖しないと実行できません。(EWOULDBLOCKと同様) EALREADY = -7, EBADF = -8, //!< 不正なソケット記述子です EBADMSG = -9, EBUSY = -10, ECANCELED = -11, ECHILD = -12, ECONNABORTED = -13, //!< 接続が中断されました ECONNREFUSED = -14, //!< 接続が拒否されました ECONNRESET = -15, //!< 接続がリセットされました EDEADLK = -16, EDESTADDRREQ = -17, //!< 終点アドレスが指定されていません EDOM = -18, EDQUOT = -19, EEXIST = -20, EFAULT = -21, EFBIG = -22, EHOSTUNREACH = -23, EIDRM = -24, EILSEQ = -25, EINPROGRESS = -26, //!< 接続がまだ完了していません EINTR = -27, //!< 中止されました EINVAL = -28, //!< 無効な処理 EIO = -29, //!< 入出力エラー EISCONN = -30, //!< ソケットがすでに接続されています EISDIR = -31, ELOOP = -32, EMFILE = -33, //!< ソケット記述子をこれ以上作れません EMLINK = -34, EMSGSIZE = -35, //!< 送信するにはサイズが大きすぎます EMULTIHOP = -36, ENAMETOOLONG = -37, ENETDOWN = -38, //!< 該当インスタンスがダウンしています ENETRESET = -39, //!< ソケットライブラリが初期化されていません ENETUNREACH = -40, //!< 到達できません ENFILE = -41, ENOBUFS = -42, //!< リソース不足 ENODATA = -43, ENODEV = -44, ENOENT = -45, ENOEXEC = -46, ENOLCK = -47, ENOLINK = -48, ENOMEM = -49, //!< メモリ不足 ENOMSG = -50, ENOPROTOOPT = -51, //!< サポートされていないオプション ENOSPC = -52, ENOSR = -53, ENOSTR = -54, ENOSYS = -55, ENOTCONN = -56, //!< 接続されていません ENOTDIR = -57, ENOTEMPTY = -58, ENOTSOCK = -59, ENOTSUP = -60, ENOTTY = -61, ENXIO = -62, EOPNOTSUPP = -63, //!< サポートされていない処理 EOVERFLOW = -64, EPERM = -65, EPIPE = -66, EPROTO = -67, EPROTONOSUPPORT= -68, //!< サポートされていないプロトコル EPROTOTYPE = -69, //!< サポートされていないソケットタイプ ERANGE = -70, EROFS = -71, ESPIPE = -72, ESRCH = -73, ESTALE = -74, ETIME = -75, ETIMEDOUT = -76, //!< 時間切れ ETXTBSY = -77, EWOULDBLOCK = EAGAIN, //!< 要求した操作は封鎖しないと実行できません。(EAGAINと同様) /* Posix.1g */ EXDEV = -78 }; /** * @ref GetInstanceOpt(), @ref SetInstanceOpt() に与えるオプション番号です。 */ enum InstanceOptionType { CONFIG_FILTER_INPUT = 0x1001, //!< 受信パケットフィルタ関数 CONFIG_FILTER_OUTPUT = 0x1002, //!< 送信パケットフィルタ関数 CONFIG_ERROR = 0x1003, //!< インスタンスのエラー CONFIG_MAC_ADDRESS = 0x1004, //!< 自MACアドレス CONFIG_LINK_STATE = 0x1005, //!< インスタンスの起動状態 CONFIG_INTERFACE_STATISTICS = 0x1006, //!< インスタンスの統計情報 CONFIG_MUTE = 0x1007, //!< パケット送受信停止 CONFIG_ARP_NUMBER = 0x3001, //!< ARPキャッシュエントリ数 CONFIG_ARP_TABLE = 0x3002, //!< ARPテーブル CONFIG_ARP_REFRESH = 0x3003, //!< ARPテーブルのクリア CONFIG_ARP_ADD = 0x3004, //!< ARPキャッシュエントリ登録 CONFIG_ARP_REMOVE = 0x3005, //!< ARPキャッシュエントリ削除 CONFIG_IP_STATISTICS = 0x4001, //!< IPの統計情報 CONFIG_IP_ADDR_NUMBER = 0x4002, //!< IPアドレス数 CONFIG_IP_ADDR_TABLE = 0x4003, //!< IPアドレステーブル CONFIG_IP_MTU = 0x4004, //!< IPのMTU CONFIG_IP_ROUTING_NUMBER = 0x4005, //!< 経路情報エントリ数 CONFIG_IP_ROUTING_TABLE = 0x4006, //!< 経路情報テーブル CONFIG_IP_ADD_ROUTE = 0x4007, //!< 経路情報エントリ登録 CONFIG_IP_REMOVE_ROUTE = 0x4008, //!< 経路情報エントリ削除 CONFIG_IP_ADDR = 0x400a, //!< IPアドレス CONFIG_IP_GATEWAY = 0x400b, //!< デフォルトゲートウエイアドレス CONFIG_IP_NETMASK = 0x400c, //!< サブネットマスク CONFIG_IP_REFRESH_ROUTE = 0x400d, //!< 経路情報を最新状態に更新 CONFIG_ICMP_STATISTICS = 0x5001, //!< ICMPの統計情報 #ifdef NN_SOCKET_IP6_ENABLE CONFIG_IP6_STATISTICS = 0x6001, //!< IPv6の統計情報 CONFIG_IP6_MTU = 0x6002, //!< IPv6リンクMTU CONFIG_IP6_PREFIX_NUMBER = 0x6003, //!< IPv6プレフィックスリストエントリ数 CONFIG_IP6_PREFIX_TABLE = 0x6004, //!< IPv6プレフィックスリスト CONFIG_IP6_ADD_ROUTE = 0x6005, //!< IPv6経路情報エントリ登録 CONFIG_IP6_REMOVE_ROUTE = 0x6006, //!< IPv6経路情報エントリ削除 CONFIG_IP6_ADD_ADDRESS = 0x6007, //!< IPv6アドレス追加 CONFIG_IP6_REMOVE_ADDRESS = 0x6008, //!< IPv6アドレス削除 CONFIG_IP6_HOPLIMIT = 0x6009, //!< IPv6アドレスホップリミット CONFIG_IP6_RETRANSMIT_TIMER = 0x600a, //!< IPv6アドレス重複検査用NS送信間隔 CONFIG_IP6_DUP_ADDR_DETECT_TRANSMITS = 0x600b, //!< IPv6アドレス重複検査用NS送信回数 CONFIG_IP6_INTERFACE_ID = 0x600c, //!< IPv6アドレスインタフェースID CONFIG_IP6_DESTINATION_CACHE_NUMBER = 0x600d, //!< IPv6宛先キャッシュリストエントリ数 CONFIG_IP6_DESTINATION_CACHE_TABLE = 0x600e, //!< IPv6宛先キャッシュリスト CONFIG_IP6_ADDR_NUMBER = 0x600f, //!< IPv6アドレスリストエントリ数 CONFIG_IP6_ADDR_TABLE = 0x6010, //!< IPv6アドレスリスト CONFIG_IP6_ROUTE_NUMBER = 0x6011, //!< IPv6経路情報エントリ数 CONFIG_IP6_ROUTE_TABLE = 0x6012, //!< IPv6経路情報テーブル CONFIG_IP6_NEIGHBOR_CACHE_NUMBER = 0x6013, //!< IPv6近隣キャッシュリストエントリ数 CONFIG_IP6_NEIGHBOR_CACHE_TABLE = 0x6014, //!< IPv6近隣キャッシュリスト CONFIG_IP6_DEFAULT_ROUTER_NUMBER = 0x6015, //!< IPv6デフォルトルータリストエントリ数 CONFIG_IP6_DEFAULT_ROUTER_TABLE = 0x6016, //!< IPv6デフォルトルータリスト CONFIG_IP6_ADD_PREFIX = 0x6017, //!< IPv6プレフィックスエントリ登録 CONFIG_IP6_REMOVE_PREFIX = 0x6018, //!< IPv6プレフィックスエントリ削除 CONFIG_ICMP6_STATISTICS = 0x7001, //!< ICMPv6の統計情報 #endif /* NN_SOCKET_IP6_ENABLE */ CONFIG_UDP_STATISTICS = 0x8001, //!< UDPの統計情報 CONFIG_UDP_NUMBER = 0x8002, //!< UDPソケット数 CONFIG_UDP_TABLE = 0x8003, //!< UDPソケットテーブル CONFIG_TCP_STATISTICS = 0x9001, //!< TCPの統計情報 CONFIG_TCP_NUMBER = 0x9002, //!< TCPソケット数 CONFIG_TCP_TABLE = 0x9003, //!< TCPソケットテーブル CONFIG_TCP_MSL = 0x9006, //!< TCPのMSS CONFIG_TCP_RTO_MIN = 0x9007, //!< TCPの最小再送時間 CONFIG_TCP_RTO_MAX = 0x9008, //!< TCPの最大再送時間 CONFIG_TCP_RTO_DEFAULT = 0x9009, //!< TCPのデフォルト再送時間 CONFIG_IGMP_MODE = 0xA001, //!< IGMPのバージョン CONFIG_DNS_DOMAIN_NAME = 0xB001, //!< ドメイン名 CONFIG_DNS_SERVER_NUMBER = 0xB002, //!< DNSサーバ数 CONFIG_DNS_SERVER_TABLE = 0xB003, //!< DNSサーバテーブル CONFIG_DHCP_REMAINING_LEASE_TIME = 0xC001 //!< DHCPの残りリース時間 }; /** * ソケットモジュールのステートを表す列挙型です。 */ enum InstanceState { STATE_INIT = 0, //!< 初期状態 STATE_WAIT_LINKUP, //!< 起動実行中 STATE_ACTIVE, //!< 起動完了状態 STATE_MORIBUND //!< 終了実行中 }; /*---------------------------------------------------------------------------* * Types/Declarations *---------------------------------------------------------------------------*/ /** * 外部参照用 @ref Instance のポインタ型です。 */ typedef void * InstancePtr; /* * アドレス長 */ #define NN_SOCKET_ETH_ALEN 6 //!< MACアドレス長 #define NN_SOCKET_IP_ALEN 4 //!< IPv4アドレス長 #define NN_SOCKET_IP6_ALEN 16 //!< IPv6アドレス長 /** * IPv4アドレスの文字列長 * aaa.bbb.ccc.ddd * * IPv6アドレスの文字列長 * RFC3493: 6.3. Address Conversion Functions * ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255 */ #define NN_SOCKET_INET_ADDRSTRLEN 16 #define NN_SOCKET_INET6_ADDRSTRLEN 46 /** * @brief IPv4アドレス構造体です。 */ #define NN_SOCKET_INADDR_ANY ((u32) 0x00000000) //!< 0.0.0.0 struct InAddr { u32 addr; //!< ネットワークバイトオーダでのIPv4アドレス }; /** * @brief IPv4ソケット構造体です。 */ struct SockAddrIn { u8 len; //!< ソケット構造体のサイズ u8 family; //!< アドレスファミリ u16 port; //!< ポート番号 InAddr addr; //!< IPv4アドレス構造体 }; /** * IPv6アドレス構造体です。 */ struct In6Addr { u8 addr[NN_SOCKET_IP6_ALEN]; //!< IPv6アドレス }; /** * IPv6ソケット構造体です。 */ struct SockAddrIn6 { u8 len; //!< ソケット構造体のサイズ u8 family; //!< アドレスファミリ u16 port; //!< ポート番号 In6Addr addr; //!< IPv6アドレス構造体 u32 flowInfo; //!< IPv6 flow information u32 scopeId; //!< set of interfaces for a scope }; /** * @brief ソケット構造体です。 */ struct SockAddr { u8 len; //!< ソケット構造体のサイズ u8 family; //!< アドレスファミリ u16 pad1; //!< padding u32 pad2[6]; //!< padding2 }; /** * @ref SockAddrIn と @ref SockAddrIn6を格納できるだけの大きさの構造体です。 */ struct SockAddrStorage { u8 len; //!< ソケット構造体のサイズ u8 family; //!< アドレスファミリ u16 pad1; //!< padding u32 pad2[6]; //!< padding2 }; /** * @brief @ref GetSockOpt(), @ref SetSockOpt()で SO_LINGER を使用する時の構造体です。 */ struct Linger { int onoff; //!< 1:linger有効、0:linger無効 int linger; //!< linger時間(秒単位) }; /** * @brief @ref GetSockOpt(), @ref SetSockOpt()で IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP を使用する時の構造体です。 */ struct IpMreq { InAddr multiaddr; //!< グループのIPアドレス InAddr interface; //!< インターフェイスのIPアドレス }; /** * @ref GetSockOpt(), @ref SetSockOpt()で IP6_ADD_MEMBERSHIP, IP6_DROP_MEMBERSHIP を使用する時の構造体です。 */ struct Ip6Mreq { u32 scopeId; //!< set of interfaces for a scope u8 maddr[NN_SOCKET_IP6_ALEN]; //!< グループのIPアドレス u8 filterType; //!< フィルタタイプ u32 srcNum; //!< 送信元アドレス数 u8 srcList[NN_SOCKET_IP6_ALEN]; //!< 送信元アドレス。2つ以上指定するときは続けてアドレスを入れる領域を用意すること }; enum IP6MreqType { IP6MREQ_INCLUDE = 0, //!< フィルタタイプ:INCLUDE IP6MREQ_EXCLUDE = 1 //!< フィルタタイプ:EXCLUDE }; /** * @brief @ref Poll() を使用する時の構造体です。 */ struct PollFd { int fd; //!< ソケット番号 int events; //!< 取得したいイベント int revents; //!< 実際に取得したイベントが返ります }; /** * @brief @ref GetAddrInfo() を使用する時の構造体です。 */ struct AddrInfo { int flags; //!< フラグ int family; //!< ソケットのアドレスファミリ int sockType; //!< ソケットタイプ int protocol; //!< ソケットのプロトコル unsigned addrLen; //!< ソケット構造体のサイズ char* canonName; //!< 正規名 void* addr; //!< ソケット構造体へのポインタ AddrInfo* next; //!< 次のAddrInfoへのポインタ。リストの最後ではNULL }; struct RDataInfo { u32 length; u8 *data; }; /** * @ref GetRRSetByName() を使用する時の構造体です。 */ struct RRSetInfo { u16 rdClass; u16 rdType; u32 ttl; u32 nrDatas; char *name; RDataInfo *rDatas; }; /** * @brief @ref GetHostByAddr(), @ref GetHostByName() を使用する時の構造体です。 */ struct HostEnt { char* name; //!< ホストのオフィシャル名 char** aliases; //!< エイリアスリストへのポインタ s16 addrType; //!< アドレスタイプ。PF_INET s16 length; //!< ソケット構造体のサイズ u8** addrList; //!< ソケット構造体リストへのポインタ }; /** * @brief DNSサーバアドレスの構造体です。 */ struct DnsAddr { int af; //!< アドレスファミリ。AF_INETまたはAF_INET6、使用しない場合は0 u8 addr[NN_SOCKET_IP6_ALEN]; //!< IPv4またはIPv6アドレス }; /** * SetResolverIns()、GetResolverIns() 使用時の構造体です。 */ #define NN_SOCKET_DNSSERVER_NUM_MAX 4 //!< 保持できる最大のDNSサーバ数 #define NN_SOCKET_DOMAIN_NAME_LEN_MAX 255 struct DnsServerInfo { DnsAddr entry[NN_SOCKET_DNSSERVER_NUM_MAX]; //!< DNSサーバアドレス構造体 char domain[NN_SOCKET_DOMAIN_NAME_LEN_MAX + 1]; //!< ドメイン名 }; #define NN_SOCKET_DNS_NAME_MAX 255 //!< DNSにおける名前の最大文字数 #define NN_SOCKET_MAXDNAME (NN_SOCKET_DNS_NAME_MAX + 1) //!< DNSにおける名前文字列の最大長(DNS名の最大文字数に'\0'の一文字分を加えた値) #define NN_SOCKET_DNS_RESOLV_ADDRESS_MAX 24 //!< DNSの名前解決において、一つの名前に対して取得できるアドレスの最大数 #define NN_SOCKET_DNS_RESOLV_ALIASNAME_MAX 24 //!< DNSの名前解決において、一度の解決で取得できるエイリアス名(CNAMEレコードで指定される名称)の最大数 /* * well-known address 初期化用定義 */ #define NN_SOCKET_IN6ADDR_UNSPECIFIED_INIT {0} #define NN_SOCKET_IN6ADDR_LOOPBACK_INIT {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1} #define NN_SOCKET_IN6ADDR_LINKLOCAL_ALL_NODES_INIT {0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,1} #define NN_SOCKET_IN6ADDR_LINKLOCAL_ALL_ROUTERS_INIT {0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,2} #define NN_SOCKET_IN6ADDR_MULTICAST_SOLICITED_NODE_INIT {0xff,0x02,0,0,0,0,0,0,0,0,0,0x01,0xff,0,0,0} #define NN_SOCKET_IN6ADDR_LINKLOCAL_UNICAST_INIT {0xfe,0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0} #define NN_SOCKET_IN6ADDR_MULTICAST_ALL_ROUTERS_INIT {0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,16} #ifdef SWITCH_SO_ENDIAN_BIG // Big Endian environment #define NN_SOCKET_NtoHl(netlong) ((u32) (netlong)) #define NN_SOCKET_NtoHs(netshort) ((u16) (netshort)) #define NN_SOCKET_HtoNl(hostlong) ((u32) (hostlong)) #define NN_SOCKET_HtoNs(hostshort) ((u16) (hostshort)) #else // Little Endian environment /** * 4byte長変数をネットワークバイトオーダからホストバイトオーダに変換 */ #define NN_SOCKET_NtoHl(netlong) ( (u32)( (((u32)(netlong)>>24)&0x000000FF) | (((u32)(netlong)>> 8)&0x0000FF00) | (((u32)(netlong)<< 8)&0x00FF0000) | (((u32)(netlong)<<24)&0xFF000000) ) ) /** * 2byte長変数をネットワークバイトオーダからホストバイトオーダに変換 */ #define NN_SOCKET_NtoHs(netshort) ( (u16)( (((u16)(netshort)>>8)&0x00FF) | (((u16)(netshort)<<8)&0xFF00) ) ) /** * 4byte長変数をホストオーダからネットワークバイトオーダに変換 */ #define NN_SOCKET_HtoNl(hostlong) ( (u32)( (((u32)(hostlong)>>24)&0x000000FF) | (((u32)(hostlong)>> 8)&0x0000FF00) | (((u32)(hostlong)<< 8)&0x00FF0000) | (((u32)(hostlong)<<24)&0xFF000000) ) ) /** * 2byte長変数をホストオーダからネットワークバイトオーダに変換 */ #define NN_SOCKET_HtoNs(hostshort) ( (u16)( (((u16)(hostshort)>>8)&0x00FF) | (((u16)(hostshort)<<8)&0xFF00) ) ) #endif /** * モジュールのAPI */ /* nsoc_socket.c */ /* nsoc_dns.c */ /* nsoc_inet.c */ #ifdef NN_SOCKET_IP6_ENABLE #endif /* nsoc_main.c */ /* nsoc_state.c */ //#ifdef NDEBUG_ENABLE //#endif } // socket } // nn /* NN_SOCKET_SOCKET_USER_AUTOGEN_H_ */ #endif