Exemplo n.º 1
0
    def test_vlan(self):
        flow = pb.VLANFlow(match=pb.VLANFlow.Match(
            in_port=1,
            vid=_VID,
            vid_mask=_VID_MASK,
        ),
                           actions=[],
                           goto_table=pb.FlowMod.TERM_MAC)
        mod = pb.FlowMod(cmd="ADD",
                         table=pb.FlowMod.VLAN,
                         re_id=_RE_ID,
                         vlan=flow)

        p = fibcdbm.FIBCPortEntry.new(name=_IFNAME,
                                      port=2,
                                      dp_id=_DP_ID,
                                      re_id=_RE_ID)
        portmap = Mock(spec=fibcdbm.FIBCDbPortMapTable)
        portmap.find_by_vm.return_value = p
        portmap.lower_port.return_value = p

        #exec
        fibccnv.conv_flow(mod, portmap)

        #check
        self.assertEqual(mod.cmd, pb.FlowMod.ADD)
        self.assertEqual(mod.table, pb.FlowMod.VLAN)
        self.assertEqual(mod.re_id, _RE_ID)
        self.assertEqual(mod.vlan.match.in_port, 2)
        self.assertEqual(mod.vlan.match.vid, _VID)
        self.assertEqual(mod.vlan.match.vid_mask, _VID_MASK)
        self.assertEqual(len(mod.vlan.actions), 0)
        self.assertEqual(mod.vlan.goto_table, pb.FlowMod.TERM_MAC)
Exemplo n.º 2
0
 def test_new(self):
     match = pb.MPLSFlow.Match(bos=1, label=10017)
     actions = [
         pb.MPLSFlow.Action(name="POP_LABEL", value=0)
     ]
     flow = pb.MPLSFlow(match=match, actions=actions, goto_table=60, g_type=pb.GroupMod.MPLS_INTERFACE, g_id=1)
     mod = pb.FlowMod(cmd="ADD", table="MPLS1", mpls1=flow)
Exemplo n.º 3
0
    def test_term_mac(self):
        flow = pb.TerminationMacFlow(match=pb.TerminationMacFlow.Match(
            in_port=1, eth_type=0x0800, eth_dst=_ETH_DST, vlan_vid=_VID),
                                     actions=[],
                                     goto_table=pb.FlowMod.UNICAST_ROUTING)
        mod = pb.FlowMod(cmd="ADD",
                         table=pb.FlowMod.TERM_MAC,
                         re_id=_RE_ID,
                         term_mac=flow)

        p = fibcdbm.FIBCPortEntry.new(name=_IFNAME,
                                      port=2,
                                      dp_id=_DP_ID,
                                      re_id=_RE_ID)
        portmap = Mock(spec=fibcdbm.FIBCDbPortMapTable)
        portmap.find_by_vm.return_value = p
        portmap.lower_port.return_value = p

        #exec
        fibccnv.conv_flow(mod, portmap)

        #check
        self.assertEqual(mod.cmd, pb.FlowMod.ADD)
        self.assertEqual(mod.table, pb.FlowMod.TERM_MAC)
        self.assertEqual(mod.re_id, _RE_ID)
        self.assertEqual(mod.term_mac.match.in_port, 2)
        self.assertEqual(mod.term_mac.match.eth_type, 0x0800)
        self.assertEqual(mod.term_mac.match.eth_dst, _ETH_DST)
        self.assertEqual(mod.term_mac.match.vlan_vid, _VID)
        self.assertEqual(len(mod.term_mac.actions), 0)
        self.assertEqual(mod.term_mac.goto_table, pb.FlowMod.UNICAST_ROUTING)
