NOX インストール

NOX をインストールし、起動する。


構成

Open vSwitch を入れたマシンの上に NOX をインストールし、下図のような単純な構成の OpenFlow スイッチとして機能させる。

http://noxrepo.org/ の、http://noxrepo.org/noxwiki/index.php/NOX_Installation にインストール手順あり。

インストール作業

NOX Installation を見ながら作業。

ソースの取得
$ git clone git://noxrepo.org/nox
$ cd nox

$ git branch -a
* zaku
  remotes/origin/HEAD -> origin/zaku
  remotes/origin/destiny
  remotes/origin/dev/destiny-fast
  remotes/origin/openflow-0.8.9
  remotes/origin/openflow-0.9
  remotes/origin/openflow-1.0
  remotes/origin/zaku
$ 
./boot.sh
$ ./boot.sh 
building with all apps
Disabling noxext...
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'.
libtoolize: copying file `config/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `config'.
libtoolize: copying file `config/libtool.m4'
libtoolize: copying file `config/ltoptions.m4'
libtoolize: copying file `config/ltsugar.m4'
libtoolize: copying file `config/ltversion.m4'
libtoolize: copying file `config/lt~obsolete.m4'
configure.ac:23: installing `config/config.guess'
configure.ac:23: installing `config/config.sub'
configure.ac:12: installing `config/install-sh'
configure.ac:12: installing `config/missing'
src/Makefile.am: installing `config/depcomp'
$ 
で、普通に成功。
./configure

手順通り、../configure したが、、、
$ mkdir build
$ cd build/
$ ../configure 
checking build number... none
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
....  (中略)
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for fdatasync... yes
checking for ppoll... yes
checking for boostlib >= 1.34.1... yes
checking whether the Boost::Filesystem library is available... yes
configure: error: Could not link against  !
$
念のため root ユーザでやったが同じ。さて何だ?
./configure をめぐる苦悩の旅(次節までスキップせよ)
Google に聞くとどうやら libboost-all-dev が足りないときの現象らしい。
正しくは http://noxrepo.org/noxwiki/index.php/Dependencies の依存性リストを見よ、という感じ。
が、Fedora 12 には libboost-all-dev などというパッケージはない。
関連パッケージを探してみてもどれも違う。
http://www.boost.org/doc/libs/1_47_0/more/getting_started/unix-variants.html
から libboost を手で入れてみても ./configure の状況は変わらず。

=== しかし冷静に見ると、

# rpm -qa | grep boost
boost-program-options-1.39.0-9.fc12.x86_64
boost-1.39.0-9.fc12.x86_64
boost-filesystem-1.39.0-9.fc12.x86_64
boost-wave-1.39.0-9.fc12.x86_64
boost-thread-1.39.0-9.fc12.x86_64
boost-system-1.39.0-9.fc12.x86_64
boost-signals-1.39.0-9.fc12.x86_64
boost-devel-1.39.0-9.fc12.x86_64
boost-test-1.39.0-9.fc12.x86_64
boost-graph-1.39.0-9.fc12.x86_64
boost-date-time-1.39.0-9.fc12.x86_64
boost-math-1.39.0-9.fc12.x86_64
boost-serialization-1.39.0-9.fc12.x86_64
boost-regex-1.39.0-9.fc12.x86_64
boost-iostreams-1.39.0-9.fc12.x86_64
boost-python-1.39.0-9.fc12.x86_64
# 
で、既に boost-filesystem は入っているのだから、
checking for boostlib >= 1.34.1... yes
checking whether the Boost::Filesystem library is available... yes
というエラーから見ても filesystem は適当なバージョンで入っているのでは??

