Changeset 6496
- Timestamp:
- Dec 29, 2008, 1:58:07 AM (16 years ago)
- Location:
- trunk/exodus
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/exodus/admin.py
r6495 r6496 32 32 fieldsets = ( 33 33 (None, { 34 'fields' : ('node', 'iface', 'type', ('ip', 'netmask'), 'link')}), 34 'fields' : ('node', 'iface', 'type', ('ip', 'netmask'), 'link', 35 'accesspoint')}), 35 36 ('Wireless', { 36 37 'classes' : ('collapse', ), 37 'fields' : ('ssid', 'channel', 'antenna', 'polar', 'mode')}), 38 'fields' : ('ssid', 'channel', 'antenna', 'polar', 'direction', 39 'mode')}), 38 40 ) 39 41 class Media: 40 js = ("/static/showandhide.js",) 42 js = ("/exodus/media/js/admin/CollapsedFieldsets.js", 43 "/static/showandhide.js", ) 41 44 42 45 -
trunk/exodus/forms.py
r6495 r6496 2 2 from exodus.models import Location, Node, Interface 3 3 from exodus.wllogic import free_master_ip, link_has_compat_type, \ 4 link_is_wireless, new_ssid 4 link_is_wireless, new_ssid, new_ssid_for_existing_interface 5 5 from exodus.wllogic import MASTER, MANAGED, calc_subnet 6 6 from exodus.settings import AP_NETMASK … … 22 22 else: 23 23 # check if network has changed 24 old_network = Node.objects.get(pk=self.instance.pk).network 25 if old_network == self.cleaned_data.get('network'): 24 if self.instance.network == new_network: 26 25 masterip = self.cleaned_data.get('masterip') 27 26 else: … … 29 28 #XXX: Need to set netmask for interfaces 30 29 masterip = free_master_ip(new_network) 30 masterlinks = ( i for i in self.instance.interface_set.all() 31 if i.id == i.link_id ) 32 for i in masterlinks: 33 all_links = i.interface_set.all() 34 if i.accesspoint: 35 netmask = AP_NETMASK 36 else: 37 ip_size = len(all_links) 38 netmask = calc_subnet(ip_size) 39 40 try: 41 new_ip = IPCalc(self.instance, netmask, i.id, 42 masterip = masterip) 43 except Exception: 44 raise forms.ValidationError( 45 "Not enough free ips for this node.") 46 47 new_ip.ips.reverse() 48 i.ip = new_ip.ips.pop() 49 i.ssid = new_ssid(new_network, self.instance, i.iface, 50 i.accesspoint, i.direction) 51 for j in (j for j in all_links if not j.id == i.pk): 52 j.ip = new_ip.ips.pop() 53 j.netmask = netmask 54 j.ssid = i.ssid 55 j.save() 56 i.save() 31 57 return masterip 32 58 … … 128 154 new_slave.type = MANAGED 129 155 # update ssids 130 ssid = new_ssid (new_master)156 ssid = new_ssid_for_existing_interface(new_master) 131 157 new_master.ssid = ssid 132 158 new_slave.ssid = ssid … … 258 284 def clean_netmask(self): 259 285 """Cleaning happens in clean_ip.""" 260 return self.cleaned_data.get('netmask') 286 netmask = self.cleaned_data.get('netmask') 287 link = self.cleaned_data.get('link') 288 edit = bool(self.instance.pk) 289 accesspoint = self.cleaned_data.get('accesspoint') 290 291 if accesspoint: 292 return AP_NETMASK 293 294 if not edit and not link: 295 return 32 296 297 if not edit and link: 298 return link.netmask 299 300 if self.instance.pk != link.id: 301 return link.netmask 302 303 if self.instance.pk == link.id: 304 all_links = link.interface_set.all() 305 ip_size = len(all_links) 306 # up ip_size with one if self is not in all_links 307 if not [ x for x in all_links if x.id == self.instance.pk ]: 308 ip_size += 1 309 return calc_subnet(ip_size) 261 310 262 311 def clean_ssid(self): 263 312 self.type = self.cleaned_data.get('type') 264 313 edit = bool(self.instance.pk) 314 node = self.cleaned_data.get('node') 315 iface = self.cleaned_data.get('iface') 316 accesspoint = self.cleaned_data.get('accesspoint') 317 direction = self.cleaned_data.get('direction') 318 link = self.cleaned_data.get('link') 319 orig_ssid = self.cleaned_data.get('ssid') 320 265 321 if not link_is_wireless(self): 266 322 return None 267 if not edit: 268 return new_ssid 269 270 271 272 323 324 # iface is saved for the first time 325 if not edit and not link: 326 return new_ssid(node, iface, accesspoint, direction) 327 328 # iface is in managed mode 329 if not edit and link: 330 return link.ssid 331 if self.instance.pk != link.id: 332 return link.ssid 333 334 # iface has become master or 335 # iface changed having accesspoint 336 if self.instance.link_id != link.id or \ 337 self.instance.accesspoint != accesspoint: 338 return new_ssid(node, iface, accesspoint, direction) 339 340 # else, don't change ssid and return original 341 return orig_ssid 342 343 def clean_mode(self): 344 edit = bool(self.instance.pk) 345 link = self.cleaned_data.get('link') 346 347 if not edit and not link: 348 return MASTER 349 350 if not edit and link: 351 return MANAGED 352 353 if self.instance.pk == link.id: 354 return MASTER 355 356 return MANAGED -
trunk/exodus/static/showandhide.js
r6495 r6496 1 var RolandSpecial= {1 var ShowAndHide = { 2 2 init: function() { 3 document.getElementById('id_type').onchange = new Function('RolandSpecial.change(); return false;'); 3 document.getElementById('id_type').onchange = new Function('ShowAndHide.change(); return false;'); 4 var newValue = document.getElementById('id_type').value; 5 if (newValue != 'eth') { 6 CollapsedFieldsets.show(1); 7 } 4 8 }, 5 9 change: function() { … … 13 17 } 14 18 15 addEvent(window, 'load', RolandSpecial.init);19 addEvent(window, 'load', ShowAndHide.init); -
trunk/exodus/wlipcalc.py
r6477 r6496 9 9 """ 10 10 11 def __init__(self, node, free_netmask, link_id = None ):11 def __init__(self, node, free_netmask, link_id = None, masterip = None): 12 12 if free_netmask <= MASTERIP_NETMASK or free_netmask > 32: 13 13 raise ValueError, 'Netmask out of bounds.' 14 14 15 15 self.node = node 16 self.master_ip = node.masterip 16 #XXX: unittest masterip 17 if masterip == None: 18 self.master_ip = node.masterip 19 else: 20 self.master_ip = masterip 17 21 master_netmask = MASTERIP_NETMASK 18 22 self.master_network = wl.get_network(self.master_ip, master_netmask) … … 71 75 """Calculate a new network address with a used_list and given netmask. 72 76 """ 73 #XXX: network_addr in for loop(generator expression)/list comprehension74 77 for i in xrange(self.master_ip_size/self.new_ip_size): 75 78 network_addr = wl.parse_addr(self.master_network) + \ -
trunk/exodus/wllogic.py
r6495 r6496 9 9 MANAGED = WIFI_MODE_CHOICES[1][0] 10 10 11 def new_ssid_for_save_iface(nic): 12 return new_ssid(nic.node, nic.iface, nic.accesspoint, nic.direction) 11 def new_ssid_for_existing_interface(nic): 12 return new_ssid(nic.network,nic.node, nic.iface, nic.accesspoint, 13 nic.direction) 13 14 14 def new_ssid(n ode, iface, accesspoint=False, direction=None):15 def new_ssid(network, node, iface, accesspoint=False, direction=None): 15 16 """Generates a new ssid name for a new wifi NIC. 16 17 … … 20 21 21 22 nodename = node.name 22 network = node.network.name23 networkname = network.name 23 24 24 25 if accesspoint: 25 26 ssid_list = set([i.ssid for i in \ 26 27 node.interface_set.filter(accesspoint=True)]) 27 ssid = "ap%%s.%s.%s" % ( nodename, network )28 ssid = "ap%%s.%s.%s" % ( nodename, networkname) 28 29 29 30 free_list = set() … … 39 40 40 41 else: 41 ssid = "%% S.%s.%s" % (nodename, network)42 ssid = "%%s.%s.%s" % (nodename, networkname) 42 43 if direction: 43 44 return ssid % (direction)
Note:
See TracChangeset
for help on using the changeset viewer.