2424#
2525# Author: Komal Thareja ([email protected] ) 2626import ipaddress
27+ import random
2728import traceback
2829from ipaddress import IPv6Network , IPv4Network
2930from typing import List , Tuple
@@ -53,7 +54,8 @@ def __extract_vlan_range(*, labels: Labels) -> List[int] or None:
5354 for v_r in labels .vlan_range :
5455 vlans = v_r .split ("-" )
5556 for x in list (range (int (vlans [0 ]), int (vlans [1 ]) + 1 )):
56- vlan_range .append (x )
57+ if x not in vlan_range :
58+ vlan_range .append (x )
5759 else :
5860 vlans = labels .vlan_range .split ("-" )
5961 vlan_range = list (range (int (vlans [0 ]), int (vlans [1 ]) + 1 ))
@@ -103,6 +105,9 @@ def __exclude_allocated_vlans(self, *, available_vlan_range: List[int], bqm_ifs:
103105 if allocated_vlan in available_vlan_range :
104106 available_vlan_range .remove (allocated_vlan )
105107
108+ if available_vlan_range is None or len (available_vlan_range ) == 0 :
109+ raise BrokerException (error_code = ExceptionErrorCode .INSUFFICIENT_RESOURCES ,
110+ msg = f"No VLANs available!" )
106111 return available_vlan_range
107112
108113 def allocate_ifs (self , * , requested_ns : NetworkServiceSliver , requested_ifs : InterfaceSliver ,
@@ -158,6 +163,7 @@ def allocate_ifs(self, *, requested_ns: NetworkServiceSliver, requested_ifs: Int
158163 existing_reservations = existing_reservations )
159164
160165 if requested_vlan is None :
166+ #requested_ifs.labels.vlan = str(random.choice(vlan_range))
161167 requested_ifs .labels .vlan = str (vlan_range [0 ])
162168 return requested_ifs
163169
@@ -182,13 +188,15 @@ def allocate_ifs(self, *, requested_ns: NetworkServiceSliver, requested_ifs: Int
182188 existing_reservations = existing_reservations )
183189 if bqm_ifs .get_type () != InterfaceType .FacilityPort :
184190 # Allocate the first available VLAN
191+ #requested_ifs.labels.vlan = str(random.choice(vlan_range))
185192 requested_ifs .labels .vlan = str (vlan_range [0 ])
186- requested_ifs .label_allocations = Labels (vlan = str ( vlan_range [ 0 ]) )
193+ requested_ifs .label_allocations = Labels (vlan = requested_ifs . labels . vlan )
187194 else :
188195 if requested_ifs .labels is None :
189196 return requested_ifs
190197
191198 if requested_ifs .labels .vlan is None :
199+ #requested_ifs.labels.vlan = str(random.choice(vlan_range))
192200 requested_ifs .labels .vlan = str (vlan_range [0 ])
193201
194202 if int (requested_ifs .labels .vlan ) not in vlan_range :
@@ -272,6 +280,7 @@ def allocate_vnic(self, *, rid: ID, requested_ns: NetworkServiceSliver, owner_ns
272280
273281 if requested_ns .label_allocations is None :
274282 requested_ns .label_allocations = Labels ()
283+ #requested_ns.label_allocations.vlan = str(random.choice(vlans_range))
275284 requested_ns .label_allocations .vlan = str (vlans_range [0 ])
276285 except Exception as e :
277286 self .logger .error (f"Error in allocate_vNIC: { e } " )
@@ -442,6 +451,7 @@ def allocate_peered_ifs(self, *, owner_switch: NodeSliver,
442451 vlan_range = self .__extract_vlan_range (labels = bqm_interface .labels )
443452 available_vlans = self .__exclude_allocated_vlans (available_vlan_range = vlan_range , bqm_ifs = bqm_interface ,
444453 existing_reservations = existing_reservations )
454+ #vlan = str(random.choice(available_vlans))
445455 vlan = str (available_vlans [0 ])
446456 ifs_labels = Labels .update (ifs_labels , vlan = vlan )
447457
0 commit comments