研究ノート 長野県工技センター研報 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)
© Copyright 2024 Paperzz