ネットワーク

概要

SOLIDではネットワークプロトコルスタックとしてlwIP(2.0.2)を採用しています。

ネットワーク機能を利用するための設定

ネットワーク情報の設定(IPアドレスなど)

Starter Kitのボードに対してIPアドレスなどの接続情報を設定するためには各アプリケーションのBSPににある以下の箇所を変更します。

bspAP-RZA-StarterKitdriversimpl_net_getconfig.c または bspAP-RZA-StarterKitdriversimpl_net_getconfig.c

#define STATIC_IP_ADDR      /* 静的IPを使用 */

#ifdef STATIC_IP_ADDR
const NetIfConfig_t _network_config =
{
        "192.168.0.100",    // Local IP address
        "255.255.255.0",    // Subnet mask
        "192.168.0.1",      // Gateway IP address
        NO_DNS_SERVER_LIST  // list of DNS servers
};
#endif

DHCPにより動的IPアドレスを利用する場合には関数 IMPL_NET_DEV_get_netconfig()が戻り値としてNULLを返すか、自アドレス(Local IP address)文字列へのポインタをNULLとなる様に実装します。

DNSサーバーのアドレスを指定する場合には以下の例の様にサーバーのアドレス文字列へのポインタを格納する配列を別の変数として定義し、 マクロ SET_DNS_SERVER_LIST(変数名)でNetIfConfig_t構造体のメンバ変数 dns_server_listを初期化します。 (サーバーが無い場合にはマクロNO_DNS_SERVER_LIST()を使用します)

const    char    *ns_list[] = {"192.168.0.1", "192.168.10.1"};
const NetIfConfig_t  _network_static_with_dns =
{
   "192.168.0.100",        // Local IP address
   "255.255.255.0",        // Subnet mask
   "192.168.0.1",          // Gateway IP address
   SET_DNS_SERVER_LIST(ns_list) // list of DNS servers
};

const NetIfConfig_t *IMPL_NET_DEV_get_netconfig(void)
{
    return &_network_static_with_dns;
}

DHCP使用時にDNSサーバーのアドレスを指定するにはローカルIPアドレスにNULLを指定(DHCP動作)した上でDNSサーバーを指定します。

const    char    *ns_list[] = {"192.168.0.1"};
const NetIfConfig_t  _network_dhcp_with_dns = {
   NULL,                // Local IP address
   NULL,                // Subnet mask
   NULL,                // Gateway IP address
   SET_DNS_SERVER_LIST(ns_list) * // list of DNS servers
};

const NetIfConfig_t *IMPL_NET_DEV_get_netconfig(void)
{
    return &_network_dhcp_with_dns;
}

警告

ローカルでDNSサーバーのアドレスを指定している場合でもDHCPサーバーからのレスポンスにDNSサーバーの情報が含まれる場合にはサーバーからの情報が優先され、ここで指定したDNSサーバーのアドレスは上書きされます。

カーネル資源の設定について

ネットワーク機能を有効にする場合、一部のカーネル資源をプロトコルスタックのために確保する必要があります。 下記の設定を確認し、必要な場合は変更してください。(カーネル資源全般の設定については カーネル起動パラメータの設定 を参照してください。)

1.カーネル資源のID

アプリ―ケーションで使用する資源のIDの中で最大のものに1を加えた値を下記のシンボルで定義してください。(定義方法はdefineでも列挙型でも構いません)

資源名 シンボル
タスク SYS_RSV_TSK_ID_BASE
セマフォ SYS_RSV_SEM_ID_BASE
データキュー SYS_RSV_DTQ_ID_BASE

2.カーネル資源初期化ブロックへの追加

アプリケーションのkernel_cfg.c内にある資源初期化ブロックの定義の末尾にそれぞれ下記のシンボルを追加してください。

テーブル名 シンボル
_kernel_tinib_table __SOLID_RESERVED_TASKS__
_kernel_torder_table __SOLID_RESERVED_TASK_ORDER__
_kernel_seminib_table __SOLID_RESERVED_SEMS__
_kernel_dtqinib_table __SOLID_RESERVED_DTQS__

APIリファレンス

アプリケーションからネットワーク機能を利用するにはlwIPのAPIを利用します。 lwIPのインタフェースについては以下のドキュメントを参照してください。

lwIPドキュメント(外部リンク) http://www.nongnu.org/lwip/2_0_x/index.html