Changeset 6480


Ignore:
Timestamp:
Dec 23, 2008, 12:40:53 PM (16 years ago)
Author:
roland
Message:

Code cleanup, and working on new_ssid code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/exodus/wllogic.py

    r6477 r6480  
    11# (c) Roland van Laar
    22
    3 from exodus.models import Node, Interface, WIFI_MODE_CHOICES
     3from exodus.models import Node, WIFI_MODE_CHOICES
    44from exodus.settings import MASTERIP_NETMASK, WIRELESS, COMPAT
    55from math import ceil, log
     
    1010
    1111def new_ssid(nic):
    12         """Generates a new ssid name for a new wifi NIC"""
     12    """Generates a new ssid name for a new wifi NIC.
     13   
     14    Don't use this for an accesspoint because it will generate a new
     15    ssid.
     16    """
    1317
    14         # nic is used instead of nic.iface, because string nic is passed on,
    15         # instead of object nic.
     18    node = nic.node.name
     19    network = nic.node.network.name
    1620
    17         return "%s.%s.%s" % (nic.iface, nic.node.name, nic.node.network.name)
     21    if nic.accesspoint:
     22        ssid_list = set([i.ssid for i in \
     23                nic.node.interface_set.filter(accesspoint=True)])
     24        ssid = "ap%%d.%s.%s" % ( node, network)
     25        free_list = ( ssid % (i) for i in range(len(ssid_list)+1) if not
     26                (ssid %(i) in ssid_list))
     27        return free_list.next()
     28
     29    else:
     30            return "il-%s.%s.%s.%s" % (nic.direction, nic.iface, node, network)
    1831
    1932#
     
    5972        return(show_addr(broadcast(address,netmask)))
    6073
    61 #XXX: free_master_ip/add_interlink_ip should be more general by writing a function
    62 #     which finds a range based on a given range, taken ip/netmask and
    63 #     requested subnet
    64 
    6574def free_master_ip(city_network, netmask = MASTERIP_NETMASK):
    6675        """Calculates the next free masterip."""
     
    8392    # go from network address to a valid ip.
    8493        return show_addr(i+1)
    85 
    86 #
    87 # XXX: Needs merging with free_interlink_ip as interface could have both AP,
    88 # interlink defined on one link
    89 #def free_publicap_ip(masterLink, netmask):
    90 #       taken = {}
    91 #
    92 #       for interface in Interface.objects.filter(link=masterLink):
    93 #               #Grr, needs all interfaces which are master requires a bit of a hack
    94 #               addr = network(interface.ip, interface.netmask)
    95 #               addrMax = broadcast(interface.ip, interface.netmask)
    96 #               while addr < addrMax:
    97 #                       taken[addr] = 1
    98 #                       addr = addr + 1
    99 #
    100 #       for accessPoint in PublicAP.objects.filter(iface=masterLink):
    101 #               #Grr, needs all interfaces which are master requires a bit of a hack
    102 #               addr = network(accessPoint.ip, accessPoint.netmask)
    103 #               addrMax = broadcast(accessPoint.ip, accessPoint.netmask)
    104 #               while addr < addrMax:
    105 #                       taken[addr] = 1
    106 #                       addr = addr + 1
    107 #
    108 #       #Should be dynamic based on the number of hosts in here
    109 #       size = netmask
    110 #       numaddrs = 1 << (32 - size)
    111 #       i = network(masterLink.ip,masterLink.netmask)
    112 #       while taken.has_key(i):
    113 #               i = i + numaddrs
    114 #       
    115 #       return show_addr(i)
    116 #
    117 def free_interlink_ip(masterLink):
    118         taken = {}
    119        
    120         for interface in Interface.objects.filter(node=masterLink.node):
    121                 #Grr, needs all interfaces which are master requires a bit of a hack
    122                 addr = network(interface.ip, interface.netmask)
    123                 taken[addr] = 1
    124 
    125         #Should be dynamic based on the number of hosts in here
    126         size = masterLink.netmask
    127         numaddrs = 1 << (32 - size)
    128         i = network(masterLink.node.masterip,24) + 4
    129         while taken.has_key(i):
    130                 i = i + numaddrs
    131        
    132         return show_addr(i)
    133 
    134 def add_interlink_ip(master_link):
    135         taken = {}
    136        
    137         for interface in Interface.objects.filter(link=master_link):
    138                 #Grr, needs all interfaces which are master requires a bit of a hack
    139                 addr = parse_addr(interface.ip)
    140                 taken[addr] = 1
    141 
    142         size = 32
    143         numaddrs = 1 << (32 - size)
    144         i = network(master_link.ip, master_link.netmask) + 1
    145         while taken.has_key(i):
    146                 i = i + 1
    147        
    148         return show_addr(i)
    14994
    15095def link_is_wireless(iface):
Note: See TracChangeset for help on using the changeset viewer.