Esempio n. 1
0
 def submit_subinterface(
     self,
     forwarding_instance,
     interface,
     name,
     description=None,
     mac=None,
     vlan_ids=None,
     enabled_afi=[],
     ipv4_addresses=[],
     ipv6_addresses=[],
     iso_addresses=[],
     vpi=None,
     vci=None,
     enabled_protocols=[],
     untagged_vlan=None,
     tagged_vlans=[],
     ifindex=None,
 ):
     mac = mac or interface.mac
     si = self.get_subinterface(interface, name)
     if si:
         changes = self.update_if_changed(
             si,
             {
                 "forwarding_instance": forwarding_instance,
                 "description": description,
                 "mac": mac,
                 "vlan_ids": vlan_ids,
                 "enabled_afi": enabled_afi,
                 "ipv4_addresses": ipv4_addresses,
                 "ipv6_addresses": ipv6_addresses,
                 "iso_addresses": iso_addresses,
                 "vpi": vpi,
                 "vci": vci,
                 "enabled_protocols": enabled_protocols,
                 "untagged_vlan": untagged_vlan,
                 "tagged_vlans": tagged_vlans,
                 # ip_unnumbered_subinterface
                 "ifindex": ifindex,
             },
             ignore_empty=["ifindex"],
         )
         self.log_changes("Subinterface '%s' has been changed" % name,
                          changes)
     else:
         self.logger.info("Creating subinterface '%s'", name)
         si = SubInterface(
             forwarding_instance=forwarding_instance,
             interface=interface.id,
             managed_object=self.object.id,
             name=name,
             description=description,
             mac=mac,
             vlan_ids=vlan_ids,
             enabled_afi=enabled_afi,
             ipv4_addresses=ipv4_addresses,
             ipv6_addresses=ipv6_addresses,
             iso_addresses=iso_addresses,
             vpi=None,
             vci=None,
             enabled_protocols=enabled_protocols,
             untagged_vlan=untagged_vlan,
             tagged_vlans=tagged_vlans,
             ifindex=ifindex,
         )
         si.save()
     if mac:
         self.interface_macs.add(mac)
     return si
Esempio n. 2
0
 def submit_subinterface(self,
                         forwarding_instance,
                         interface,
                         name,
                         description=None,
                         mac=None,
                         vlan_ids=None,
                         enabled_afi=[],
                         ipv4_addresses=[],
                         ipv6_addresses=[],
                         iso_addresses=[],
                         vpi=None,
                         vci=None,
                         enabled_protocols=[],
                         untagged_vlan=None,
                         tagged_vlans=[],
                         ifindex=None):
     mac = mac or interface.mac
     si = SubInterface.objects.filter(interface=interface.id,
                                      name=name).first()
     if si:
         changes = self.update_if_changed(
             si,
             {
                 "forwarding_instance": forwarding_instance,
                 "description": description,
                 "mac": mac,
                 "vlan_ids": vlan_ids,
                 "enabled_afi": enabled_afi,
                 "ipv4_addresses": ipv4_addresses,
                 "ipv6_addresses": ipv6_addresses,
                 "iso_addresses": iso_addresses,
                 "vpi": vpi,
                 "vci": vci,
                 "enabled_protocols": enabled_protocols,
                 "untagged_vlan": untagged_vlan,
                 "tagged_vlans": tagged_vlans,
                 # ip_unnumbered_subinterface
                 "ifindex": ifindex
             },
             ignore_empty=["ifindex"])
         self.log_changes("Subinterface '%s' has been changed" % name,
                          changes)
     else:
         self.info("Creating subinterface '%s'" % name)
         si = SubInterface(forwarding_instance=forwarding_instance,
                           interface=interface.id,
                           managed_object=self.object.id,
                           name=name,
                           description=description,
                           mac=mac,
                           vlan_ids=vlan_ids,
                           enabled_afi=enabled_afi,
                           ipv4_addresses=ipv4_addresses,
                           ipv6_addresses=ipv6_addresses,
                           iso_addresses=iso_addresses,
                           vpi=None,
                           vci=None,
                           enabled_protocols=enabled_protocols,
                           untagged_vlan=untagged_vlan,
                           tagged_vlans=tagged_vlans,
                           ifindex=ifindex)
         si.save()
     # Submit found addresses and prefixes
     if "IPv4" in enabled_afi or "IPv6" in enabled_afi:
         # Get VRF
         vrf = vrf_cache.get_or_create(
             self.object,
             forwarding_instance.name if forwarding_instance else "default",
             forwarding_instance.rd if forwarding_instance else "0:0")
         if vrf is None:
             self.info("Skipping unknown VRF '%s'" % vrf["name"])
         else:
             # Submit ipv4 addresses and prefixes
             if "IPv4" in enabled_afi:
                 for a in ipv4_addresses:
                     self.prefix_report.submit(vrf,
                                               a,
                                               interface=si.name,
                                               description=si.description)
                     self.ip_report.submit(vrf,
                                           a.split("/")[0],
                                           interface=si.name,
                                           mac=si.mac)
             # Submit ipv6 addresses and prefixes
             if "IPv6" in enabled_afi:
                 for a in ipv6_addresses:
                     self.prefix_report.submit(vrf,
                                               a,
                                               interface=si.name,
                                               description=si.description)
                     self.ip_report.submit(vrf,
                                           a.split("/")[0],
                                           interface=si.name,
                                           mac=si.mac)
             # Process dual-stacking
             if (len(ipv4_addresses) == len(ipv6_addresses)
                     and len(ipv4_addresses) > 0):
                 for ipv4, ipv6 in zip(ipv4_addresses, ipv6_addresses):
                     self.prefix_report.submit_dual_stack(vrf, ipv4, ipv6)
     return si