Hi,

Hmmm... I don't know how to solve it.
I guess it is the constraint of the OF protocol version 1.2(?) or higher.

Thanks,
Iwase


On 2018年01月12日 12:15, Vasu Dasari wrote:
Thanks Iwase. Can you help me how to solve this use-case?

A packet which matches a source IP address 1.1.1.1 needs to have a VLAN stripped if it is present in the packet and forwarded to port "s1-eth1". This would mean that I need to have two rules with OF1.5:
1. ip,nw_src=1.1.1.1 actions=outport:"s1-eth1"
2. vlan_tci=0x1000/0x1000,ip,nw_src-1.1.1.1 actions=pop_vlan,output:"s1-eth1"

I will be using two rules to solve the use-case.

With OF 1.0 I could have achieved above with 1 rule.

I assume you might have gone through similar conundrum, I am wondering how this problem could have been solved.

Thanks
-Vasu


*Vasu Dasari*


On Thu, Jan 11, 2018 at 7:36 PM, Iwase Yusuke <iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com>> wrote:

    Hi Vasu,

    > OFPT_FLOW_MOD (OF1.3) (xid=0x6accfc95): ***decode error:
    > OFPBAC_MATCH_INCONSISTENT***
    > OFPT_ERROR (OF1.3) (xid=0x6accfc95): OFPBAC_MATCH_INCONSISTENT
    > OFPT_FLOW_MOD (OF1.3) (xid=0x6accfc95):

    The following messages shows that the match is inconsistent with the given
    actions and the FlowMod could not be accepted.

    The OpenFlow Spec 1.3.5 says on "6.4 Flow Table Modification Messages" 
section;
    ====
    If an action in a flow mod message performs an operation which is
    inconsistent with the match and prior
    actions of the flow entry, for example, a pop VLAN action with a match
    specifying no VLAN, or a set
    TTL action with a match wildcarding the Ethertype, the switch may optionally
    reject the flow mod and
    immediately return an ofp_error_msg with OFPET_BAD_ACTION type and
    OFPBAC_MATCH_INCONSISTENT
    code.
    ===

    So you need to add the "vlan_vid" match field, for example;
       vlan_vid=(ofproto_v1_3.OFPVID_PRESENT, ofproto_v1_3.OFPVID_PRESENT)
    in the arguments for OFPMatch().
    For the combination of the value/mask for the "vlan_vid" match field, please
    refer to the "NOTE" section at the following.
    
http://ryu.readthedocs.io/en/latest/ofproto_v1_3_ref.html#flow-match-structure
    
<http://ryu.readthedocs.io/en/latest/ofproto_v1_3_ref.html#flow-match-structure>

    FYI, if you specify "--verbose" option for "ryu-manager" the warning 
messages
    , which is similar to that of "ovs-ofctl snoop", should be displayed.

    Thanks,
    Iwase



    On 2018年01月12日 01:25, Vasu Dasari wrote:

        Can someone please help with a recipe on how to delete a VLAN tag if it
        exists in the packet? I want to do this OpenFlow version >1.3? Note that
        I could achieve with OF 1.0 and Ryu as highlighted below.

        I tried the following code:

              ofp_parser = ofproto_v1_3_parser
              actions = [
                  ofp_parser.OFPActionPopVlan(),
ofp_parser.OFPActionSetField(vlan_vid=ofproto_v1_3.OFPVID_PRESENT | 100),
                  ofp_parser.OFPActionOutput(3, 0)
              ]
              match = ofp_parser.OFPMatch(in_port=1)

              inst = [
                  ofp_parser.OFPInstructionActions(ofp.OFPIT_APPLY_ACTIONS, 
actions)
              ]
              m = ofp_parser.OFPFlowMod(self.dp, 0x1234, 0, 0, ofp.OFPFC_ADD, 0,
                                        0, 100, UINT32_MAX, ofp.OFPP_ANY,
                                        ofp.OFPG_ANY, 0, match, inst)

        This results in following error in OVS (got this from using "ovs-ofctl
        snoop s1 --detach"):

        OFPT_FLOW_MOD (OF1.3) (xid=0x6accfc95): ***decode error:
        OFPBAC_MATCH_INCONSISTENT***
        OFPT_ERROR (OF1.3) (xid=0x6accfc95): OFPBAC_MATCH_INCONSISTENT
        OFPT_FLOW_MOD (OF1.3) (xid=0x6accfc95):
        (***truncated to 64 bytes from 112***)
        00000000  04 0e 00 70 6a cc fc 95-00 00 00 00 00 00 12 34 
|...pj..........4|
        00000010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 64 
|...............d|
        00000020  ff ff ff ff ff ff ff ff-ff ff ff ff 00 00 00 00 
|................|
        00000030  00 01 00 0c 80 00 00 04-00 00 00 01 00 00 00 00 
|................|

        If I use ofproto_v1_1_parser, I could create the flow

              actions = [
                  ofp_parser.OFPActionStripVlan(),
                  ofp_parser.OFPActionVlanVid(100),
                  ofp_parser.OFPActionOutput(3, 0)
              ]
              match = ofp_parser.OFPMatch(in_port=1)
              m = ofp_parser.OFPFlowMod(self.dp, match, 0x1234, ofp.OFPFC_ADD,
                                        priority=100, actions=actions)

          From ovs-ofctl dump-flows:

           cookie=0x1234, duration=849.909s, table=0, n_packets=14,
        n_bytes=1008, reset_counts priority=100,in_port="s1-eth1"
        
actions=pop_vlan,push_vlan:0x8100,set_field:4196->vlan_vid,output:"s1-eth3"

        Thanks,
        -Vasu

        *Vasu Dasari*



        
------------------------------------------------------------------------------
        Check out the vibrant tech community on one of the world's most
        engaging tech sites, Slashdot.org! http://sdm.link/slashdot



        _______________________________________________
        Ryu-devel mailing list
        Ryu-devel@lists.sourceforge.net <mailto:Ryu-devel@lists.sourceforge.net>
        https://lists.sourceforge.net/lists/listinfo/ryu-devel
        <https://lists.sourceforge.net/lists/listinfo/ryu-devel>




------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot



_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to