Exemplo n.º 4
0
def setup_flow(dpath, mod, ofctl):
    """
    Setup flows.
    """
    _LOG.debug("Default FLow: %d %s", dpath.id, mod)

    matches = [
        fibcapi.new_policy_acl_match(eth_type=fibcapi.ETHTYPE_LACP),
        fibcapi.new_policy_acl_match(eth_type=fibcapi.ETHTYPE_ARP),
        fibcapi.new_policy_acl_match(eth_type=0x0800,
                                     ip_dst=fibcapi.MCADDR_ALLROUTERS),
        fibcapi.new_policy_acl_match(eth_type=0x0800,
                                     ip_dst=fibcapi.MCADDR_OSPF_HELLO),
        fibcapi.new_policy_acl_match(eth_type=0x0800,
                                     ip_dst=fibcapi.MCADDR_OSPF_ALLDR),
        fibcapi.new_policy_acl_match(eth_type=0x86dd,
                                     ip_dst=fibcapi.MCADDR6_I_LOCAL),
        fibcapi.new_policy_acl_match(eth_type=0x86dd,
                                     ip_dst=fibcapi.MCADDR6_L_LOCAL),
        fibcapi.new_policy_acl_match(eth_type=0x86dd,
                                     ip_dst=fibcapi.MCADDR6_S_LOCAL),
        fibcapi.new_policy_acl_match(eth_type=0x86dd,
                                     ip_dst=fibcapi.UCADDR6_L_LOCAL),
        fibcapi.new_policy_acl_match(eth_dst=fibcapi.HWADDR_ISIS_LEVEL1),
        fibcapi.new_policy_acl_match(eth_dst=fibcapi.HWADDR_ISIS_LEVEL2),
    ]
    action = fibcapi.new_policy_acl_action("OUTPUT")

    for match in matches:
        acl = pb.PolicyACLFlow(match=match, action=action)
        mod = pb.FlowMod(cmd="ADD", table="POLICY_ACL", re_id="", acl=acl)

        dpath.send_msg(pb.FLOW_MOD, mod)
Exemplo n.º 5
0
def parse_flow_mod(data):
    """
    Parse binary data (pb.FlowMod)
    """
    msg = pb.FlowMod()
    msg.ParseFromString(data)
    return msg
Exemplo n.º 6
0
    def test_bridging(self):
        flow = pb.BridgingFlow(action=pb.BridgingFlow.Action(
            name=pb.PolicyACLFlow.Action.OUTPUT,
            value=1,
        ))
        mod = pb.FlowMod(
            cmd="ADD",
            table=pb.FlowMod.BRIDGING,
            re_id=_RE_ID,
            bridging=flow,
        )
        p = fibcdbm.FIBCPortEntry.new(name=_IFNAME,
                                      port=2,
                                      dp_id=_DP_ID,
                                      re_id=_RE_ID)
        portmap = Mock(spec=fibcdbm.FIBCDbPortMapTable)
        portmap.find_by_vm.return_value = p
        portmap.lower_port.return_value = p

        # exec
        fibccnv.conv_flow(mod, portmap)
        # print mod

        # check
        self.assertEqual(mod.cmd, pb.FlowMod.ADD)
        self.assertEqual(mod.table, pb.FlowMod.BRIDGING)
        self.assertEqual(mod.re_id, _RE_ID)
        self.assertEqual(mod.bridging.action.name,
                         pb.PolicyACLFlow.Action.OUTPUT)
        self.assertEqual(mod.bridging.action.value, 2)
Exemplo n.º 7
0
    def test_new(self):
        match = pb.TerminationMacFlow.Match(eth_type=0x0800, eth_dst="11:22:33:44:55:66")
        actions = []
        flow = pb.TerminationMacFlow(match=match, actions=actions, goto_table=30)
        mod = pb.FlowMod(cmd="ADD", table="TERM_MAC", term_mac=flow)

        b = mod.SerializeToString()
        m = api.parse_flow_mod(b)

        self.assertEqual(str(mod), str(m))
Exemplo n.º 8
0
    def _mod_flow_termmac(self, msg):
        re_id = msg["re_id"]
        cmd = msg["cmd"]
        for arg in msg["args"]:
            match = pb.TerminationMacFlow.Match(eth_type=arg["eth_type"], eth_dst=arg["eth_dst"])
            flow = pb.TerminationMacFlow(match=match, actions=[], goto_table=arg["goto"])
            mod = pb.FlowMod(cmd=cmd, re_id=re_id, table="TERM_MAC", term_mac=flow)
            evt = fibcevt.EventFIBCFlowMod(mod)

            self.app.send_event_to_observers(evt)
