

#include <nitroWiFi/soc.h>
#define SOC_VENDOR_NINTENDO 0x0000 // Nintendo TCP/IP stack
#define SOC_VERSION 0x0100 // Version 1.0
// Name for SOCConfig.alloc() and SOCConfig.free()
#define SOC_MEM_TCP_INFO 0
#define SOC_MEM_TCP_SENDBUF 1
#define SOC_MEM_TCP_RECVBUF 2
#define SOC_MEM_UDP_INFO 3
#define SOC_MEM_UDP_RECVBUF 4
#define SOC_MEM_TIMEWAITBUF 5
#define SOC_MEM_REASSEMBLYBUF 6
// Flags for SOCConfig{}.flag
#define SOC_FLAG_DHCP 0x0001 // Use DHCP
#define SOC_FLAG_PPPoE 0x0002 // Use PPPoE
typedef struct SOCConfig
{
u16 vendor; // SOC_VENDOR_NINTENDO
u16 version; // SOC_VERSION
//
// vendor specific section
//
void* (* alloc )(u32 name, s32 size);
void (* free ) (u32 name, void* ptr, s32 size);
u32 flag; // ORed SOC_FLAG_*
SOCInAddr addr;
SOCInAddr netmask;
SOCInAddr router;
SOCInAddr dns1;
SOCInAddr dns2;
s32 timeWaitBuffer; // time wait buffer size
s32 reassemblyBuffer; // reassembly buffer size
s32 mtu; // maximum transmission unit size
// TCP
s32 rwin; // default TCP receive window size (default 2 x MSS)
SOCTime r2; // default TCP total retransmit timeout value
// PPP
const char* peerid;
const char* passwd;
// PPPoE
const char* serviceName; // UTF-8 string
// DHCP
const char* hostName; // DHCP host name
s32 rdhcp; // DHCP retransmit times
// UDP
s32 udpSendBuff; // default UDP send buffer size
s32 udpRecvBuff; // defualt UDP receive buffer size
} SOCConfig;
SOC_VENDOR_NINTENDOの実装:ソケット層が新たなメモリーブロックを要求したとき、関数allocを呼びます。引数nameは、使われるメモリーブロックのタイプを示すSOC_MEM_*の1つです。関数allocはsizeバイトのメモリーブロックを割り当て、割り当てられたメモリーブロックへのポインタを返す必要があります。スタック層が割り当てられたメモリーブロックを解放することができる場合、関数freeを呼びます。関数freeは引数ptrによってポイントされたメモリーブロックを解放する必要があります。他の引数nameやsizeも関数allocにおいて同様です。スレッド間の相互排他については関数allocとfree側で実装する必要があります。
関数allocや
関数freeは、コールバック関数から直接呼び出されることがないので、OS_LockMutex()のようなスレッドレベルの同期プリミティブを
使用することができます。
| メンバ | 説明 | ||
|---|---|---|---|
vendor |
ベンダー名を指定します。このメンバは互換性のため残されており、実際には無視されます。 | ||
version |
バージョンを指定します。このメンバは互換性のため残されており、実際には無視されます。 | ||
alloc |
プロジェクト内で使用するメモリを確保する関数。 | ||
free |
プロジェクト内で使用したメモリを開放する関数。 | ||
flags |
ホストの設定方法を指定します。
|
dns1 |
DNSサーバーアドレスを構造体のメンバに指定します。 この構造体のメンバは SOC_GetHostByAddr()とSOC_GetHostByName()で使われます。 |
dns2 |
DNSサーバーアドレスを構造体のメンバに指定します。 この構造体のメンバは SOC_GetHostByAddr()とSOC_GetHostByName()で使われます。 |
||
timeWaitBuffer |
タイムウェイトバッファサイズを指定します。 このメンバは互換性のため残されており、実際には無視されます。 | ||
reassemblyBuffer |
フラグメント パケットの再構成バッファサイズを指定します。 このメンバは互換性のため残されており、実際には無視されます。 |
||
mtu |
デフォルトのインターフェースMTUサイズを指定します。 0が指定されると、インターフェースのデフォルトのMTUサイズが設定されます。 また、ホストをDHCPによって設定する場合には、ホストはDHCPサーバーと通信してMTUサイズを調節します。 この場合、指定したサイズよりも小さなMTUサイズが使用される場合があります。実際のMTUサイズは SOC_GetMtu() で調べられます。 |
||
rwin |
デフォルトTCP受信ウィンドウサイズを指定します。0が指定されると、2 x MSS (最大セグメント長)に設定されます。 | ||
r2 |
TCP接続が確立した後のデフォルトの合計再転送タイムアウト時間を指定します。 このメンバは互換性のため残されており、実際には無視されます。 |
||
serviceName |
PPPoEで接続する際に利用するサービス名を指定します。 このメンバは互換性のため残されており、実際には無視されます。 |
||
hostName |
DHCPで接続する際に利用するクライアントのホスト名を指定します。 このメンバは互換性のため残されており、実際には無視されます。 |
||
rdhcp |
DHCPパケット送信のリトライ回数を設定します。 このメンバは互換性のため残されており、実際には無視されます。 |
||
udpSendBuff |
デフォルトのUDP送信バッファサイズを指定します。 このメンバは互換性のため残されており、実際には無視されます。 |
||
udpRecvBuff |
デフォルトのUDP受信バッファサイズを指定します。 このメンバは互換性のため残されており、実際には無視されます。 |
SOC_GetHostByAddr,
SOC_GetHostByName,
SOC_GetMtu,
SOC_Startup,
SOCInAddr
2005/09/13 初版