TOPPERS-TINET用DHCPクライアント ミドルウェアの開発*

研究ノート
長野県工技センター研報
No.1,p.I39-I41(2006)
TOPPERS-TINET用DHCPクライアント
ミドルウェアの開発*
浜
淳**
Development of DHCP Client Middleware for TOPPERS-TINET
Atsushi HAMA
μITRON準拠のリアルタイムOSであるTOPPERS用TCP/IPプロトコルスタック(TINET)上で動作す
る,DHCPクライアント用ミドルウェアを開発した。オープンソースとして公開する予定である。
キーワード:オープンソース,TOPPERS,TINET,DHCP,ネットワーク
1
はじめに
するDHCPクライアント・ミドルウェアを開発したので
MP3プレーヤ,HDDレコーダなど,ネットワークを使
報告する。
ってコントロールする組込み機器が増加している。それ
らは必ずしもハイエンドCPUばかりではなく,16ビット
や8ビットといったローエンドのマイコンを使用してい
2
2.1
DHCPクライアント・ミドルウェア
概要
る場合も少なくない。このような機能を実現するために
DHCP(Dynamic Host Configuration Protocol)とは,ネッ
最低限必要な技術が,①(リアルタイム)OSを利用した
トワークに一時的に接続するコンピュータに,IPアドレ
マルチタスク処理対応,②TCP/IPへの対応,である。
スなど必要な情報を自動的に割り当てるプロトコルであ
TOPPERS(Toyohashi
OPen
Platform
for
Embedded
る。DHCPサーバには,ゲートウェイサーバやDNSサー
Real-time Systems)とは,TOPPERSプロジェクト(名古屋
バのIPアドレス,サブネットマスク,クライアントに割
大学高田広章教授をリーダとして,産学官の団体と個人
り当ててもよいIPアドレスの範囲などが設定されており,
の連携により推進しているNPO法人)の活動成果として
アクセスしてきたコンピュータにこれらの情報を提供す
得られた,μITRON仕様に準拠したリアルタイムOSであ
る。また,クライアントが通信を終えると自動的にアド
る。オープンソースとしてWeb上で公開されている。当
レスを回収し,他のコンピュータに割り当てる。
センターは平成17年1月に特別会員として認定され,
企業
このDHCP機能を利用すれば,端末機器ごとに面倒な
IPアドレス設定やサブネット・マスク設定などを行う必
向け講習会を行うなどの技術普及を行っている。
TINET(Tomakomai InterNET)は苫小牧高専情報工学科
要が無くなり,あるいはネットワークが変わるたびに設
において開発された,ITRON TCP/IP API仕様に準拠した
定をやり直す必要も無い,メリットの大きいプロトコル
コンパクトな TCP/IP プロトコルスタックである。こち
である。
らもオープンソースとしてWeb上で公開されている。
2.2
仕様
オープンソースはその趣旨ゆえ技術者のボランティア
現段階での仕様を以下に記す。DHCPクライアントの
精神によるところが大きく,一般企業は参入が難しい分
機能としては,①DHCPサーバへの接続,②IPアドレス,
野であるだけに,地方公設試が果たしうる役割は大変大
サブネットマスク,ゲートウェイアドレスの取得等,で
きなものがあると確信する。また,TOPPERS,TINETの
ある。μITRONの関数命名規則に準拠していなかったり,
いずれも優れたソフトウェア部品であるが,残念ながら
エラー値の扱いについても更なる検討が必要なため,公
対応するオープンソース・ミドルウェアはほとんど無い
開時には関数名等変更される可能性もある。
のが現状である。今回,自身のスキルアップも兼ね,オ
【書式】
ープンソースを念頭に置いた,TOPPERS-TINET上で動作
#include “dhcp.h”
ER dhcp_open(T_IF_SOFTC *ic)
* 開発事例
** 通信・基盤技術チーム
ER dhcp_discover(DHCP *dhcp)
ER dhcp_offer(DHCP *dhcp)
ER dhcp_request(DHCP *dhcp)
- I 39 -
図1
図2
IP アドレスの取得
TCP ベースサーバへの接続
UB dnsaddr[IP_ADDR_LEN];
/* dns */
UB dhcpsrvaddr[IP_ADDR_LEN]; /* dhcp server */
B domain[DOMAIN_NAME_LEN]; /* domain */
UB macaddr[MAC_ADDR_LEN]; /* MAC address */
} DHCP;
【戻り値】
E_OK
:正常終了
負の値
:エラー発生
正の値
2.3
:送受信バイト数
実装
DHCPパケットは,UDPポート67(サーバ側)とUDP
ポート68(クライアント側)を用いてやり取りされる。
送受信するパケットは以下の4つである。
・DHCP Discoverパケット
dhcp_discover()関数により実現。クライアントがブ
ロードキャストで送信する,サーバからの応答を得
るためのパケット。
・DHCP Offerパケット
dhcp_offer()関数により実現。サーバがクライアント
宛に送信する,DHCP Discoverパケットの応答パケッ
ト。
・DHCP Requestパケット
dhcp_request()関数により実現。クライアントがブロ
ードキャストで送信する,今後使用するIPアドレス
を各サーバに通知するパケット。
・DHCP Ackパケット
dhcp_ack()関数により実現。
サーバがクライアント宛
に送信する,IPアドレスの使用許可パケット。
パケットの送受信およびタイムアウトには,TINETが
提供しているAPI関数(udp_snd_dat(),udp_rcv_dat())を
利用している。最終的にDHCP ACKパケットを受信でき
図3
TCP ベースサーバのターミナル画面
れば,DHCPクライアントの処理が完了する。
ER dhcp_ack(DHCP *dhcp)
3
dhcp_open()以外の関数はdhcp_open()から随時呼び出
実験
開発したミドルウェアの動作を確認するため,当セン
されるため,使用者側で意識する必要は無い。
ター情報技術部門内ネットワーク上での動作実験を行っ
【DHCP構造体】
た。ハードウェアには秋月電子通商製AKI-H8/3069Fボー
typedef struct _dhcp{
UB ipaddr[IP_ADDR_LEN];
ドを使用した。
/* IP address */
3.1
UB maskaddr[IP_ADDR_LEN]; /* subnet mask */
UB gwaddr[IP_ADDR_LEN];
1
/* gateway address */
- I 40 -
実験方法
通信実験用にTOPPERS-TINET上で動作するTCP
ベースサーバ・プログラムを用意し,そのタスク内
でdhcp_open()関数を呼び出し,サーバとのアクセス
MACアドレスが必要である。DHCP OfferパケットでIPア
ドレス(図3の場合192.168.4.156)が一旦割り振られた後,
を試みた。
(図1)
IPアドレスがエラー無く割り振られると,TCPを
DHCP Requestパケットによりネットワーク上の各サー
用いてポート番号“1234”でクライアントからの接
バに先ほど取得したIPアドレス(192.168.4.156)を使用
続を待つ。なお,ここで言うクライアントとはTCP
する旨を通知し,ネットワーク通信の準備が完了する。
ベースサーバに対するクライアントを意味しており,
その後192.168.4.144のアドレスを持つクライアント・パ
ネットワーク上にあるパソコンを想定している。以
ソコンからのアクセスがあり,接続を許可している。ク
下も同様である。
(図2)
ライアント・パソコンからは順次“q”“w”“e”“r”“t”
2
3
“y”
の各キャラクタがネットワーク経由で送信されてい
クライアントからはtelnetコマンド
$ telnet xxx.xxx.xxx.xxx 1234
る。すなわち,DHCP動作が正常に機能しているのが判
で接続した。なお,第一パラメータxxx.xxx.xxx.xxx
る。
はTCPエコーサーバがDHCPで取得したアドレスで
4
あり,第2パラメータ1234がポート番号である。
4
おわりに
TOPPERS-TINET上で動作する,DHCPクライアント・
クライアントと接続した後は,クライアントから
送られてきたデータをTCPベースサーバ機能により
ミドルウェアを開発した。
シリアルポート経由でターミナルに出力した。
(図
(1)TOPPERS,TINETいずれもオープンソースであること。
3)
(2)DHCPは要素技術として需要が大いにありそうである
3.2
こと。
結果
図3はTCPベースサーバのターミナル画面である。以
以上の理由により,マニュアルを整備し,関数名,エ
下,この図により説明を行う。4.1実験方法と重複す
ラー番号など精査を行ったうえで,今回開発を行ったプ
る部分もあるが,あらためて説明を行う。
ログラムをオープンソースとして公開するつもりである。
TCPベースサーバプログラムを起動すると,TOPPERS,
TINETの順に動作を開始する。TCP,UDPの各タスクが
起動後に,メインであるTCPサーバタスクが動作を開始
参考文献
1)
する。TCPサーバタスクからdhcp_open()関数が読み出さ
れ,ネットワーク上のサーバとの通信を試みる。その際
- I 41 -
浅井敬 他. Tinyマイコン用TCP/IPプロトコル・スタ
ックの応用事例. Interface. 8, p88-102(2005)