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 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_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 on_flow_mod(self, evt): """ Process FlowMod event """ mod = evt.msg if fibclog.dump_msg(): _LOG.debug("%s", mod) try: dpath, mode = _find_dp_by_re_id(mod.re_id) if dpath is not None: fibccnv.conv_flow(mod, fibcdbm.portmap()) func = ofc.flow(mode, mod.table) func(dpath, mod, ofctl) sleep(_SEND_MOD_WAIT_SEC) except Exception as expt: _LOG.exception(expt)