SOCConfig

構文

#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つです。関数allocsizeバイトのメモリーブロックを割り当て、割り当てられたメモリーブロックへのポインタを返す必要があります。スタック層が割り当てられたメモリーブロックを解放することができる場合、関数freeを呼びます。関数freeは引数ptrによってポイントされたメモリーブロックを解放する必要があります。他の引数namesizeも関数allocにおいて同様です。スレッド間の相互排他については関数allocfree側で実装する必要があります。 関数allocや 関数freeは、コールバック関数から直接呼び出されることがないので、OS_LockMutex()のようなスレッドレベルの同期プリミティブを 使用することができます。

メンバ 説明
vendor ベンダー名を指定します。このメンバは互換性のため残されており、実際には無視されます。
version バージョンを指定します。このメンバは互換性のため残されており、実際には無視されます。
alloc プロジェクト内で使用するメモリを確保する関数。
free プロジェクト内で使用したメモリを開放する関数。
flags ホストの設定方法を指定します。
SOC_FLAG_DHCP ホストはDHCPを用いて設定されます。
SOC_FLAG_DHCPがFALSEなら、構造体メンバのaddr、netmask、routerがホスト設定に使われます。
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 初版