#norelated
 #navi(Solaris をスイッチングハブにしよう)
 *目次 [#uf567e55]
 #contents
 
 *ご注意 [#j9e7a000]
 ここで紹介しているプログラムは、カーネルモジュールです。そのため、プログラム上に問題があった場合にはシステムが panic し、場合によってはファイルシステムに重大な障害を引き起こす可能性があります。以下のプログラムはテストプログラムで、十分な検証を行ってはいません。したがってあくまで個人の検証ためにお使いいただき、重要なシステム上では動作させないでください。
 
 *変更点の概要 [#fb9abd12]
 [[其の1>Solaris をスイッチングハブにしよう/其の1]]で今後の課題としていた以下の機能を追加しました。
 -あて先イーサネットアドレスを見てパケットを転送するポートを特定できるようにする。
 -brdgadm コマンドで mux_id を意識せずにネットワークインターフェースの削除ができるようにする。
 
 *プログラムの変更点 [#wd1a5c98]
 **brdg モジュールの構造体名の変更 [#b960a6c5]
 |CENTER:変更前 ----------> 変更後|CENTER:構造体概要|h
 |source_entry_s --> node_s|発信元ノード情報&br;ノードが接続されているポートやイーサネットアドレスを保存|
 
 **処理フローの変更 [#q5f4beca]
 あて先イーサネットアドレスを確認するようになったため、brdg モジュールのパケットの処理の決定フローは以下のようになりました。
 
 #ref(http://www.whiteboard.ne.jp/~admin2/pict/flow2.png)
 
 brdgamd コマンドは /etc/brdg.mid ファイルにネットワークインターフェース名と、max_id の対応を保持するように変更し、mux_id を意識せずにネットワークインターフェース名の指定で削除が行えるようにしました。本当は brdg モジュール内に情報を保持したかったのですが、brdgadm コマンド側からの brdg モジュール内の情報の取得が難しかったため、安直にファイルに書いておくことにしました^^;
 
 *ソースファイルとダウンロード [#jce29af1]
 ソースファイル: [[brdg_2.tar>source:brdg_2.tar]]
 
 |>|CENTER:tar ファイルに含まれるファイルの概要|h
 |[[Makefile>source:brdg_2/Makefile]]|brdg モジュール、brdgadm コマンド用の makefile|
 |[[brdg.c>source:brdg_2/brdg.c]]|brdg モジュールの本体。STREAMS モジュール。&br;あるネットワークインターフェースに到着したパケットを他のネットワークインターフェースへ転送する。|
 |[[brdgadm.c>source:brdg_2/brdgadm.c]] |brdg モジュールのための設定用コマンド。&br;STREAM の作成、パーシストリンク、モジュールの PUSH を行う。|
 
 *インストール [#y8c90e0e]
 **コンパイル&インストール [#qe957dcd]
 
 コンパイル、インストール方法に特に変更はありません。コンパイルには gcc を使います。make をそのまま実行した場合 64 bit モジュールである brdg と 32 bit モジュールである brdg32、brdgadm コマンドをを生成します。
 
  # make
  /usr/local/bin/gcc -g -D_KERNEL -c  brdg.c  -o brdg32.o
  /usr/ucb/ld -dn -r brdg32.o -o brdg32
  /usr/local/bin/gcc -g -D_KERNEL -c  brdg.c -m64
  /usr/ucb/ld -dn -r brdg.o -o brdg
  /usr/local/bin/gcc -g -lnsl -lsocket brdgadm.c -o brdgadm
 
 brdg モジュールのインストールおよびカーネルへのロードは make install で行います。
 
  # make install
  /bin/cp brdg /kernel/strmod/sparcv9/brdg
  /usr/sbin/modload brdg
 
 32 bit カーネルで起動されていて、32 bit モジュールをインストールする場合には make install32 を実行します。
 
  # make install32
  /bin/cp brdg32 /kernel/strmod/brdg
  /usr/sbin/modload brdg
 
 **アンインストール [#d01321cc]
 
 モジュールのアンインストールは make uninstall もしくは make uninstall32 で行えます。
 
  # make uninstall 
  /bin/rm /kernel/strmod/sparcv9/brdg
  /usr/sbin/modunload -i `/usr/sbin/modinfo | awk '/brdg/{ print  }'`
 
 同時に brdg モジュールのアンロードも行われますが、brdg モジュールを利用中の STREAM が存在していると、アンロードは失敗します。brdgadm コマンドを使って brdg モジュールを使っている STREAM をすべて削除するか、もしくはシステムを再起動してください。
 
  # make uninstall
  /bin/rm /kernel/strmod/sparcv9/brdg
  /usr/sbin/modunload -i `/usr/sbin/modinfo | awk '/brdg/{ print  }'`
  can't unload the module: Device busy
  make: *** [uninstall] Error 16
 
 *使い方 [#d98339c3]
 インストールが終わってもモジュールのロードが終わっただけで、brdg モジュールはまだ利用可能状態にありません。brdgadm コマンドをつかって、スイッチのポートとして追加したいネットワークインターフェースを指定してください。
 
  Usage:  brdgadm [ -a interface | -d interface]
  Options:
      -a interface     : Add interface as switch port
      -d interface     : Delete interface from port lis
 
 **インターフェースの追加 [#cf52b70f]
 
 インターフェースの追加には brdgadm の -a オプションを使います。
 
 例)
 
  # ./brdgadm -a hme0
  hme0 successfully added. (muxid=8)
  # ./brdgadm -a le0
  le0 successfully added. (muxid=9)
 
 上記の例では、hme0 と le0 をスイッチのポートとして追加しています。-a オプションが正常に終了すると、スイッチのポートとして追加されたネットワークインターフェースと max_id が /etc/brdg.mid ファイルに書き込まれます。ファイルの内容は、引数無しで brdgadm コマンドを実行すると見ることができます。が、ファイルを cat すればいいだけの話なので、あまり意味はないです。
  
  # ./brdgadm
  List of the interface currentry regsitered as port
         hme0
         le0
  # cat /etc/brdg.mid
  hme0:8
  le0:9
 
 **インターフェースの削除 [#r322254e]
 
 インターフェースの削除を行うには brdgadm の -d オプションを使います。
 
 例)
 
  # ./brdgadm -d hme0
  muxid 8 is being deleted...Done
  # ./brdgadm -d le0
  muxid 9 is being deleted...Done
 
 [[其の1>Solaris をスイッチングハブにしよう/其の1]]の時のように、max_id を指定する必要はありません。追加の時と同様にネットワークインターフェース名をしていして削除します。
 
 ***注意 [#de3be08f]
 
 brdgadm コマンドで指定するネットワークインターフェースは ifconfig にて設定されていないインターフェースを想定しています。上記の例では ifconfig -a を実行すると、以下のようになり、hme0、le0 ともに 使われていないことが分かります。
 
  # ifconfig -a
  lo0: flags=1000849 mtu 8232 index 1
         inet 127.0.0.1 netmask ff000000
  #
 
 ifconfig で plumb されている(UP/DOWNかかわらず)ネットワークインターフェースを brdgadm で追加した場合、予想外の自体が発生する恐れがあります。(予想外といっているのは、本当にどう挙動するか分からないとうだけです・・想像できる不具合があるってわけでは無いです・・どうということはないかもしれません)
 
 *今後の課題 [#l623b8ef]
 
 +あて先イーサネットアドレスが、ブロードキャストアドレスもしくはマルチキャストアドレスだった場合には、すぐに全ポートへパケットを配送できるようにする。(不要なノードリストの巡回をスキップする)
 + .....
 
 #navi(Solaris をスイッチングハブにしよう)
 


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS