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)
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()
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)