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)
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)
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)
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)
def parse_flow_mod(data): """ Parse binary data (pb.FlowMod) """ msg = pb.FlowMod() msg.ParseFromString(data) return msg
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)
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))
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)
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))
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)
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)
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)
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)