http://groups.google.com/group/scribe-server/browse_thread/thread/5e5836019418fa7a
configure: error: Could not link against !
に、全然違う話だが同じエラーが記載されている。
Jon Schutz / May 5 2010, 8:02 pm
I had this a while ago (though on Fedora 12 64 bit).  From memory it was 
because the path to the boost libs was incorrect, and was fixed by 
giving the appropriate path in the options to configure/bootstrap. 
Sorry for being vague but hope this gives you something to go on.  Check 
config.log where the error occurred, copy out the C program that failed, 
and try compiling by hand using the options in the log file. 
という記事あり。
これってつまり古いパッケージには何かしら間違いがあった、ということか。
それだけなら新しいものに boost 関係を全部買えてしまえば良いのか?

nox の configure コマンドにはboost 関連のパス指定をするオプションがある。
  --with-boost[=DIR]      use boost (default is yes) - it is possible to
                          specify the root directory for boost (optional)
  --with-boost-filesystem[=special-lib]
                          use the Filesystem library from boost - it is
                          possible to specify a certain library for the linker
                          e.g. --with-boost-filesystem=boost_filesystem-gcc-mt
  --with-boost-unit-test-framework[=special-lib]
                          use the Unit_Test_Framework library from boost - it
                          is possible to specify a certain library for the
                          linker e.g.
                          --with-boost-unit-test-framework=boost_unit_test_framework-gcc

しかし ../configure --with-boost=/home/hoge/boost_1_47_0 などとしてみても状況は同じ。はて?

# ../configure --with-boost-filesystem=/home/hoge/boost_1_47_0/stage/lib/lbbioost_filesystem.a
でやると、今度はエラーの状況が変わった。
checking for boostlib >= 1.34.1... yes
checking whether the Boost::Filesystem library is available... yes
checking for exit in -l/home/hoge/boost_1_47_0/stage/lib/lbbioost_filesystem.a... no
checking for exit in -lboost_filesystem-/home/hoge/boost_1_47_0/stage/lib/lbbioost_filesystem.a... no
configure: error: Could not link against boost_filesystem-/home/hoge/boost_1_47_0/stage/lib/lbbioost_filesystem.a !
というわけでファイルが無いと怒るらしい。
次、
../configure --with-boost-filesystem=boost_filesystem
にするとちょっと先まで進んだ。
checking for boostlib >= 1.34.1... yes
checking whether the Boost::Filesystem library is available... yes
checking for exit in -lboost_filesystem... yes
checking pcap.h usability... yes
checking pcap.h presence... yes
....
checking whether the Boost::Unit_Test_Framework library is available... yes
configure: error: Could not link against boost_filesystem !
# 
今度は boost のテストツールか。
../configure --with-boost-filesystem=boost_filesystem --with-boost-unit-test-framework=boost_unit_test_framework
とやると、これで越えた。
(しかしどのディレクトリの libboost_filesystem.a や libboost_unit_test_framework.a を見に行っているかは確信無し。)
今回はとりあえず名前を /home/hoge/boost_1_47_0/stage/lib から適当に選んだだけに過ぎない。はて。
make
結局前節の ./configure は 
../configure --with-boost-filesystem=boost_filesystem --with-boost-unit-test-framework=boost_unit_test_framework
とすることで抜けた。
次に make -j 5 としてコンパイル。

が、エラーが出た。現象は以下と同じ。
http://noxrepo.org/pipermail/nox-dev/2011-March/007384.html
で、対処としてはここの 
3) Manually edit tablog.cc.  I count three errors: lines 369, 420, and
426.  Each of these calls a function and passes in fs::native as the
last argument.  I think you can just remove that argument.
をそのまま実施。

それで少し進んだけれど、しかし
./builtin/.libs/libbuiltin.so: undefined reference to `boost::filesystem3::detail::dir_itr_close(void*&, void*&)'
./builtin/.libs/libbuiltin.so: undefined reference to `boost::filesystem3::directory_entry::m_get_status(boost::system::error_code*) const'
collect2: ld returned 1 exit status
となり、リンクでエラー。undefined reference?? これは上の記述の
2) Set the preprocessor macro BOOST_FILESYSTEM_VERSION to 2.
が、より適切な解だったと言う事か。

