Hi Iwase,

Your example works well. Thank you so much !


--------
Takao Magoori



2015-10-14 10:44 GMT+09:00 Yusuke Iwase <[email protected]>:
> Hi,
>
> First, OVS does not support OF1.5 enough.
> So there are many TODO on OVS GitHub page.
>   https://github.com/openvswitch/ovs/blob/master/OPENFLOW-1.1%2B.md
>
> If you want to use NXActionRegMove, you can do it with OF1.3.
>
> e.g.)
>     match = parser.OFPMatch()
>     actions = [parser.NXActionRegMove('tunnel_id', 'vlan_vid', 12)]
>     insts = [parser.OFPInstructionActions(
>         ofproto.OFPIT_APPLY_ACTIONS, actions)]
>     mod = parser.OFPFlowMod(datapath, match=match, instructions=insts)
>     datapath.send_msg(mod)
>
> # ovs-ofctl dump-flows s1
> NXST_FLOW reply (xid=0x4):
>  cookie=0x0, duration=6.982s, table=0, n_packets=2, n_bytes=140, idle_age=5, 
> actions=move:NXM_NX_TUN_ID[0..11]->OXM_OF_VLAN_VID[]
>
> Thanks,
> Iwase
>
>
> On 2015年10月13日 14:13, Takao Magoori wrote:
>> Hi all,
>>
>> As follows, I want to send an OFPFlowMod message, which has an action
>> to copy lower 12 bits tunnel_id into vlan_vid (On OVS, which is
>> equivalent to"move:NXM_NX_TUN_ID[0..11]->NXM_OF_VLAN_TCI[0..11]" ).
>>
>> But in case of NXActionRegMove,  OFPET_BAD_ACTION
>> (OFPBAC_BAD_EXP_TYPE) error occurs.
>> In case of OFPActionCopyField, OFPET_BAD_ACTION (OFPBAC_BAD_LEN) error 
>> occurs.
>> Is there a way to do " move:src[start..end]->dst[start..end]" on Ryu
>> application ?
>>
>> Ryu version: 3.26
>>
>> #### ovs add-br command
>> $ sudo ovs-vsctl --may-exist add-br testbr0 \
>> -- set bridge testbr0 protocols=OpenFlow15 fail-mode=secure \
>> -- set-controller testbr0 tcp:127.0.0.1:6633
>>
>>
>> ##### test application source code ####
>> import functools
>> from ryu.base import app_manager
>> from ryu.controller import ofp_event
>> from ryu.controller import handler
>> from ryu.ofproto import ofproto_v1_5
>>
>> OVS_IN_PORT = 0xfff8
>>
>> class TestApp(app_manager.RyuApp):
>>
>>     OFP_VERSIONS = [ofproto_v1_5.OFP_VERSION]
>>
>>     @handler.set_ev_cls(
>>         ofp_event.EventOFPSwitchFeatures,
>>         handler.CONFIG_DISPATCHER,
>>     )
>>     def handle_ovs_switch_features(self, event):
>>         datapath = event.msg.datapath
>>         ofproto = datapath.ofproto
>>         ofparser = datapath.ofproto_parser
>>         flow_mod_factory = functools.partial(
>>             ofparser.OFPFlowMod,
>>             datapath=datapath,
>>             # cookie=0xf00,
>>             command=ofproto.OFPFC_ADD,
>>         )
>>         apply_actions_factory = functools.partial(
>>             ofparser.OFPInstructionActions,
>>             type_=ofproto.OFPIT_APPLY_ACTIONS,
>>         )
>>
>>         datapath.send_msg(
>>             flow_mod_factory(
>>                 table_id=0,
>>                 priority=100,
>>                 match=ofparser.OFPMatch(
>>                     tunnel_id=(1 << 12, 0xfff << 12),
>>                 ),
>>                 instructions=[
>>                     apply_actions_factory(actions=[
>>                         ofparser.OFPActionPushVlan(),
>>                         ofparser.OFPActionSetField(
>>                             vlan_pcp=1,
>>                         ),
>>                         ofparser.NXActionRegMove(
>>                             src_field='tunnel_id', src_ofs=0,
>>                             dst_field='vlan_vid', dst_ofs=0,
>>                             n_bits=12,
>>                         ),
>>                         # ofparser.OFPActionCopyField(
>>                         #     n_bits=12,
>>                         #     src_offset=0,
>>                         #     dst_offset=0,
>>                         #     oxm_ids=[
>>                         #         ofparser.OFPOxmId('tunnel_id'),
>>                         #         ofparser.OFPOxmId('vlan_vid'),
>>                         #     ]
>>                         # ),
>>                         ofparser.NXActionResubmitTable(
>>                             in_port=OVS_IN_PORT,
>>                             table_id=20,
>>                         ),
>>                     ]),
>>                 ],
>>             ),
>>         )
>>         return
>>
>>
>> #### error message (in case of NXActionRegMove)
>> # ryu-manager --verbose testmanager
>> loading app testmanager
>> loading app ryu.controller.ofp_handler
>> instantiating app testmanager of TestApp
>> instantiating app ryu.controller.ofp_handler of OFPHandler
>> BRICK TestApp
>>   CONSUMES EventOFPSwitchFeatures
>> BRICK ofp_event
>>   PROVIDES EventOFPSwitchFeatures TO {'TestApp': {'config'}}
>>   CONSUMES EventOFPSwitchFeatures
>>   CONSUMES EventOFPPortDescStatsReply
>>   CONSUMES EventOFPEchoRequest
>>   CONSUMES EventOFPErrorMsg
>>   CONSUMES EventOFPHello
>> connected socket:<eventlet.greenio.base.GreenSocket object at
>> 0x7f911f9dd2b0> address:('127.0.0.1', 56714)
>> hello ev <ryu.controller.ofp_event.EventOFPHello object at 0x7f911f9e6d68>
>> move onto config mode
>> EVENT ofp_event->TestApp EventOFPSwitchFeatures
>> switch features ev
>> version=0x6,msg_type=0x6,msg_len=0x20,xid=0xd2da111d,OFPSwitchFeatures(auxiliary_id=0,capabilities=79,datapath_id=183359575435075,n_buffers=256,n_tables=254)
>> EventOFPErrorMsg received.
>> version=0x6, msg_type=0x1, msg_len=0x24, xid=0xd2da111f
>>  `-- msg_type: OFPT_ERROR(1)
>> OFPErrorMsg(type=0x1, code=0x6,
>> data=b'\x06\x12\x00\x18\xd2\xda\x11\x1f\x00\x0d\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00')
>>  |-- type: OFPET_BAD_REQUEST(1)
>>  |-- code: OFPBRC_BAD_LEN(6)
>>  `-- data: version=0x6, msg_type=0x12, msg_len=0x18, xid=0xd2da111f
>>      `-- msg_type: OFPT_MULTIPART_REQUEST(18)
>> EventOFPErrorMsg received.
>> version=0x6, msg_type=0x1, msg_len=0x4c, xid=0xd2da1120
>>  `-- msg_type: OFPT_ERROR(1)
>> OFPErrorMsg(type=0x2, code=0x3,
>> data=b'\x06\x0e\x00\x90\xd2\xda\x11\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x18\x80\x00\x4d\x10\x00\x00\x00\x00\x00\x00\x10\x00')
>>  |-- type: OFPET_BAD_ACTION(2)
>>  |-- code: OFPBAC_BAD_EXP_TYPE(3)
>>  `-- data: version=0x6, msg_type=0xe, msg_len=0x90, xid=0xd2da1120
>>      `-- msg_type: OFPT_FLOW_MOD(14)
>>
>>
>> #### error message (in case of OFPActionCopyField)
>> # ryu-manager --verbose testmanager
>> loading app testmanager
>> loading app ryu.controller.ofp_handler
>> instantiating app ryu.controller.ofp_handler of OFPHandler
>> instantiating app testmanager of TestApp
>> BRICK ofp_event
>>   PROVIDES EventOFPSwitchFeatures TO {'TestApp': {'config'}}
>>   CONSUMES EventOFPHello
>>   CONSUMES EventOFPSwitchFeatures
>>   CONSUMES EventOFPPortDescStatsReply
>>   CONSUMES EventOFPEchoRequest
>>   CONSUMES EventOFPErrorMsg
>> BRICK TestApp
>>   CONSUMES EventOFPSwitchFeatures
>> connected socket:<eventlet.greenio.base.GreenSocket object at
>> 0x7f1a38512278> address:('127.0.0.1', 56730)
>> hello ev <ryu.controller.ofp_event.EventOFPHello object at 0x7f1a3851fd68>
>> move onto config mode
>> EVENT ofp_event->TestApp EventOFPSwitchFeatures
>> switch features ev
>> version=0x6,msg_type=0x6,msg_len=0x20,xid=0xb8fb0c3c,OFPSwitchFeatures(auxiliary_id=0,capabilities=79,datapath_id=121704233743943,n_buffers=256,n_tables=254)
>> EventOFPErrorMsg received.
>> version=0x6, msg_type=0x1, msg_len=0x24, xid=0xb8fb0c3e
>>  `-- msg_type: OFPT_ERROR(1)
>> OFPErrorMsg(type=0x1, code=0x6,
>> data=b'\x06\x12\x00\x18\xb8\xfb\x0c\x3e\x00\x0d\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00')
>>  |-- type: OFPET_BAD_REQUEST(1)
>>  |-- code: OFPBRC_BAD_LEN(6)
>>  `-- data: version=0x6, msg_type=0x12, msg_len=0x18, xid=0xb8fb0c3e
>>      `-- msg_type: OFPT_MULTIPART_REQUEST(18)
>> EventOFPErrorMsg received.
>> version=0x6, msg_type=0x1, msg_len=0x4c, xid=0xb8fb0c3f
>>  `-- msg_type: OFPT_ERROR(1)
>> OFPErrorMsg(type=0x2, code=0x1,
>> data=b'\x06\x0e\x00\x88\xb8\xfb\x0c\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x18\x80\x00\x4d\x10\x00\x00\x00\x00\x00\x00\x10\x00')
>>  |-- type: OFPET_BAD_ACTION(2)
>>  |-- code: OFPBAC_BAD_LEN(1)
>>  `-- data: version=0x6, msg_type=0xe, msg_len=0x88, xid=0xb8fb0c3f
>>      `-- msg_type: OFPT_FLOW_MOD(14)
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Ryu-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>

------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to