示例#1
0
 def process_uplink_event(self, msg, phy_uplink):
     LOG.info("Received New uplink Msg %(msg)s for uplink %(uplink)s",
              {'msg': msg.get_status(), 'uplink': phy_uplink})
     if msg.get_status() == 'up':
         ovs_exc_raised = False
         ovs_exc_reason = ""
         try:
             self.ovs_vdp_obj_dict[phy_uplink] = ovs_vdp.OVSNeutronVdp(
                 phy_uplink, msg.get_integ_br(), msg.get_ext_br(),
                 msg.get_root_helper(), self.vdp_vlan_change_cb)
         except Exception as exc:
             ovs_exc_reason = str(exc)
             LOG.error("OVS VDP Object creation failed %s",
                       str(ovs_exc_reason))
             ovs_exc_raised = True
         if (ovs_exc_raised or not self.ovs_vdp_obj_dict[phy_uplink].
                 is_lldpad_setup_done()):
             # Is there a way to delete the object??
             if not ovs_exc_reason:
                 uplink_fail_reason = (self.ovs_vdp_obj_dict[phy_uplink].
                                       get_uplink_fail_reason())
             else:
                 uplink_fail_reason = ovs_exc_reason
             LOG.error("UP Event Processing NOT Complete")
             self.err_que.enqueue(constants.Q_UPL_PRIO, msg)
             self.save_uplink(uplink=self.phy_uplink,
                              fail_reason=uplink_fail_reason)
         else:
             self.uplink_det_compl = True
             veth_intf = (self.ovs_vdp_obj_dict[self.phy_uplink].
                          get_lldp_local_bridge_port())
             LOG.info("UP Event Processing Complete Saving uplink "
                      "%(ul)s and veth %(veth)s",
                      {'ul': self.phy_uplink, 'veth': veth_intf})
             self.save_uplink(uplink=self.phy_uplink, veth_intf=veth_intf)
             self.topo_disc.uncfg_intf(self.phy_uplink)
             self.topo_disc.cfg_intf(veth_intf,
                                     phy_interface=self.phy_uplink)
     elif msg.get_status() == 'down':
         # Free the object fixme(padkrish)
         if phy_uplink in self.ovs_vdp_obj_dict:
             self.ovs_vdp_obj_dict[phy_uplink].clear_obj_params()
         else:
             ovs_vdp.delete_uplink_and_flows(self.root_helper, self.br_ex,
                                             phy_uplink)
         self.save_uplink()
         self.topo_disc.uncfg_intf(self.veth_intf)
         self.topo_disc.cfg_intf(phy_uplink)
示例#2
0
 def _test_ovs_vdp_init(self):
     '''Test the init routine '''
     lldp_ovs_portnum = 14
     phy_port_num = 14
     get_br = mock.patch('networking_cisco.apps.saf.common.'
                         'dfa_sys_lib.get_bridges').start()
     is_patch = mock.patch('networking_cisco.apps.saf.common.'
                           'dfa_sys_lib.is_patch').start()
     get_peer = mock.patch('networking_cisco.apps.saf.common.'
                           'dfa_sys_lib.get_peer').start()
     self.ovs_br_add = mock.patch('networking_cisco.apps.saf.common.'
                                  'dfa_sys_lib.OVSBridge.add_flow').start()
     mock.patch(
         'networking_cisco.apps.saf.common.'
         'dfa_sys_lib.OVSBridge.add_port',
         return_value=str(lldp_ovs_portnum)).start()
     mock.patch(
         'networking_cisco.apps.saf.common.'
         'dfa_sys_lib.OVSBridge.get_port_ofport',
         return_value=str(phy_port_num)).start()
     port_name_list = mock.patch('networking_cisco.apps.saf.common.'
                                 'dfa_sys_lib.OVSBridge.'
                                 'get_port_name_list').start()
     dev_exist = mock.patch('neutron.agent.linux.ip_lib.'
                            'device_exists').start()
     add_veth = mock.patch('neutron.agent.linux.ip_lib.'
                           'IPWrapper.add_veth').start()
     mock.patch('networking_cisco.apps.saf.'
                'agent.vdp.lldpad.LldpadDriver').start()
     mock.patch('networking_cisco.apps.saf.common.'
                'utils.PeriodicTask').start()
     get_br.return_value = self.integ_br + ' ' + self.ext_br
     port_name_list.return_value = 'port_int1'
     is_patch.return_value = True
     get_peer.return_value = 'port_int1'
     dev_exist.return_value = False
     add_veth.return_value = mock.Mock(), mock.Mock()
     self.vdp_cb = mock.MagicMock()
     self.ovs_vdp = ovs_vdp.OVSNeutronVdp(self.uplink, self.integ_br,
                                          self.ext_br, self.root_helper,
                                          self.vdp_cb)
     self.ovs_br_add.reset_mock()