直前の reply に
Is this the zaku branch?  The first thing I'd try is seeing if the
destiny branch works (zaku will have other problems on 10.10 anyway).
というのもあり、こりゃ zaku をやめろということか?

# BOOST_FILESYSTEM_VERSION=2
# echo $BOOST_FILESYSTEM_VERSION
2
# export BOOST_FILESYSTEM_VERSION
# make -j 5

これでも直らなかったので boost を手で入れた(1.47.0)のが悪かったと推定。
http://noxrepo.org/pipermail/nox-dev/2011-March/007384.html には
I believe NOX currently works fine with semi-recent versions up to 1.40, and
possibly has very minor problems with 1.42 (maybe only on 64 bit?). 
とあるのでね。(これが正解だった)

手で入れた boost 1.47 には uninstall script がないので、/usr/local/include/boost と 
/usr/local/lib/libboost* を手で削除して、再度 nox を git から取ってきて build にトライ。
fedora 12 標準の boost は 1.39 なので、たぶん問題ない。
(BOOST_FILESYSTEM_VERSION は unset した)

# git clone git://noxrepo.org/nox
# cd nox
# ./boot.sh 
# mkdir build
# cd build
# ../configure --with-boost-filesystem=boost_filesystem --with-boost-unit-test-framework=boost_unit_test_framework
(./configure はするっと通る。さすが。)
# make -j 5 
..... かなり時間が掛かる。。。。
make[2]: Leaving directory `/home/hoge/nox/build'
make[1]: Leaving directory `/home/hoge/nox/build'
#
うぉ!通った!
ディレクトリ位置の注意
http://noxrepo.org/noxwiki/index.php/NOX_Installation の Verify Installation によると、
・nox 本体はこの build/src 以下にバイナリが出来る
・これは移動不可で、
・実行もこのディレクトリからでないとだめ
ということになっている。ちょっと変わってる。

NOX の起動

http://noxrepo.org/noxwiki/index.php/Using_NOX の Using NOX を見ながら作業。

バージョン確認は -V で。zaku (unstable)だった。
# cd /home/hoge/nox/build/src
# ./nox_core -V
NOX 0.9.0(zaku)~full~beta (nox_core), compiled Jul 19 2011 19:55:26
Compiled with OpenFlow 0x01 
# 
ディレクトリ位置の注意
やはり NOX は build/src ディレクトリから ./nox_core で起動されなければならない、らしい。

