Upgrade to Pro — share decks privately, control downloads, hide ads and more …

情報家電プロトコルスタック開発の展開

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

 情報家電プロトコルスタック開発の展開

Avatar for Satoshi Konno

Satoshi Konno

May 20, 2006

More Decks by Satoshi Konno

Other Decks in Programming

Transcript

  1. CyberGarage 未踏での開発物 ▪概要 組み込みシステム向け情報家電プロトコルスタックとしてUPnPを実装する。 将来の組込みシステムの高性能化を見越した高機能版と、最低限機能を有する 軽量版を実装 C++およびJava版のUPnPプロトコルスタックの開発経験を活かし、軽量なUPnP プロトコルスタックを開発する。実装はC言語を想定しており、簡便さをそのままに、 実行速度およびプログラムサイズを考慮しながらデバイス回りの必要最低限の 機能から実装する。手順として、WindowsおよびUnixプラットフォームで基本

    機能実装確認後、各プラットフォームへの移植する ▪高機能版 既に開発済みC++ 版のUPnPプロトコルスタックをベースに、XMLパ-サー等の 軽量化および移植作業をベースに実装。 ▪軽量版 ▪対応プラットフォーム 組み込み系 : T-Engine、μITRON、BTRON、WindowsCE PC系 : Windows(WIN32)、Linux、MacOSX ▪概要 2004年度第2回 (2004年11月~2005年8月)
  2. CyberGarage UPnPとは? ▪実装機能詳細 機能 詳細 高機能版 軽量版 基本設計 - ◦

    SSDP ◦ ◦ GENA ◦ ◦ SOAP ◦ ◦ XML ◦ ◦ HTTP ◦ ◦ UPnP ◦ ◦ 入出力 ◦ - ネットワーク ◦ ◦ 時刻管理 時間管理仮想化関数 ◦ ◦ タスク タスク管理仮想化関数 ◦ ◦ 排他制御 排他制御管理仮想化関数 ◦ ◦ 文字操作 文字列操作、トークン分割関数等 ◦ ◦ データ構造 ベクタ構造・双方向リスト構造関数等 ◦ ◦ UPnPデバイス発見/応答サーバ・クライアント機能 UPnPサービス要求/応答サーバ・クライアント機能 SOAPメッセージサーバ・クライアント機能 XMLパーサー/ツリー構造操作機能 HTTP/1.1(RFC2616)サーバ・クライアント機能 UPnPデバイス/コントロールポイント関連機能等 ファイル入出力共通関数 / Java互換入出力ストリーム ソケット(TCP/UDP)仮想化関数、URL処理機能等 ▪UPnPとは? 家庭ネットワーク規格として、マイクロソフト版ネットワーク版PnPとして提唱。同様な 技術としてはSunのJini、AppleのBonjour等。 規格としてはSOAP等のオープンスタンダードな仕様を組み合わせてたものであり 仕様は一般に公開されている。
  3. CyberGarage PM助言内容/成果 ▪省サイズ オブジェクトサイズを100KBとの目標設定に向けて設計および 実装作業を進めたが、UPnP全機能を実装の対象と方向転換 した要因もあり、結果として最終的なオブジェクトサイズは モジュール選択(コンパイルオプション)により軽量版実績は 230KB~180KBにて完了。 他ベンダーのC言語による実装調査の結果も、200KB程度であり、ある程度妥当な 結果と思われる。ただし、ライブラリ関数領域節約のため、可能なものはマクロ展開

    したため、ある程度の可読性は犠牲となった。 ▪モジュール化 ユーザー側で、組み込みたい機能を取捨選択できるよう軽量版に関してはコンパイル オプションによるモジュール指定を可能とした。 UPnPデバイス(サーバ)機能/コントロールポイント(クライアント)機能部に大別し、UPnP デバイス機能も、開発者が取捨選択可能なようコンパイルオプションを導入した。 軽量版 230KB コンパイルオプション コントロールポイント機能無効 × ◦ ◦ ◦ ◦ デバイス購読機能無効 × × ◦ ◦ ◦ デバイスアクション機能無効 × × × × ◦ デバイス問い合わせ機能無効 × × × ◦ ◦ オブジェクトサイズ 227KB 211KB 194KB 187KB 178KB 有効:◦ 無効:×
  4. CyberGarage ▪対象ユーザ 成果公開 UPnPによる家庭内ネットワークまたは組み込み機器の相互接続環境構築の必要性の ある開発者が主対象。対象者は、個人および企業、商用・非商用を問わない。 またオープンソースであるため、各プラットフォーム移植、HTTPクライアント/サーバー 実装等の教育的側面もあり。 ▪試験公開 No 代表者

    所属 貢献内容 1 Aapo Makela Nokia 2 Johannes Gutlebe CERN 3 Theo Beisch 未確認 4 Rosfran Borges 未確認 軽量版評価 軽量版評価/設計アドバイス 軽量版評価/libxml2(XMLパーサ)対応/バグフィックス 軽量版評価/WindowsCE対応/バグフィックス 本公開に先立ち、軽量版を下記ユーザーに試験公開した。試験公開の結果として 以下のような貢献があり、本成果物に反映させた。 No 成果物 URL 1 高機能版 http://www.cybergarage.org/net/upnp/cc/index.html 2 軽量版 http://www.cybergarage.org/net/upnp/c/index.html ▪本公開 高機能版/軽量版共にオープンソース(BSDライセンス)として公開予定。SourceForgeとの 併用を予定しており、同サイトの承認が取れ次第下記URLにて公開予定。
  5. CyberGarage 特徴(1) ▪オブジェクト指向 BOOL upnp_clock_actionreceived(CgUpnpAction *action) { char *currTime =

    …..; char *actionName = cg_upnp_action_getname(action); CgUpnpArgument *currTimeArg = cg_upnp_action_getargumentbyname(action, "CurrentTime"); cg_upnp_argument_setvalue(currTimeArg, sysTimeStr); return TRUE; } <?xml version="1.0"?> <scpd xmlns="urn:schemas-upnp-org:service-1-0" > …. <actionList> <action> <name>GetTime</name> …... </action> </actionList> </scpd> <?xml version="1.0" ?> <root xmlns="urn:schemas-upnp-org:device-1-0"> …… <device> <deviceType>urn:schemas-upnp-org:device:clock:1</deviceType> …… </device> </root> /**** デバイス初期化 ****/ CgUpnpDevice *clockDev = cg_upnp_device_new(); /**** デバイス定義情報設定 ****/ cg_upnp_device_parsedescription(clockDev,     CLOCK_DEVICE_DESC, strlen(CLOCK_DEVICE_DESC)); /**** サービス取得/定義情報設定 ****/ CgUpnpService *timeService = cg_upnp_device_getservicebyname(clockDev, "urn:schemas-upnp-org:service:timer:1"); cg_upnp_service_parsedescription(timeService, CLOCK_SERVICE_DESC, strlen(CLOCK_SERVICE_DESC); /**** アクション処理関数設定 ****/ CgUpnpAction *getAction = cg_upnp_service_getactionbyname(timeService, “GetTime”); cg_upnp_device_setactionlistener(clockDev, upnp_clock_actionreceived); /**** デバイス開始 ****/ cg_upnp_device_start(clockDev); …… /**** デバイス停止 ****/ cg_upnp_device_stop(clockDev); /**** デバイス解放 ****/ cg_upnp_device_delete(clockDev); UPnP機能を抽象化/隠蔽。開発者はデバイスXML定義およびアクション関数を作成する だけであり、既存アプリケーションのUPnP対応も容易。 UPnPデバイス定義(CLOCK_DEVICE_DESC) UPnPサービス定義(CLOCK_SERVICE_DESC) アクション関数(upnp_clock_actionreceived)
  6. CyberGarage 特徴(2) ▪軽量性 組み込み系であるT-Engine/μITRONを対象プラットフォームとし、高機能版を含めて軽量性 を重視した。高機能版は従来より軽量化し、軽量版のオブジェクトサイズは220KB。 本成果物を含め、開発者はC/C++/Javaの多様プログラム言語の選択が可能である。また 各プログラミング言語版の基本設計は共通であり、その移行は容易である。 ▪多言語対応 C++版 Java版

    C言語版 using namespace CyberLink; Device *dev = new Device(); dev->loadDescriptoin(….); dev->setActionListener(dev); dev->setQueryListener(dev); dev->start(); …… dev->stop(); import org.cybergarage.upnp; Device dev = new Device(); dev.loadDescripton(……); dev. setActionListener(dev); dev. setQueryListener(dev); dev.start(); …… dev.stop(); CgUpnpDevice *dev = cg_upnp_device_new(); cg_upnp_device_parsedescription(dev, ….); cg_upnp_device_setactionlistener(dev, …); cg_upnp_device_setquerylistener(dev, …); cg_upnp_device_start(dev); …… cg_upnp_device_stop(dev); ▪移植性 一般的なWindows(WIN32)やLinuxプラットフォームだけではなく、Unix全般および 組み込み系のT-Engine/μITRONを含む、幅広いプラットフォームを対象としている。 機種依存部は基本機能部のみで、他プラットフォームへの移植対応も容易 ▪オープンソース オープンソースの一般的な特徴については割愛するが、公開ライセンスとしてBSDを 選択しているため、商用/非商用を問わず同ライセンス下で自由に活動できる。 また、試験公開時にもユーザーからの貢献があり、今後も完成度向上に向けて、 優秀な技術者の協力が得られる点も魅力である。
  7. CyberGarage オープンソース開発 ▪Nokia C言語のプロジェクトに、Nokia側の開発者が4名参加。方向性が多少違う部分も あったが、非常に精力的に参加して頂いていたが ..... 今年の3月に、先方の法務から連絡があり、Nokiaの特許などに絡む問題との 問題で、当面はソースツリーへのコミットメント停止。具体的には、配布ライセンス (現状はBSDライセンス)の修正が先方の要求で、現在は法務からの変更ライセンス 提示待ち。

    他のコミッターからも、Nokia主導で配布ライセンスが変更されることに懸念が高し。 基本的には、Nokia社の開発者レベルでは協業したいのだが、まずは変更ライセンス 案をコミッターで協議の上、方向性を決定する。 Nokia者の意向もあるだろうが ...... 配布ライセンスは、現状維持が基本
  8. CyberGarage 家庭内ネットワークゲートウェイ リモートデスクトップとは異なる方式で、セキュリティを考慮しつつ家庭内ネットワーク 機器を透過的に使えるようなシステムを開発中 ▪家庭内ネットワークゲートウェイ ▪システム構成図 Authentication CyberGarage UPnP Proxy

    UPnP Gateway (Client Mode) UPnP Gateway (Server Mode) Proxy Proxy Control Point (Proxy) Control Point (Proxy) Virtual Device UPnP Control Point UPnP Device SSDP Search SSDP Response SSDP Notify HTTP Request HTTP Response SSDP Notify SSDP Search SSDP Response C re at e Vi rt u al D e vi c e HTTP Proxy HTTP Requett HTTP Response HTTP Request HTTP Response SSDP Search SSDP Response SSDP Notify Authentication Login Register Client