Beispiel #1
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)
Beispiel #2
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)
Beispiel #3
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)
Beispiel #4
0
    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)