ネットワーク

概要

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

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

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

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

bsp/AP-RZA-StarterKit/drivers/impl_net_getconfig.c または bsp/AP-RZA-StarterKit/drivers/impl_net_getconfig.c

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

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

DHCPにより動的IPアドレスを利用する場合には関数 IMPL_NET_DEV_get_netconfig() が戻り値として NULL を返すか、返される NetIfConfig_t 構造体のメンバ変数 ipaddrNULL となるように実装します。

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

const    char    *ns_list[] = {"192.168.0.1", "192.168.10.1"};
const NetIfConfig_t  _network_static_with_dns =
{
    .ipaddr          = "192.168.0.100",        // Local IP address
    .netmask         = "255.255.255.0",        // Subnet mask
    .gw              = "192.168.0.1",          // Gateway IP address
    .dns_server_list = 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サーバーのアドレスを指定するには ipaddrNULL を指定(DHCP動作)した上でDNSサーバーを指定します。

const    char    *ns_list[] = {"192.168.0.1"};
const NetIfConfig_t  _network_dhcp_with_dns = {
    .ipaddr          = NULL,                // Local IP address
    .netmask         = NULL,                // Subnet mask
    .gw              = NULL,                // Gateway IP address
    .dns_server_list = 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サーバーのアドレスは上書きされます。

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

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

カーネル資源のID

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

資源名

シンボル

タスク

SYS_RSV_TSK_ID_BASE

セマフォ

SYS_RSV_SEM_ID_BASE

データキュー

SYS_RSV_DTQ_ID_BASE

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

アプリケーションの 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