Changeset 6431


Ignore:
Timestamp:
Dec 10, 2008, 3:32:29 PM (16 years ago)
Author:
roland
Message:

Modified model so that public ap is now accespoint and a boolean in the
interface model. Further, commented out references to PublicAp.

Location:
trunk
Files:
1 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Makefile

    r6424 r6431  
    1010#Setup environment database
    1111        @./bin/buildout
     12        @echo "no" | ./bin/django syncdb
     13
     14syncdb:
     15# syncdatabase
    1216        @echo "no" | ./bin/django syncdb
    1317
  • trunk/exodus/admin.py

    r6427 r6431  
    11from django.contrib.admin.sites import AdminSite
     2from django.contrib import admin
    23from django.contrib import databrowse
    34from django import forms
     
    910plain_admin = AdminSite()
    1011
    11 class PublicAPInline(admin.TabularInline):
    12     model = PublicAP
    13     extra = 1
     12#class PublicAPInline(admin.TabularInline):
     13#    model = PublicAP
     14#    extra = 1
    1415
    1516class InterfaceInline(admin.TabularInline):
     
    5253advanced_admin.register(Node, NodeAdmin)
    5354advanced_admin.register(Interface)
    54 advanced_admin.register(PublicAP)
     55#advanced_admin.register(PublicAP)
    5556advanced_admin.register(DhcpStatic)
    5657
     
    6162plain_admin.register(Node)
    6263plain_admin.register(Interface)
    63 plain_admin.register(PublicAP)
     64#plain_admin.register(PublicAP)
    6465plain_admin.register(DhcpStatic)
    6566
    6667databrowse.site.register(Antenna)
    67 databrowse.site.register(Location, LocationAdmin)
     68databrowse.site.register(Location)
    6869databrowse.site.register(DnsServer)
    6970databrowse.site.register(Network)
    7071databrowse.site.register(Node)
    7172databrowse.site.register(Interface)
    72 databrowse.site.register(PublicAP)
     73#databrowse.site.register(PublicAP)
    7374databrowse.site.register(DhcpStatic)
  • trunk/exodus/models.py

    r6429 r6431  
    101101
    102102class Interface(models.Model):
    103    node = models.ForeignKey(Node)
    104    type = models.CharField(max_length=10, choices=INTERFACE_TYPE_CHOICES, \
     103    node = models.ForeignKey(Node)
     104    type = models.CharField(max_length=10, choices=INTERFACE_TYPE_CHOICES,
    105105            default='eth')
    106    iface = models.CharField(max_length=10, verbose_name="interface", \
     106    iface = models.CharField(max_length=10, verbose_name="interface",
    107107            default='eth0')
    108    ip = models.IPAddressField(unique=True, blank=True)
    109    netmask = models.IntegerField(default=30)
    110    polar = models.CharField(blank=True, max_length=10, choices=POLAR_CHOICES)
    111    ssid = models.CharField(max_length=50, blank=True, null=True)
    112    mode = models.CharField(max_length=10, choices=WIFI_MODE_CHOICES, blank=True)
    113    channel = models.IntegerField(blank=True, null=True)
    114    antenna = models.ForeignKey(Antenna, blank=True, null=True)
    115    shortdesc = models.CharField(blank=True, max_length=10)
    116    desc = models.CharField(blank=True, max_length=100)
    117    link = models.ForeignKey('self', blank=True, null=True)
     108    ip = models.IPAddressField(unique=True, blank=True)
     109    netmask = models.IntegerField(default=30)
     110    polar = models.CharField(blank=True, max_length=10, choices=POLAR_CHOICES)
     111    ssid = models.CharField(max_length=50, blank=True, null=True)
     112    mode = models.CharField(max_length=10, choices=WIFI_MODE_CHOICES,
     113            blank=True)
     114    channel = models.IntegerField(blank=True, null=True)
     115    antenna = models.ForeignKey(Antenna, blank=True, null=True)
     116    shortdesc = models.CharField(blank=True, max_length=10)
     117    desc = models.CharField(blank=True, max_length=100)
     118    link = models.ForeignKey('self', blank=True, null=True)
     119    accesspoint = models.BooleanField()
    118120   
    119    class Meta:
    120       #unique_together = ('node', 'iface')
    121       verbose_name = 'Interface'
     121    class Meta:
     122        #unique_together = ('node', 'iface')
     123        verbose_name = 'Interface'
    122124   
    123    def __unicode__(self):
    124       return "%s/%s" % (self.node, self.iface)
     125    def __unicode__(self):
     126        return "%s/%s" % (self.node, self.iface)
    125127
    126128#
     
    128130# this feature as we going to use a new interlink IP naming model
    129131class InterfaceAlias(models.Model):
    130    iface = models.ForeignKey(Interface,related_name='child')
    131    ip = models.IPAddressField(unique=True)
    132    netmask = models.IntegerField(default=30)
    133    shortdesc = models.CharField(blank=True, max_length=10)
    134    desc = models.CharField(blank=True, max_length=100)
    135    linkAlias = models.ForeignKey('self', blank=True, null=True)
    136    link = models.ForeignKey(Interface, blank=True, null=True)
     132    iface = models.ForeignKey(Interface,related_name='child')
     133    ip = models.IPAddressField(unique=True)
     134    netmask = models.IntegerField(default=30)
     135    shortdesc = models.CharField(blank=True, max_length=10)
     136    desc = models.CharField(blank=True, max_length=100)
     137    linkAlias = models.ForeignKey('self', blank=True, null=True)
     138    link = models.ForeignKey(Interface, blank=True, null=True)
    137139   
    138    def __unicode__(self):
    139       return "Alias %s" % (self.iface)
     140    def __unicode__(self):
     141        return "Alias %s" % (self.iface)
    140142
    141143#
     
    144146# be defined, all other could be calculated on the fly if needed
    145147
    146 class PublicAP(models.Model):
    147     iface = models.ForeignKey(Interface,related_name='ap', verbose_name="interface")
    148     ip = models.IPAddressField(unique=True)
    149     netmask = models.IntegerField(default=28)
    150     dhcpstart = models.IPAddressField()
    151     dhcpstop = models.IPAddressField()
    152     shortdesc = models.CharField(max_length=10)
    153     desc = models.CharField(max_length=100)
    154 
    155     class Meta:
    156         verbose_name = "Public Access Point"
    157 
    158     def __unicode__(self):
    159         return "%s:%s" % (self.iface,self.pk)
     148#class PublicAP(models.Model):
     149#     iface = models.ForeignKey(Interface,related_name='ap', verbose_name="interface")
     150#     ip = models.IPAddressField(unique=True)
     151#     netmask = models.IntegerField(default=28)
     152#     dhcpstart = models.IPAddressField()
     153#     dhcpstop = models.IPAddressField()
     154#     shortdesc = models.CharField(max_length=10)
     155#     desc = models.CharField(max_length=100)
     156#
     157#     class Meta:
     158#         verbose_name = "Public Access Point"
     159#
     160#     def __unicode__(self):
     161#         return "%s:%s" % (self.iface,self.pk)
    160162
    161163class DhcpStatic(models.Model):
     
    163165    macaddress = models.CharField(max_length=17)
    164166    address = models.IPAddressField()
    165     PublicAP = models.ForeignKey(PublicAP)
     167    PublicAP = models.ForeignKey(Interface)
    166168
    167169    class Meta:
  • trunk/exodus/settings.py

    r6366 r6431  
    3838LANGUAGE_CODE = 'en-us'
    3939
    40 SITE_ID = 1
    41 
    4240# Make this unique, and don't share it with anybody.
    4341SECRET_KEY = 'l+plhHJKNIkiasdfh12lsk0Lkf,.=+-asdjdknmnaladfasdmnm,90934jknmnsdaf09'
     
    6866    'django.contrib.contenttypes',
    6967    'django.contrib.sessions',
    70     'django.contrib.sites',
    7168    'django.contrib.admin',
    7269    'django.contrib.databrowse',
  • trunk/exodus/templates/viewNode.html

    r6424 r6431  
    2323        <div style="border:1px solid #000000;">
    2424        <h3>iface: {{ nic.iface }} </h3>
    25         <a href="{% url exodus.views.genericPublicAP "add" node.name nic.iface "new" %}">Add new public access point</a><p />
    2625        Description: {{ nic.shortdesc }} <br>
    2726        IP: {{ nic.ip }}/{{ nic.netmask }}<br />
     
    5049        {% endfor %}
    5150        <ol>
    52         {% for accessPoint in nic.ap.all %}
    53                 <div style="border:1px solid #000000;">
    54                 <p />
    55                 <li>Public Access Point: {{ accessPoint.ip}}/{{accessPoint.netmask }}
    56                 <a href="{% url exodus.views.genericPublicAP "edit" node.name nic.iface accessPoint.pk %}">EDIT</a>
    57                 <a href="{% url exodus.views.genericPublicAP "delete" node.name nic.iface accessPoint.pk %}">DELETE</a>
    58                 {% for dhcp in accessPoint.dhcpstatic.all %}
    59                         <ul>
    60                             <li>Hostname: {{ dhcp.hostname }} </li>
    61                             <li>MacAddress: {{ dhcp.macaddress }} </li>
    62                         </ul>
    63                 {% endfor %}
    64         </li>
    65                 <p />
    66                 </div>
    67         {% endfor %}
    6851        </ol>
    6952        </div>
  • trunk/exodus/urls.py

    r6426 r6431  
    2222        (r'^(?P<mode>(add|edit|delete))/node/(?P<node>.+)/$', 'exodus.views.genericNode'),
    2323        (r'^(?P<mode>(add|edit|delete))/nic/(?P<node>.+)/(?P<interface>.+)/$', 'exodus.views.genericInterface'),
    24         (r'^(?P<mode>(add|edit|delete))/dhcp/(?P<node>.+)/(?P<interface>.+)/(?P<publicAP>.+)/$', 'exodus.views.genericPublicAP'),
     24        #(r'^(?P<mode>(add|edit|delete))/dhcp/(?P<node>.+)/(?P<interface>.+)/(?P<publicAP>.+)/$', 'exodus.views.genericPublicAP'),
    2525        (r'^(?P<mode>(add|edit|delete))/(?P<model>.+)/(?P<object>.+)/$', 'exodus.views.genericModel'),
    2626
  • trunk/exodus/views.py

    r6430 r6431  
    99from exodus.models import *
    1010from exodus.wllogic import free_masterip, newSSIDName, addInterlinkIP, \
    11         freeInterlinkIP, freePublicAPIP
     11        freeInterlinkIP
    1212
    1313from exodus.utils import pdebug
     
    128128#
    129129# PublicAP
    130 class PublicAPForm(forms.ModelForm):
    131     class Meta:
    132         model = PublicAP
    133         exclude = ('shortdesc', 'desc', 'ip', 'dhcpstart', 'dhcpstop')
    134 
    135 class PublicAPHandler(GenericHandler):
    136 
    137     def __init__(self, request, node, interface, publicAP, mode):
    138         pdebug(100, "Function: PublicAPHandler.__init__")
    139         self.node = Node.objects.get(name=node)
    140         self.interface = Interface.objects.get(node=self.node, iface=interface)
    141         if mode == 'add':
    142             self.publicAP = PublicAP(iface=self.interface)
    143         else:
    144             self.publicAP =  PublicAP.objects.get(iface=self.interface, \
    145                     pk=publicAP)
    146         super(PublicAPHandler, self).__init__(request, mode)
    147 
    148     def _add(self):
    149         pdebug(100, "Function: PublicAPHandler._add")
    150         _instance = self.form.save(commit=False)
    151         # Find IP range inside interface range with disired size/subnet
    152         _instance.ip = freePublicAPIP(_instance.iface, _instance.netmask)
    153         _instance.dhcpstart = 1
    154         _instance.dhcpstop = 2
    155         # If wireless generate ssid name
    156         _instance.ssid = newSSIDName(_instance.iface.node, _instance.iface, \
    157                 'omni')
    158         _instance.save()
    159 
    160 def genericPublicAP(request, node, interface, publicAP, mode):
    161     pdebug(100, "Function: genericPublicAP")
    162     handler = PublicAPHandler(request, node, interface, publicAP, mode)
    163     return handler.render_to_response()
    164 
     130#class PublicAPForm(forms.ModelForm):
     131#    class Meta:
     132#        model = PublicAP
     133#        exclude = ('shortdesc', 'desc', 'ip', 'dhcpstart', 'dhcpstop')
     134#
     135#class PublicAPHandler(GenericHandler):
     136#
     137#    def __init__(self, request, node, interface, publicAP, mode):
     138#        pdebug(100, "Function: PublicAPHandler.__init__")
     139#        self.node = Node.objects.get(name=node)
     140#        self.interface = Interface.objects.get(node=self.node, iface=interface)
     141#        if mode == 'add':
     142#            self.publicAP = PublicAP(iface=self.interface)
     143#        else:
     144#            self.publicAP =  PublicAP.objects.get(iface=self.interface, \
     145#                    pk=publicAP)
     146#        super(PublicAPHandler, self).__init__(request, mode)
     147#
     148#    def _add(self):
     149#        pdebug(100, "Function: PublicAPHandler._add")
     150#        _instance = self.form.save(commit=False)
     151#        # Find IP range inside interface range with disired size/subnet
     152#        _instance.ip = freePublicAPIP(_instance.iface, _instance.netmask)
     153#        _instance.dhcpstart = 1
     154#        _instance.dhcpstop = 2
     155#        # If wireless generate ssid name
     156#        _instance.ssid = newSSIDName(_instance.iface.node, _instance.iface, \
     157#                'omni')
     158#        _instance.save()
     159#
     160#def genericPublicAP(request, node, interface, publicAP, mode):
     161#    pdebug(100, "Function: genericPublicAP")
     162#    handler = PublicAPHandler(request, node, interface, publicAP, mode)
     163#    return handler.render_to_response()
     164#
    165165#
    166166# Interface
  • trunk/exodus/wllogic.py

    r6424 r6431  
    11# (c) Roland van Laar
    22
    3 from exodus.models import Node, Interface, PublicAP
     3from exodus.models import Node, Interface
    44from exodus.settings import MASTERIP_NETMASK
    55
     
    8484# XXX: Needs merging with freeInterlinkIP as interface could have both AP,
    8585# interlink defined on one link
    86 def freePublicAPIP(masterLink, netmask):
    87         taken = {}
    88 
    89         for interface in Interface.objects.filter(link=masterLink):
    90                 #Grr, needs all interfaces which are master requires a bit of a hack
    91                 addr = network(interface.ip, interface.netmask)
    92                 addrMax = broadcast(interface.ip, interface.netmask)
    93                 while addr < addrMax:
    94                         taken[addr] = 1
    95                         addr = addr + 1
    96 
    97         for accessPoint in PublicAP.objects.filter(iface=masterLink):
    98                 #Grr, needs all interfaces which are master requires a bit of a hack
    99                 addr = network(accessPoint.ip, accessPoint.netmask)
    100                 addrMax = broadcast(accessPoint.ip, accessPoint.netmask)
    101                 while addr < addrMax:
    102                         taken[addr] = 1
    103                         addr = addr + 1
    104 
    105         #Should be dynamic based on the number of hosts in here
    106         size = netmask
    107         numaddrs = 1 << (32 - size)
    108         i = network(masterLink.ip,masterLink.netmask)
    109         while taken.has_key(i):
    110                 i = i + numaddrs
    111        
    112         return show_addr(i)
    113 
     86#def freePublicAPIP(masterLink, netmask):
     87#       taken = {}
     88#
     89#       for interface in Interface.objects.filter(link=masterLink):
     90#               #Grr, needs all interfaces which are master requires a bit of a hack
     91#               addr = network(interface.ip, interface.netmask)
     92#               addrMax = broadcast(interface.ip, interface.netmask)
     93#               while addr < addrMax:
     94#                       taken[addr] = 1
     95#                       addr = addr + 1
     96#
     97#       for accessPoint in PublicAP.objects.filter(iface=masterLink):
     98#               #Grr, needs all interfaces which are master requires a bit of a hack
     99#               addr = network(accessPoint.ip, accessPoint.netmask)
     100#               addrMax = broadcast(accessPoint.ip, accessPoint.netmask)
     101#               while addr < addrMax:
     102#                       taken[addr] = 1
     103#                       addr = addr + 1
     104#
     105#       #Should be dynamic based on the number of hosts in here
     106#       size = netmask
     107#       numaddrs = 1 << (32 - size)
     108#       i = network(masterLink.ip,masterLink.netmask)
     109#       while taken.has_key(i):
     110#               i = i + numaddrs
     111#       
     112#       return show_addr(i)
     113#
    114114def freeInterlinkIP(masterLink):
    115115        taken = {}
  • trunk/initial_data.json

    r6424 r6431  
    484484      "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUpZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5k\ncy5Nb2RlbEJhY2tlbmRxA1UNX2F1dGhfdXNlcl9pZHEESwF1LmQ2ZjkxZjcxZTMwYmVjYzcyNDk1\nYTk5MjRlNWYxNTJm\n"
    485485    }
    486   }
     486  },
     487 {
     488  "pk": 1,
     489  "model": "exodus.antenna",
     490  "fields": {
     491   "type": "Omni",
     492   "gain": 6
     493  }
     494 },
     495 {
     496  "pk": 2,
     497  "model": "exodus.antenna",
     498  "fields": {
     499   "type": "SD9",
     500   "gain": 9
     501  }
     502 },
     503 {
     504  "pk": 3,
     505  "model": "exodus.antenna",
     506  "fields": {
     507   "type": "SD15",
     508   "gain": 15
     509  }
     510 },
     511 {
     512  "pk": 4,
     513  "model": "exodus.antenna",
     514  "fields": {
     515   "type": "SD19",
     516   "gain": 19
     517  }
     518 },
     519 {
     520  "pk": 5,
     521  "model": "exodus.antenna",
     522  "fields": {
     523   "type": "2020",
     524   "gain": 20
     525  }
     526 },
     527 {
     528  "pk": 6,
     529  "model": "exodus.antenna",
     530  "fields": {
     531   "type": "4040",
     532   "gain": 20
     533  }
     534 },
     535 {
     536  "pk": 7,
     537  "model": "exodus.antenna",
     538  "fields": {
     539   "type": "8080",
     540   "gain": 80
     541  }
     542 },
     543 {
     544  "pk": 1,
     545  "model": "exodus.location",
     546  "fields": {
     547   "latitude": "54.55",
     548   "description": "Joost kantoor",
     549   "longitude": "33.44"
     550  }
     551 },
     552 {
     553  "pk": 2,
     554  "model": "exodus.location",
     555  "fields": {
     556   "latitude": "46.77",
     557   "description": "Rapenburg",
     558   "longitude": "45.55"
     559  }
     560 },
     561 {
     562  "pk": 3,
     563  "model": "exodus.location",
     564  "fields": {
     565   "latitude": "34.55",
     566   "description": "kerk",
     567   "longitude": "44.55"
     568  }
     569 },
     570 {
     571  "pk": 1,
     572  "model": "exodus.dnsserver",
     573  "fields": {
     574   "ipaddress": "172.17.8.68",
     575   "domainname": "wleiden.net"
     576  }
     577 },
     578 {
     579  "pk": 2,
     580  "model": "exodus.dnsserver",
     581  "fields": {
     582   "ipaddress": "172.17.143.4",
     583   "domainname": "wzoeterwoude.net"
     584  }
     585 },
     586 {
     587  "pk": 1,
     588  "model": "exodus.network",
     589  "fields": {
     590   "netmask": 16,
     591   "name": "wleiden.net",
     592   "ipspacestart": "172.16.0.0"
     593  }
     594 },
     595 {
     596  "pk": 2,
     597  "model": "exodus.network",
     598  "fields": {
     599   "netmask": 16,
     600   "name": "walphen.net",
     601   "ipspacestart": "172.18.0.0"
     602  }
     603 },
     604 {
     605  "pk": 3,
     606  "model": "exodus.network",
     607  "fields": {
     608   "netmask": 16,
     609   "name": "wzoeterwoude.net",
     610   "ipspacestart": "172.27.0.0"
     611  }
     612 },
     613 {
     614  "pk": 3,
     615  "model": "exodus.node",
     616  "fields": {
     617   "status": "up",
     618   "network": 1,
     619   "name": "Cope",
     620   "masterip": "172.16.3.1",
     621   "location": 2
     622  }
     623 },
     624 {
     625  "pk": 1,
     626  "model": "exodus.node",
     627  "fields": {
     628   "status": "up",
     629   "network": 1,
     630   "name": "Rick1",
     631   "masterip": "172.16.0.1",
     632   "location": 1
     633  }
     634 },
     635 {
     636  "pk": 2,
     637  "model": "exodus.node",
     638  "fields": {
     639   "status": "up",
     640   "network": 1,
     641   "name": "Rick2",
     642   "masterip": "172.16.1.1",
     643   "location": 1
     644  }
     645 },
     646 {
     647  "pk": 4,
     648  "model": "exodus.node",
     649  "fields": {
     650   "status": "up",
     651   "network": 3,
     652   "name": "nieuwe Kerk",
     653   "masterip": "172.27.0.1",
     654   "location": 3
     655  }
     656 },
     657 {
     658  "pk": 1,
     659  "model": "exodus.interface",
     660  "fields": {
     661   "node": 1,
     662   "polar": "",
     663   "iface": "eth0",
     664   "ssid": "",
     665   "antenna": null,
     666   "accesspoint": false,
     667   "ip": "172.16.0.6",
     668   "netmask": 30,
     669   "link": 1,
     670   "mode": "",
     671   "shortdesc": "2Rick2",
     672   "type": "eth",
     673   "channel": null,
     674   "desc": "Ethernet naar Rick2"
     675  }
     676 },
     677 {
     678  "pk": 2,
     679  "model": "exodus.interface",
     680  "fields": {
     681   "node": 2,
     682   "polar": "",
     683   "iface": "eth0",
     684   "ssid": "",
     685   "antenna": null,
     686   "accesspoint": false,
     687   "ip": "172.16.0.7",
     688   "netmask": 30,
     689   "link": 1,
     690   "mode": "",
     691   "shortdesc": "2Rick1",
     692   "type": "eth",
     693   "channel": null,
     694   "desc": "Ethernet naar Rick1"
     695  }
     696 },
     697 {
     698  "pk": 3,
     699  "model": "exodus.interface",
     700  "fields": {
     701   "node": 1,
     702   "polar": "hr",
     703   "iface": "wi0",
     704   "ssid": "AP.Rick2.wleiden.net",
     705   "antenna": 3,
     706   "accesspoint": true,
     707   "ip": "172.16.0.2",
     708   "netmask": 32,
     709   "link": 3,
     710   "mode": "ms",
     711   "shortdesc": "11b",
     712   "type": "11b",
     713   "channel": 1,
     714   "desc": "11b"
     715  }
     716 },
     717 {
     718  "pk": 4,
     719  "model": "exodus.interface",
     720  "fields": {
     721   "node": 1,
     722   "polar": "hr",
     723   "iface": "ath0",
     724   "ssid": "ath0.nwKerk.wzoeterwoude.net",
     725   "antenna": 3,
     726   "accesspoint": false,
     727   "ip": "172.27.0.6",
     728   "netmask": 30,
     729   "link": 5,
     730   "mode": "mn",
     731   "shortdesc": "2 nwkerk",
     732   "type": "11a",
     733   "channel": 5,
     734   "desc": "11a naar nieuwe kerk"
     735  }
     736 },
     737 {
     738  "pk": 5,
     739  "model": "exodus.interface",
     740  "fields": {
     741   "node": 4,
     742   "polar": "hr",
     743   "iface": "ath0",
     744   "ssid": "ath0.nwKerk.wzoeterwoude.net",
     745   "antenna": 4,
     746   "accesspoint": false,
     747   "ip": "172.27.0.5",
     748   "netmask": 30,
     749   "link": 5,
     750   "mode": "ms",
     751   "shortdesc": "2 ick1",
     752   "type": "11a",
     753   "channel": 5,
     754   "desc": "11a naar Rick1"
     755  }
     756 },
     757 {
     758  "pk": 6,
     759  "model": "exodus.interface",
     760  "fields": {
     761   "node": 4,
     762   "polar": "hr",
     763   "iface": "wi0",
     764   "ssid": "AP.nieuwekerk.wzoeterwoude.net",
     765   "antenna": 1,
     766   "accesspoint": true,
     767   "ip": "172.27.0.17",
     768   "netmask": 28,
     769   "link": 6,
     770   "mode": "ms",
     771   "shortdesc": "ap nwkerk",
     772   "type": "11b",
     773   "channel": 8,
     774   "desc": "Ap voor de nieuwe kerk"
     775  }
     776 },
     777 {
     778  "pk": 7,
     779  "model": "exodus.interface",
     780  "fields": {
     781   "node": 3,
     782   "polar": "vr",
     783   "iface": "wi0",
     784   "ssid": "wi0.cope.wleiden.net",
     785   "antenna": 3,
     786   "accesspoint": false,
     787   "ip": "172.16.3.9",
     788   "netmask": 29,
     789   "link": 7,
     790   "mode": "ms",
     791   "shortdesc": "2rick1",
     792   "type": "11b",
     793   "channel": 1,
     794   "desc": "wi0 naar nieuwe kerk en rick2"
     795  }
     796 },
     797 {
     798  "pk": 8,
     799  "model": "exodus.interface",
     800  "fields": {
     801   "node": 2,
     802   "polar": "hr",
     803   "iface": "ath0",
     804   "ssid": "wi0.cope.wleiden.net",
     805   "antenna": 3,
     806   "accesspoint": false,
     807   "ip": "172.16.3.10",
     808   "netmask": 29,
     809   "link": 7,
     810   "mode": "mn",
     811   "shortdesc": "2cope",
     812   "type": "11g",
     813   "channel": 1,
     814   "desc": "Link naar Cope"
     815  }
     816 },
     817 {
     818  "pk": 9,
     819  "model": "exodus.interface",
     820  "fields": {
     821   "node": 4,
     822   "polar": "vr",
     823   "iface": "ath1",
     824   "ssid": "wi0.cope.wleiden.net",
     825   "antenna": 5,
     826   "accesspoint": false,
     827   "ip": "172.16.3.11",
     828   "netmask": 29,
     829   "link": 7,
     830   "mode": "mn",
     831   "shortdesc": "2cope",
     832   "type": "11g",
     833   "channel": 1,
     834   "desc": "ath0 naar cope"
     835  }
     836 },
     837 {
     838  "pk": 10,
     839  "model": "exodus.interface",
     840  "fields": {
     841   "node": 3,
     842   "polar": "hr",
     843   "iface": "wi1",
     844   "ssid": "ap.cope.wleiden.net",
     845   "antenna": 5,
     846   "accesspoint": true,
     847   "ip": "172.16.3.17",
     848   "netmask": 28,
     849   "link": 10,
     850   "mode": "ms",
     851   "shortdesc": "omni cope",
     852   "type": "11g",
     853   "channel": 7,
     854   "desc": "omni van cope"
     855  }
     856 }
    487857]
Note: See TracChangeset for help on using the changeset viewer.