Пример #1
0
 def _generate_port_list(self, context, method, seg_id,
                         interface, pp_dict,
                         logical_switch_uuid, gw_connection=None):
     port_list = []
     vlan_bindings = db.get_all_vlan_bindings_by_physical_port(
         context, pp_dict)
     if method == "CREATE":
         if not seg_id:
             vlan_id = interface.get('segmentation_id')
         else:
             vlan_id = int(seg_id)
         vlan_dict = {'vlan': vlan_id,
                      'logical_switch_uuid': logical_switch_uuid}
         port_list.append(vlan_dict)
         for vlan_binding in vlan_bindings:
             if vlan_binding.get('vlan') == vlan_id:
                 msg = _('Duplicate segmentation ID for the interface '
                         'name=%(name)s uuid=%(uuid)s'
                         ) % {'name': pp_dict['name'],
                              'uuid': pp_dict['uuid']}
                 raise l2gw_exc.L2GatewayDuplicateSegmentationID(message=msg
                                                                 )
             vlan_dict = {'vlan': vlan_binding.get('vlan'),
                          'logical_switch_uuid': vlan_binding.get(
                              'logical_switch_uuid')}
             port_list.append(vlan_dict)
         physical_port = self._get_dict(
             ovsdb_schema.PhysicalPort(
                 uuid=pp_dict.get('uuid'),
                 name=pp_dict.get('interface_name'),
                 phys_switch_id=pp_dict.get('physical_switch_id'),
                 vlan_binding_dicts=None,
                 port_fault_status=None))
         physical_port['vlan_bindings'] = port_list
     else:
         vlan_id = gw_connection.get('segmentation_id')
         if not vlan_id:
             vlan_id = interface.get('segmentation_id')
         for vlan_binding in vlan_bindings:
             if ((vlan_binding.get('vlan') == vlan_id) and (
                 vlan_binding.get(
                     'logical_switch_uuid') == logical_switch_uuid)):
                 continue
             else:
                 vlan_dict = {
                     'vlan': vlan_binding.get('vlan'),
                     'logical_switch_uuid':
                     vlan_binding.get('logical_switch_uuid')}
                 port_list.append(vlan_dict)
         physical_port = self._get_dict(
             ovsdb_schema.PhysicalPort(
                 uuid=pp_dict.get('uuid'),
                 name=pp_dict.get('interface_name'),
                 phys_switch_id=pp_dict.get('physical_switch_id'),
                 vlan_binding_dicts=None,
                 port_fault_status=None))
         physical_port['vlan_bindings'] = port_list
     return physical_port