Exemplo n.º 9
0
    def test_new(self):
        m = pb.VLANFlow.Match(in_port = 1, vid = 10)
        a = [
            pb.VLANFlow.Action(name="SET_VLAN_VID", value=10),
            pb.VLANFlow.Action(name="SET_VRF", value=1)
        ]
        flow = pb.VLANFlow(match=m, actions=a, goto_table=20)
        mod = pb.FlowMod(cmd="ADD", table="VLAN", vlan=flow)

        b = mod.SerializeToString()
        m = api.parse_flow_mod(b)

        self.assertEqual(str(mod), str(m))
Exemplo n.º 10
0
    def _mod_flow_unicast(self, msg):
        re_id = msg["re_id"]
        cmd = msg["cmd"]
        for arg in msg["args"]:
            match = pb.UnicastRoutingFlow.Match(ip_dst=arg["dst"], vrf=arg["vrf"])
            flow = pb.UnicastRoutingFlow(match=match,
                                         action=None,
                                         g_type=arg.get("g_type", "UNSPEC"),
                                         g_id=arg.get("g_id", 0))
            mod = pb.FlowMod(cmd=cmd, re_id=re_id, table="UNICAST_ROUTING", unicast=flow)
            evt = fibcevt.EventFIBCFlowMod(mod)

            self.app.send_event_to_observers(evt)
Exemplo n.º 11
0
    def _mod_flow_acl(self, msg):
        re_id = msg["re_id"]
        cmd = msg["cmd"]
        for arg in msg["args"]:
            match = pb.PolicyACLFlow.Match(ip_dst=arg["dst"],
                                           vrf=arg.get("vrf", 0))
            action = pb.PolicyACLFlow.Action(name="OUTPUT", value=0)
            flow = pb.PolicyACLFlow(match=match, action=action)
            mod = pb.FlowMod(cmd=cmd,
                             re_id=re_id,
                             table="POLICY_ACL",
                             acl=flow)
            evt = fibcevt.EventFIBCFlowMod(mod)

            self.app.send_event_to_observers(evt)
Exemplo n.º 12
0
    def _mod_flow_mpls1(self, msg):
        re_id = msg["re_id"]
        cmd = msg["cmd"]
        for arg in msg["args"]:
            match = pb.MPLSFlow.Match(bos=arg["bos"], label=arg["label"])
            actions = []
            for name in ("SET_VRF", "POP_LABEL"):
                if name in arg:
                    actions.append(pb.MPLSFlow.Action(name=name, value=arg[name]))
            flow = pb.MPLSFlow(match=match,
                               actions=actions,
                               g_type=arg.get("g_type", "UNSPEC"),
                               g_id=arg.get("g_id", 0),
                               goto_table=arg["goto"])
            mod = pb.FlowMod(cmd=cmd, re_id=re_id, table="MPLS1", mpls1=flow)
            evt = fibcevt.EventFIBCFlowMod(mod)

            self.app.send_event_to_observers(evt)
Exemplo n.º 13
0
    def _mod_flow_vlan(self, msg):
        re_id = msg["re_id"]
        cmd = msg["cmd"]
        for arg in msg["args"]:
            match = pb.VLANFlow.Match(in_port=arg["port"],
                                      vid=arg.get("vid", 0),
                                      vid_mask=arg.get("mask", 0))

            actions = []
            if arg["vrf"] != 0:
                actions.append(pb.VLANFlow.Action(name="SET_VRF", value=arg["vrf"]))
            if "new_vid" in arg:
                actions.append(pb.VLANFlow.Action(name="PUSH_VLAN", value=arg["new_vid"]))

            flow = pb.VLANFlow(match=match, actions=actions, goto_table=20)
            mod = pb.FlowMod(cmd=cmd, re_id=re_id, table="VLAN", vlan=flow)
            evt = fibcevt.EventFIBCFlowMod(mod)

            self.app.send_event_to_observers(evt)