# pwd
/home/hoge/nox/build/src
# ./nox_core -v -i ptcp:6633
00001|nox|INFO:Starting nox_core (/home/hoge/nox/build/src/.libs/lt-nox_core)
00002|kernel|DBG:Assigned a new UUID for the container: 8351905445277066603
00003|pyrt|DBG:Loading a component description file 'nox/coreapps/examples/t/meta.json'.
00004|pyrt|DBG:Loading a component description file 'nox/coreapps/examples/meta.json'.
00005|pyrt|DBG:Loading a component description file 'nox/coreapps/snmp/meta.json'.
00006|pyrt|DBG:Loading a component description file 'nox/coreapps/coretests/meta.json'.
00007|pyrt|DBG:Loading a component description file 'nox/coreapps/messenger/meta.json'.
00008|pyrt|DBG:Loading a component description file 'nox/coreapps/simple_c_py_app/meta.json'.
00009|pyrt|DBG:Loading a component description file 'nox/coreapps/testharness/meta.json'.
00010|pyrt|DBG:Loading a component description file 'nox/coreapps/simple_c_app/meta.json'.
00011|pyrt|DBG:Loading a component description file 'nox/coreapps/hub/meta.json'.
00012|pyrt|DBG:Loading a component description file 'nox/coreapps/pyrt/meta.json'.
00013|pyrt|DBG:Loading a component description file 'nox/coreapps/switch/meta.json'.
00014|pyrt|DBG:Loading a component description file 'nox/netapps/hoststate/meta.json'.
00015|pyrt|DBG:Loading a component description file 'nox/netapps/bindings_storage/t/meta.json'.
00016|pyrt|DBG:Loading a component description file 'nox/netapps/bindings_storage/meta.json'.
00017|pyrt|DBG:Loading a component description file 'nox/netapps/switchstats/meta.json'.
00018|pyrt|DBG:Loading a component description file 'nox/netapps/networkstate/meta.json'.
00019|pyrt|DBG:Loading a component description file 'nox/netapps/routing/meta.json'.
00020|pyrt|DBG:Loading a component description file 'nox/netapps/user_event_log/meta.json'.
00021|pyrt|DBG:Loading a component description file 'nox/netapps/discovery/meta.json'.
00022|pyrt|DBG:Loading a component description file 'nox/netapps/storage/t/meta.json'.
00023|pyrt|DBG:Loading a component description file 'nox/netapps/storage/meta.json'.
00024|pyrt|DBG:Loading a component description file 'nox/netapps/tablog/meta.json'.
00025|pyrt|DBG:Loading a component description file 'nox/netapps/lavi/meta.json'.
00026|pyrt|DBG:Loading a component description file 'nox/netapps/tests/meta.json'.
00027|pyrt|DBG:Loading a component description file 'nox/netapps/route/meta.json'.
00028|pyrt|DBG:Loading a component description file 'nox/netapps/authenticator/meta.json'.
00029|pyrt|DBG:Loading a component description file 'nox/netapps/flow_fetcher/meta.json'.
00030|pyrt|DBG:Loading a component description file 'nox/netapps/topology/meta.json'.
00031|pyrt|DBG:Loading a component description file 'nox/netapps/switch_management/meta.json'.
00032|pyrt|DBG:Loading a component description file 'nox/netapps/data/meta.json'.
00033|pyrt|DBG:Loading a component description file 'nox/webapps/webservice/meta.json'.
00034|pyrt|DBG:Loading a component description file 'nox/webapps/miscws/meta.json'.
00035|pyrt|DBG:Loading a component description file 'nox/webapps/webserver/meta.json'.
00036|nox|DBG:Application installation report:
00037|nox|DBG:python:
	Current state: INSTALLED
	Required state: INSTALLED
	Dependencies: 

00038|nox|DBG:built-in DSO deployer:
	Current state: INSTALLED
	Required state: INSTALLED
	Dependencies: 

00039|nox|DBG:built-in event dispatcher:
	Current state: INSTALLED
	Required state: INSTALLED
	Dependencies: 

00040|openflow|DBG:Passive tcp interface bound to port 6633
00041|nox|INFO:nox bootstrap complete

で、止まった。これで動いてるらしい。
telnet で 6633 ポートにつなぐと接続され、サーバ(nox)側に以下のメッセージが出た。
00042|openflow|DBG:Passive tcp interface received connection 
00043|nox|WARN:stream: closing connection due to timeout after 5 seconds in sending features request state 
L2 スイッチとしての起動
MAC learning switch として機能させるにはこんなことをする、と書いてあるが良く分からない、、、
./nox_core -v -i ptcp:6633 pyswitch  
と思ったら、どうも pyswitch.py を使って動作する、ということらしい。
./nox/coreapps/examples/pyswitch.py にファイルあり。

「Using NOX in an Openflow network」に期待したけど、あまり大したことは書いてない。

http://blog.bitmeister.jp/?p=2176 に少し解説あり。
OpenFlowで、なんちゃって負荷分散を実装してみた[NOXインストール編]

Open vSwitch との連動

NOX を pyswitch を用いて起動
# cd /home/hoge/nox/build/src 
# ./nox_core -v -i ptcp:6633 pyswitch 
で NOX を単純スイッチとして起動しておく。ログに新たに以下の一行が追加された。これか。 
00035|pycomponent|DBG:Importing Python module nox.coreapps.examples.pyswitch

