OpenFlowコントローラRyuを用いてのフローエントリの設定
Ryu3.4でルールおよびアクションの実装をまとめました。スイッチはOpenvSwitchを利用しています。
ソースコードにはマッチとアクションのみを記載しました。実際にスイッチにフローエントリを書き込むには、Ryuのフローエントリ書き込みAPIであるparser.OFPFlowModの引数にマッチとアクションおよびその他必要な引数を指定します。
APIへの使用例
matchおよびactionsは下の例のように指定する。datapath,priorityは環境に応じて適切なものを設定する。
inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)] mod = parser.OFPFlowMod(datapath=datapath, priority=priority, match=match, instructions=inst) datapath.send_msg(mod)
L2のルールおよびアクション
送信元MACアドレスがaa:aa:aa:bb:bb:bbなら、宛先MACアドレスを12:34:56:78:90:abに書き換えを行う。
ソースコードの記載例
match = parser.OFPMatch(eth_src="aa:aa:aa:bb:bb:bb") actions = [parser.OFPActionSetField(eth_dst = "12:34:56:78:90:ab")]
実行結果
# ovs-ofctl dump-flows br0 NXST_FLOW reply (xid=0x4): cookie=0x0, duration=2.865s, table=0, n_packets=0, n_bytes=0, idle_age=2, priority=1,dl_src=aa:aa:aa:bb:bb:bb actions=mod_dl_dst:12:34:56:78:90:ab
VLANのルールおよびアクション
ソースコードの記載例
match.set_vlan_vid(vlanId) field = datapath.ofproto_parser.MTVlanVid(ofproto_v1_2.OXM_OF_VLAN_VID, vlanId) actions.append(datapath.ofproto_parser.OFPActionSetField(field))
実行結果
# ovs-ofctl dump-flows br0 NXST_FLOW reply (xid=0x4): cookie=0x0, duration=1.086s, table=0, n_packets=0, n_bytes=0, idle_age=1, priority=1,ip,dl_vlan=10,nw_src=1.1.1.1 actions=load:0x64->OXM_OF_VLAN_VID[]
MPLSのルールおよびアクション
MPLSラベルの値が10ならば、値が11でTTLが1であるMPLSラベルのプッシュを行う。
ソースコードの記載例
match = parser.OFPMatch(eth_type=0x8847, mpls_label=10) actions = [datapath.ofproto_parser.OFPActionPushMpls(0x8847),datapath.ofproto_parser.OFPActionSetField(mpls_label=11), datapath.ofproto_parser.OFPActionSetField(mpls_tc=1) ]
実行結果
# ovs-ofctl dump-flows br0 NXST_FLOW reply (xid=0x4): cookie=0x0, duration=1.158s, table=0, n_packets=0, n_bytes=0, idle_age=1, priority=1,mpls,mpls_label=10 actions=push_mpls:0x8847,load:0xb->OXM_OF_MPLS_LABEL[],load:0x1->OXM_OF_MPLS_TC[]
L3のルールおよびアクション
送信元IPアドレスが192.168.1.1なら、送信元IPアドレスを10.10.10.10に書き換えを行う。
ソースコードの記載例
match = parser.OFPMatch(eth_type=0x0800, ipv4_src="192.168.1.1") actions = [parser.OFPActionSetField(ipv4_src="10.10.10.10")]
実行結果
# ovs-ofctl dump-flows br0 NXST_FLOW reply (xid=0x4): cookie=0x0, duration=0.887s, table=0, n_packets=0, n_bytes=0, idle_age=0, priority=1,ip,nw_src=192.168.1.1 actions=mod_nw_src:10.10.10.10