Пример #2
0
 def _process_deleted_physical_ports(self,
                                     context,
                                     deleted_physical_ports):
     for physical_port in deleted_physical_ports:
         pp_dict = physical_port
         pp_dict[n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
         port_name = pp_dict['name']
         p_port = db.get_physical_port(context, pp_dict)
         if not p_port:
             raise l2gw_exc.L2GatewayInterfaceNotFound(
                 interface_id=port_name)
         p_switch_id = p_port.get('physical_switch_id')
         switch_dict = {}
         switch_dict['uuid'] = p_switch_id
         switch_dict[n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
         switch_db = db.get_physical_switch(context, switch_dict)
         if not switch_db:
             raise l2gw_exc.L2GatewayDeviceNotFound(
                 device_id=p_switch_id)
         switch_name = switch_db.get('name')
         l2gw_id_list = self.l2gw_mixin._get_l2gw_ids_by_interface_switch(
             context, port_name, switch_name)
         if l2gw_id_list:
             for l2gw_id in l2gw_id_list:
                 self.l2gw_mixin._delete_connection_by_l2gw_id(context,
                                                               l2gw_id)
         vlan_bindings = db.get_all_vlan_bindings_by_physical_port(
             context, pp_dict)
         ls_set = set()
         for vlan_binding in vlan_bindings:
             vlan_binding['logical_switch_id'] = vlan_binding.get(
                 'logical_switch_uuid')
             if vlan_binding.get('logical_switch_uuid') in ls_set:
                 db.delete_vlan_binding(context, vlan_binding)
                 continue
             bindings = db.get_all_vlan_bindings_by_logical_switch(
                 context, vlan_binding)
             if bindings and len(bindings) == 1:
                 self._delete_macs_from_ovsdb(
                     context,
                     vlan_binding.get('logical_switch_uuid'),
                     self.ovsdb_identifier)
             elif bindings and len(bindings) > 1:
                 flag = True
                 for binding in bindings:
                     if binding[
                        'ovsdb_identifier'] == self.ovsdb_identifier:
                         flag = False
                         break
                 if flag:
                     self._delete_macs_from_ovsdb(
                         context,
                         vlan_binding.get('logical_switch_uuid'),
                         self.ovsdb_identifier)
             ls_set.add(vlan_binding.get('logical_switch_uuid'))
             db.delete_vlan_binding(context, vlan_binding)
         db.delete_physical_port(context, pp_dict)
Пример #3
0
 def _process_deleted_physical_ports(self, context, deleted_physical_ports):
     for physical_port in deleted_physical_ports:
         pp_dict = physical_port
         pp_dict[n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
         port_name = pp_dict['name']
         p_port = db.get_physical_port(context, pp_dict)
         if not p_port:
             raise l2gw_exc.L2GatewayInterfaceNotFound(
                 interface_id=port_name)
         p_switch_id = p_port.get('physical_switch_id')
         switch_dict = {}
         switch_dict['uuid'] = p_switch_id
         switch_dict[n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
         switch_db = db.get_physical_switch(context, switch_dict)
         if not switch_db:
             raise l2gw_exc.L2GatewayDeviceNotFound(device_id=p_switch_id)
         switch_name = switch_db.get('name')
         l2gw_id_list = self.l2gw_mixin._get_l2gw_ids_by_interface_switch(
             context, port_name, switch_name)
         if l2gw_id_list:
             for l2gw_id in l2gw_id_list:
                 self.l2gw_mixin._delete_connection_by_l2gw_id(
                     context, l2gw_id)
         vlan_bindings = db.get_all_vlan_bindings_by_physical_port(
             context, pp_dict)
         ls_set = set()
         for vlan_binding in vlan_bindings:
             vlan_binding['logical_switch_id'] = vlan_binding.get(
                 'logical_switch_uuid')
             if vlan_binding.get('logical_switch_uuid') in ls_set:
                 db.delete_vlan_binding(context, vlan_binding)
                 continue
             bindings = db.get_all_vlan_bindings_by_logical_switch(
                 context, vlan_binding)
             if bindings and len(bindings) == 1:
                 self._delete_macs_from_ovsdb(
                     context, vlan_binding.get('logical_switch_uuid'),
                     self.ovsdb_identifier)
             elif bindings and len(bindings) > 1:
                 flag = True
                 for binding in bindings:
                     if binding[
                             'ovsdb_identifier'] == self.ovsdb_identifier:
                         flag = False
                         break
                 if flag:
                     self._delete_macs_from_ovsdb(
                         context, vlan_binding.get('logical_switch_uuid'),
                         self.ovsdb_identifier)
             ls_set.add(vlan_binding.get('logical_switch_uuid'))
             db.delete_vlan_binding(context, vlan_binding)
         db.delete_physical_port(context, pp_dict)
Пример #4
0
 def test_get_all_vlan_bindings_by_physical_port(self):
     record_dict1 = {'port_uuid': 'ps123',
                     'vlan': 200,
                     'logical_switch_uuid': 'ls123',
                     'ovsdb_identifier': 'host1'}
     self._create_vlan_binding(record_dict1)
     record_dict1['vlan'] = 300
     record_dict1['logical_switch_uuid'] = 'ls456'
     self._create_vlan_binding(record_dict1)
     record_dict1['uuid'] = record_dict1.get('port_uuid')
     vlan_list = lib.get_all_vlan_bindings_by_physical_port(self.ctx,
                                                            record_dict1)
     self.assertEqual(2, len(vlan_list))
Пример #5
0
 def _process_modified_physical_ports(self, context,
                                      modified_physical_ports):
     for physical_port in modified_physical_ports:
         pp_dict = physical_port
         pp_dict[n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
         modified_port = db.get_physical_port(context, pp_dict)
         if modified_port:
             db.update_physical_ports_status(context, pp_dict)
             port_vlan_bindings = physical_port.get('vlan_bindings')
             vlan_bindings = db.get_all_vlan_bindings_by_physical_port(
                 context, pp_dict)
             for vlan_binding in vlan_bindings:
                 db.delete_vlan_binding(context, vlan_binding)
             for port_vlan_binding in port_vlan_bindings:
                 port_vlan_binding['port_uuid'] = pp_dict['uuid']
                 port_vlan_binding[
                     n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
                 db.add_vlan_binding(context, port_vlan_binding)
         else:
             db.add_physical_port(context, pp_dict)
Пример #6
0
 def _process_modified_physical_ports(self,
                                      context,
                                      modified_physical_ports):
     for physical_port in modified_physical_ports:
         pp_dict = physical_port
         pp_dict[n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
         modified_port = db.get_physical_port(context, pp_dict)
         if modified_port:
             db.update_physical_ports_status(context, pp_dict)
             port_vlan_bindings = physical_port.get('vlan_bindings')
             vlan_bindings = db.get_all_vlan_bindings_by_physical_port(
                 context, pp_dict)
             for vlan_binding in vlan_bindings:
                 db.delete_vlan_binding(context, vlan_binding)
             for port_vlan_binding in port_vlan_bindings:
                 port_vlan_binding['port_uuid'] = pp_dict['uuid']
                 port_vlan_binding[
                     n_const.OVSDB_IDENTIFIER] = self.ovsdb_identifier
                 db.add_vlan_binding(context, port_vlan_binding)
         else:
             db.add_physical_port(context, pp_dict)