pyswitch は接続されたすべての OpenFlow スイッチを単純な L2 MAC learning switch として設定する。
つまり冒頭の図であれば、二台の PC はともに外部(インターネット上)のホストと通信できるようになる。
OpenFlow daemon の起動
この状態で ovs-openflowd を起動する。
# ovs-openflowd netdev@br0 --ports=eth0,eth1,eth3 tcp:127.0.0.1
これだけで OpenFlow switch として動作する。
なお br0 は任意の名前で良い。

以下に openflowd 起動時のログを示す。

・openflowd 側
# ovs-openflowd netdev@br0 --ports=eth0,eth1 tcp:127.0.0.1
Jul 20 11:30:36|00001|openflowd|INFO|Open vSwitch version 1.1.1
Jul 20 11:30:36|00002|openflowd|INFO|OpenFlow protocol version 0x01
Jul 20 11:30:36|00003|ofproto|INFO|using datapath ID 0000002320a43f4a <<< データパス ID (スイッチ ID)
Jul 20 11:30:36|00004|rconn|INFO|br0<->tcp:127.0.0.1: connecting...
Jul 20 11:30:36|00005|rconn|INFO|br0<->tcp:127.0.0.1: connected
Jul 20 11:30:36|00006|ofp_util|WARN|received Nicira extension message of unknown type 8
Jul 20 11:30:36|00007|ofp_util|INFO|normalization changed ofp_match, details:
Jul 20 11:30:36|00008|ofp_util|INFO| pre: wildcards=0xffffffff  in_port=    0  dl_src=00:00:00:00:00:00  dl_dst=00:00:00:00:00:00  dl_vlan=    0  dl_vlan_pcp=  0  dl_type=     0  nw_tos=   0  nw_proto=   0  nw_src=         0  nw_dst=         0  tp_src=    0  tp_dst=    0
Jul 20 11:30:36|00009|ofp_util|INFO|post: wildcards= 0x23fffff  in_port=    0  dl_src=00:00:00:00:00:00  dl_dst=00:00:00:00:00:00  dl_vlan=    0  dl_vlan_pcp=  0  dl_type=     0  nw_tos=   0  nw_proto=   0  nw_src=         0  nw_dst=         0  tp_src=    0  tp_dst=    0
Jul 20 11:52:20|00010|dpif_linux|ERR|Generic Netlink family 'odp_datapath' does not exist. The Open vSwitch kernel module is probably not loaded. <<< この状態でじーっとする
^C <<< 停止してみた
#

・NOX 側
openflowd から接続されたときのログ
01748|openflow|DBG:Passive tcp interface received connection 
01749|openflow|DBG:stream: negotiated OpenFlow version 0x01 (we support versions 0x01 to 0x01 inclusive, peer no later than version 0x01)
01750|nox|DBG:Success sending in 'sending switch config'
01751|nox|DBG:Success sending in 'receiving features reply'
01752|nox|DBG:Success receiving in 'receiving features reply'
01753|nox|DBG:Success sending in 'receiving ofmp capability reply'
01754|nox|DBG:Success receiving in 'receiving ofmp capability reply'
01755|nox|DBG:Datapath 002320c8bc41 sent error in response to capability reply, assuming no management support
01756|nox|DBG:No switch auth module registered, auto-approving switch
01757|nox|DBG:Registering switch with DPID = 2320c8bc41 << スイッチが通知したデータパス ID 
01758|nox.coreapps.examples.pyswitch|INFO:Switch 2320c8bc41 has joined the network
01759|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60) << 1 パケごとにこんなログが出る
01760|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60)

切断したときのログ
01745|openflow|WARN:stream: connection closed by peer
01746|nox|WARN:stream: connection closed by peer
01747|nox.coreapps.examples.pyswitch|INFO:Switch 2320a43f4a has left the network

ovs-ofctl による Openflow switch の状態確認

