[ovs-dev] Delete Flows matching specific cookie - OpenFlow 1.3.5 Spec support by OpenVSwitch

Darrell Ball dball at vmware.com
Tue Apr 24 01:42:57 UTC 2018


//You can verify that OVS supports deletion by cookie specification by checking these tests:

 932: ofproto.at:1746    ofproto - del flows based on cookie
 933: ofproto.at:1767    ofproto - del flows based on cookie mask

// Run the tests using “make check” like this:
sudo make check TESTSUITEFLAGS='932-933' -C _gcc

//Look at what is being tested here:
tests/ofproto.at

Thanks Darrell


On 4/23/18, 4:17 PM, "ovs-dev-bounces at openvswitch.org on behalf of Carlos Ferreira" <ovs-dev-bounces at openvswitch.org on behalf of carlosmf.pt at gmail.com> wrote:

    Hello to all
    
    According to the OpenFlow 1.3.5 spec, page 44 specifies the following:
    
    
    "Modify and delete commands can also be filtered by cookie value, if
    the cookie_mask field contains
    a value other than 0. This constraint is that the bits specified by
    the cookie_mask in both
    the cookie field of the flow mod and a flow entry’s cookie value must
    be equal. In other words,
    (flow entry.cookie&flow mod.cookie mask) == (flow mod.cookie&flow
    mod.cookie mask)."
    
    
    Now, using the Ryu python-based controller, I tried to delete a flow
    by specifying the flow's cookie value, but the procedure was not
    successful.
    
    The following code is a test-example which I used.
    
        from ryu.base.app_manager import RyuApp
        from ryu.controller.dpset import EventDP
        from ryu.controller.handler import MAIN_DISPATCHER
        from ryu.controller.handler import set_ev_cls
        from ryu.ofproto import ofproto_v1_3
        from ryu.ofproto import ether, inet
    
        class MPLS_Testing(RyuApp):
          OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
    
          @set_ev_cls(EventDP, MAIN_DISPATCHER)
          def switch_connect_event(self, ev):
            ofp_parser = ev.dp.ofproto_parser
            ofp = ev.dp.ofproto
            datapath_obj = ev.dp
            if ev.enter:
              datapath_obj.send_msg(  # Removes all flows registered in this switch.
                ofp_parser.OFPFlowMod(
                  datapath=datapath_obj,
                  table_id=ofp.OFPTT_ALL,
                  command=ofp.OFPFC_DELETE,
                  out_port=ofp.OFPP_ANY,
                  out_group=ofp.OFPG_ANY,
                )
              )
              add_label_flow = ofp_parser.OFPFlowMod(
                datapath=datapath_obj,
                cookie=1,
                table_id=0,
                command=ofp.OFPFC_ADD,
                match=ofp_parser.OFPMatch(
                  in_port=1
                ),
                instructions=[
                  ofp_parser.OFPInstructionActions(
                    ofp.OFPIT_APPLY_ACTIONS,
                    [
                      ofp_parser.OFPActionPushMpls(),
                      ofp_parser.OFPActionSetField(mpls_label=16),
                    ]
                  ),
                  ofp_parser.OFPInstructionGotoTable(table_id=1),
                ]
              )
              datapath_obj.send_msg(add_label_flow)
    
              add_label_flow2 = ofp_parser.OFPFlowMod(
                datapath=datapath_obj,
                cookie=2,
                table_id=1,
                command=ofp.OFPFC_ADD,
                match=ofp_parser.OFPMatch(
                  in_port=1
                ),
                instructions=[
                  ofp_parser.OFPInstructionActions(
                    ofp.OFPIT_APPLY_ACTIONS,
                    [
                      ofp_parser.OFPActionPushMpls(),
                      ofp_parser.OFPActionSetField(mpls_label=12),
                    ]
                  ),
                  ofp_parser.OFPInstructionGotoTable(table_id=2),
                ]
              )
              datapath_obj.send_msg(add_label_flow2)
    
              # Deletes flow with cookie equal to 2.
              datapath_obj.send_msg(
                ofp_parser.OFPFlowMod(
                  cookie=2,
                  cookie_mask=0xFFFFFFFFFFFFFFFF,
                  datapath=datapath_obj,
                  command=ofp.OFPFC_DELETE,
                  out_port=ofp.OFPP_ANY,
                  out_group=ofp.OFPG_ANY,
                )
              )
    
    Can anyone tell me if OpenVSwitch 2.9 supports cookie match when
    deleting a flow from the tables? OpenFlow 1.3.5 spec clearly states
    that a Delete command could also filter flows using the cookie value,
    when the cookie_mask is different than zero. Currently, I'm kinda lost
    here.
    
    Thank you!
    
    -- 
    
    Carlos Miguel Ferreira
    Researcher at Telecommunications Institute
    Aveiro - Portugal
    Work E-mail - cmf at av.it.pt
    Skype & GTalk -> carlosmf.pt at gmail.com
    LinkedIn -> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.linkedin.com_in_carlosmferreira&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=ND4lqlTir-Ukyp2WkESK_WJ7j0b1dAUdptpdObaFU7Y&s=saz4uZw1U4C3pxnJSK9cRxTNXucuBUokJFvgmL3P3Wg&e=
    _______________________________________________
    dev mailing list
    dev at openvswitch.org
    https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=ND4lqlTir-Ukyp2WkESK_WJ7j0b1dAUdptpdObaFU7Y&s=A8DVOVYZJhWrS-4plyLgmB6DmiB0nWaYxbqdlekjUOU&e=
    



More information about the dev mailing list