ネットワークネームスペース機能使用時の Trema 停止エラー軽減方法
OpenFlow フレームワーク Trema のネットワークネームスペース機能について以前「Trema の仮想ネットワーク機能には『OpenFlow実践入門』に書いてない強力な機能がありました。」という記事を書きましたが、使ってみると Trema の停止時に失敗することが良く起こり使いづらいところがありました。回避方法を見つけたので書いておきます。
■本記事の対象
Trema のネットワークネームスペース機能。
・確認した Trema のバージョンは、trema 0.3.14、および 0.3.16(最新パッケージ版)
・確認した OSは、Lubuntu 12.04 Desktop (i386)
(Ubuntu 12.04 でも同じだと思います)
■前提知識
Trema の仮想ネットワーク機能で指定したネットワークネームスペース内でコマンドを起動するためには、まず「trema netns ネットワークネームスペース名」を実行してシェルを起動します。このシェル内で実行されたコマンドはそのネットワークネームスペース内で動作します。
■問題点
「trema netns ネットワークネームスペース名」コマンドで起動したシェルを終了するのを忘れて Trema を終了しようとするというミスが頻発しました。特に複数のネットワークネームスペースを利用する場合です。
このシェルを終了せずに Trema を終了しようとすると以下のようにエラーが出て失敗します。
例: ネットワークネームスペース host1 でシェルを起動したまま停止を試みた時
$ trema killall
Cannot remove /var/run/netns/host1: Device or resource busy
error: Command 'sudo up netns delete host1' failed!
また、このエラーが出たあとにシェルを終了させて正常に Tremaを停止させても、次の Trema 起動時に一回失敗します。
例: 上記例のエラー後の起動では2回目で起動成功
$ trema run empty.rb -c netns.conf ← 1回目はエラー
Could not create /var/run/netns/hostt1: File exists
error: Command 'sudo ip netns add host1' failed!
$ trema run empty.rb -c netns.conf ← 2回目は成功
■問題の回避方法
シェルを起動することなく、ネットワークネームスペースを指定してコマンドを実行する方法があれば良いと考え OS のコマンドを探してみたらありました。以下の構文です:
ip netns exec ネットワークネームスペース名 コマンド
例: ネットワークネームスペース host1 で arp -a を実行
$ sudo ip netns exec host1 arp -a
この方法だとコマンドが終了すればそのネットワークネームスペースを使用しているプロセスがなくなります。これによりネットワークネームスペースを使っているプロセスを起動したままにしておくことがなくなり、Trema 終了時の失敗を減らすことができます。
■注意点
ip netns exec にはルート権限が必要なので一般ユーザで使うには sudo が必要です。
p.s.
Trema の netns サブコマンドで引数としてコマンドライン指定もサポートしてくれたら嬉しいな。
« PLANEX MZK-WNH//MZK-W300NH2 用 OpenWrt にボタンの仕掛けを追加 | トップページ | OpenWrt (trunk 版 r36041)を MZK-W300NH2 用にビルドしてみました »
「Trema」カテゴリの記事
- ◆【改訂】OpenFlow フレームワーク Trema 0.4 のインストール手順【0.4.7対応】(2014.06.11)
- ◆ Trema 0.4.7インストール失敗とバージョン指定インストール(2014.06.08)
- ◆ OpenFlowフレームワーク Trema 0.4 のインストール(2013.10.06)
- ◆ 【TremaでOpenFlowプログラミング】VLAN ID コンバータ(2013.05.12)
- ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(OpenFlowスイッチとTrema)(2013.05.11)
「TremaでOpenFlowプログラミング」カテゴリの記事
- ◆ 【TremaでOpenFlowプログラミング】VLAN ID コンバータ(2013.05.12)
- ◆ OpenFlow 1.0.0 メッセージと Trema API(Ruby) との対応表(2013.05.08)
- ネットワークネームスペース機能使用時の Trema 停止エラー軽減方法(2013.03.16)
- 【TremaでOpenFlowプログラミング】マッチングルール早見表(2013.03.02)
- Trema の仮想ネットワーク機能には『OpenFlow実践入門』に書いてない強力な機能がありました。(2013.02.03)
この記事へのコメントは終了しました。
« PLANEX MZK-WNH//MZK-W300NH2 用 OpenWrt にボタンの仕掛けを追加 | トップページ | OpenWrt (trunk 版 r36041)を MZK-W300NH2 用にビルドしてみました »
コメント