ovs-ofctl コマンドの機能
--help によるコマンド一覧(主要なものだけ)
ovs-ofctl: OpenFlow switch management utility
usage: ovs-ofctl [OPTIONS] COMMAND [ARG...]

For OpenFlow switches:
  show SWITCH                 show OpenFlow information
  dump-desc SWITCH            print switch description
  dump-tables SWITCH          print table stats
  mod-port SWITCH IFACE ACT   modify port behavior
  dump-ports SWITCH [PORT]    print port statistics
  dump-flows SWITCH           print all flow entries
  dump-flows SWITCH FLOW      print matching FLOWs
  dump-aggregate SWITCH       print aggregate flow statistics
  dump-aggregate SWITCH FLOW  print aggregate stats for FLOWs
  queue-stats SWITCH [PORT [QUEUE]]  dump queue stats
  add-flow SWITCH FLOW        add flow described by FLOW
  add-flows SWITCH FILE       add flows from FILE
  mod-flows SWITCH FLOW       modify actions of matching FLOWs
  del-flows SWITCH [FLOW]     delete matching FLOWs
  monitor SWITCH [MISSLEN]    print packets received from SWITCH
スイッチの状態確認 show
# ovs-ofctl show br0
OFPT_FEATURES_REPLY (xid=0x1): ver:0x1, dpid:0000002320a43f4a
n_tables:2, n_buffers:256
features: capabilities:0x87, actions:0xfff
 1(eth1): addr:00:50:43:00:e1:3b, config: 0, state:0
     current:    1GB-FD COPPER AUTO_NEG 
     advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-HD 1GB-FD COPPER AUTO_NEG 
     supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-HD 1GB-FD COPPER AUTO_NEG 
 2(eth0): addr:00:50:43:00:e3:47, config: 0, state:0
     current:    100MB-FD COPPER AUTO_NEG 
     advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-HD 1GB-FD COPPER AUTO_NEG 
     supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-HD 1GB-FD COPPER AUTO_NEG 
 LOCAL(br0): addr:b6:89:66:bd:48:61, config: 0x1, state:0x1
     current:    10MB-FD COPPER 
OFPT_GET_CONFIG_REPLY (xid=0x3): frags=normal miss_send_len=0
# 
スイッチ記述 dump-desc
# ovs-ofctl dump-desc br0
OFPST_DESC reply (xid=0x1):
Manufacturer: Nicira Networks, Inc.
Hardware: Open vSwitch
Software: 1.1.1
Serial Num: None
DP Description: None
#
へええ。ハードが Open vSwitch なのに製造者が Nicira になってる。へええ。
テーブルダンプ dump-tables
# ovs-ofctl dump-tables br0
OFPST_TABLE reply (xid=0x1): 1 tables
  0: classifier: wild=0x3fffff, max=1048576, active=9
               lookup=0, matched=0
#
ポート情報ダンプ dump-ports
# ovs-ofctl dump-ports br0
OFPST_PORT reply (xid=0x1): 3 ports
  port  2: rx pkts=33, bytes=5785, drop=0, errs=0, frame=0, over=0, crc=0 << show コマンドで 1, 2 番などがついてる
           tx pkts=730, bytes=56061, drop=0, errs=0, coll=0
  port 65534: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0  << これ localport だね。
           tx pkts=723, bytes=57908, drop=0, errs=0, coll=0
  port  1: rx pkts=718, bytes=55125, drop=0, errs=0, frame=0, over=0, crc=0
           tx pkts=39, bytes=6253, drop=0, errs=0, coll=0
#
フロー情報出力 dump-flows
# ovs-ofctl dump-flows br0
NXST_FLOW reply (xid=0x4):
# この時はフローがなかった。ので ping bakkers.gr.jp (61.194.20.172) をやって再び dump-flows を実行。

