ネットワーク
概要
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 }; #endifDHCPにより動的IPアドレスを利用する場合には関数
IMPL_NET_DEV_get_netconfig()
が戻り値としてNULL
を返すか、返されるNetIfConfig_t
構造体のメンバ変数ipaddr
がNULL
となるように実装します。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サーバーのアドレスを指定するには
ipaddr
にNULL
を指定(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 APIドキュメント http://www.nongnu.org/lwip/2_0_x/index.html