示例#3
0
    def _test_ovs_vdp_init(self):
        '''Test the init routine '''
        lldp_ovs_portnum = 14
        phy_port_num = 14
        with mock.patch('networking_cisco.apps.saf.common.'
                        'dfa_sys_lib.OVSBridge.delete_flows') as (ovs_br_del),\
            mock.patch('networking_cisco.apps.saf.common.'
                       'dfa_sys_lib.get_bridges') as (get_br), \
            mock.patch('networking_cisco.apps.saf.common.'
                       'dfa_sys_lib.is_patch') as (is_patch), \
            mock.patch('networking_cisco.apps.saf.common.'
                       'dfa_sys_lib.get_peer') as (get_peer), \
            mock.patch('networking_cisco.apps.saf.common.'
                       'dfa_sys_lib.OVSBridge.add_flow') as (ovs_br_add), \
            mock.patch('networking_cisco.apps.saf.common.'
                       'dfa_sys_lib.OVSBridge.add_port',
                       return_value=str(lldp_ovs_portnum)), \
            mock.patch('networking_cisco.apps.saf.common.'
                       'dfa_sys_lib.OVSBridge.get_port_ofport',
                       return_value=str(phy_port_num)), \
            mock.patch('networking_cisco.apps.saf.common.'
                       'dfa_sys_lib.OVSBridge.'
                       'get_port_name_list') as port_name_list, \
            mock.patch('neutron.agent.linux.ip_lib.'
                       'device_exists') as dev_exist, \
            mock.patch('neutron.agent.linux.ip_lib.'
                       'IPWrapper.add_veth') as add_veth, \
                mock.patch('networking_cisco.apps.saf.'
                           'agent.vdp.lldpad.LldpadDriver') as lldpad:
            lldp_inst = lldpad.return_value
            get_br.return_value = self.integ_br + ' ' + self.ext_br
            port_name_list.return_value = 'port_int1'
            is_patch.return_value = True
            get_peer.return_value = 'port_int1'
            dev_exist.return_value = False
            add_veth.return_value = mock.Mock(), mock.Mock()

            parent = mock.MagicMock()
            parent.attach_mock(ovs_br_del, 'delete_flows')
            parent.attach_mock(ovs_br_add, 'add_flow')
            parent.attach_mock(lldp_inst.enable_evb, 'enable_evb')
            self.ovs_vdp = ovs_vdp.OVSNeutronVdp(self.uplink, self.integ_br,
                                                 self.ext_br, self.root_helper)
        veth_str = vconstants.LLDPAD_LOC_VETH_PORT + self.uplink
        expected_calls = [
            mock.call.delete_flows(dl_dst=vconstants.NCB_DMAC,
                                   dl_type=vconstants.LLDP_ETYPE),
            mock.call.delete_flows(dl_dst=vconstants.NCB_DMAC,
                                   dl_type=vconstants.LLDP_ETYPE),
            mock.call.delete_flows(dl_dst=vconstants.NCB_DMAC,
                                   dl_type=vconstants.VDP22_ETYPE),
            mock.call.delete_flows(dl_dst=vconstants.NCB_DMAC,
                                   dl_type=vconstants.VDP22_ETYPE),
            mock.call.add_flow(priority=vconstants.VDP_FLOW_PRIO,
                               in_port=str(lldp_ovs_portnum),
                               dl_dst=vconstants.NCB_DMAC,
                               dl_type=vconstants.LLDP_ETYPE,
                               actions="output:%s" % phy_port_num),
            mock.call.add_flow(priority=vconstants.VDP_FLOW_PRIO,
                               in_port=str(phy_port_num),
                               dl_dst=vconstants.NCB_DMAC,
                               dl_type=vconstants.LLDP_ETYPE,
                               actions="output:%s" % lldp_ovs_portnum),
            mock.call.add_flow(priority=vconstants.VDP_FLOW_PRIO,
                               in_port=str(lldp_ovs_portnum),
                               dl_dst=vconstants.NCB_DMAC,
                               dl_type=vconstants.VDP22_ETYPE,
                               actions="output:%s" % phy_port_num),
            mock.call.add_flow(priority=vconstants.VDP_FLOW_PRIO,
                               in_port=str(phy_port_num),
                               dl_dst=vconstants.NCB_DMAC,
                               dl_type=vconstants.VDP22_ETYPE,
                               actions="output:%s" % lldp_ovs_portnum),
            mock.call.enable_evb()
        ]
        parent.assert_has_calls(expected_calls, any_order=False)
        lldpad.assert_called_with(veth_str, self.uplink, self.root_helper)