# ovs-ofctl dump-flows br0
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=5.382s, table_id=0, n_packets=1, n_bytes=238, idle_timeout=5,udp,in_port=1,vlan_tci=0x0000,dl_src=00:16:01:71:79:ea,dl_dst=00:03:47:89:8f:e5,nw_src=192.168.12.1,nw_dst=192.168.12.47,tp_src=53,tp_dst=42413 actions=output:2
 cookie=0x0, duration=5.427s, table_id=0, n_packets=1, n_bytes=86, idle_timeout=5,udp,in_port=2,vlan_tci=0x0000,dl_src=00:03:47:89:8f:e5,dl_dst=00:16:01:71:79:ea,nw_src=192.168.12.47,nw_dst=192.168.12.1,tp_src=42413,tp_dst=53 actions=output:1
 cookie=0x0, duration=5.483s, table_id=0, n_packets=5, n_bytes=490, idle_timeout=5,icmp,in_port=2,vlan_tci=0x0000,dl_src=00:03:47:89:8f:e5,dl_dst=00:16:01:71:79:ea,nw_src=192.168.12.47,nw_dst=61.194.20.172,icmp_type=8,icmp_code=0 actions=output:1
 cookie=0x0, duration=5.429s, table_id=0, n_packets=5, n_bytes=490, idle_timeout=5,icmp,in_port=1,vlan_tci=0x0000,dl_src=00:16:01:71:79:ea,dl_dst=00:03:47:89:8f:e5,nw_src=61.194.20.172,nw_dst=192.168.12.47,icmp_type=0,icmp_code=0 actions=output:2
 cookie=0x0, duration=5.485s, table_id=0, n_packets=1, n_bytes=180, idle_timeout=5,udp,in_port=1,vlan_tci=0x0000,dl_src=00:16:01:71:79:ea,dl_dst=00:03:47:89:8f:e5,nw_src=192.168.12.1,nw_dst=192.168.12.47,tp_src=53,tp_dst=46475 actions=output:2
#
これってつまり DNS の UDP と ICMP のそれぞれ往復が記録されているんだな。
ovs-ofctl dump-flows br0 icmp などとマッチングパターンを指定して取ってくることも出来る模様。
ところでこのテーブル、あっというまに消える。厄介だ。
パケット、バイトカウント集約 dump-aggregate
# ovs-ofctl dump-aggregate br0
NXST_AGGREGATE reply (xid=0x4): packet_count=0 byte_count=0 flow_count=0
# 
という感じ。これ、ping している間に何度か繰り返してみる。
NXST_AGGREGATE reply (xid=0x4): packet_count=7 byte_count=868 flow_count=5  << カウントされた
NXST_AGGREGATE reply (xid=0x4): packet_count=11 byte_count=1260 flow_count=5 << 追加されている模様
NXST_AGGREGATE reply (xid=0x4): packet_count=16 byte_count=1568 flow_count=2 << まだ追加。このあたりで ping を停止したところ、
NXST_AGGREGATE reply (xid=0x4): packet_count=0 byte_count=0 flow_count=0 << あっというまにゼロになる。あれれえ。
フローカウントが無くなるタイミングをよく見ないと駄目だなあ。
フローテーブルの expire
ping によるフローテーブルへの追加については NOX 側にほとんどログが出ない。
が、expire はどうやら出るらしい。
01790|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60)
01791|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60)
01792|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60)
01793|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60)
01794|openflow-event|DBG:received flow expired event from 002320c8bc41
01795|openflow-event|DBG:received flow expired event from 002320c8bc41
01796|openflow-event|DBG:received flow expired event from 002320c8bc41
01797|openflow-event|DBG:received flow expired event from 002320c8bc41
01798|openflow-event|DBG:received flow expired event from 002320c8bc41
01799|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60)
01800|openflow-event|DBG:received packet-in event from 002320c8bc41 (len:60)

以上で NOX をインストールし、Open vSwitch と連携させた L2 switch の動作確認ができた。



Yutaka Yasuda (yasuda [ at ] ylb.jp)