Exemple #1
0
 def _auto_config_intf(self, node_name, intf_name, **param):
     node = self.nodemap[node_name]
     if 'port' not in param:
         param['port'] = node.newPort()
     if intf_name == 'auto':
         intf_name = Link.intfName(node, param['port'])
     if intf_name in node.nameToIntf:
         error("Node %s already has interface %s." % (node, name))
         return False
     net = self.mn
     if 'ip' not in param:
         ip = net.nextIP
         net.nextIP += 1
         sufix = ipAdd(ip, ipBaseNum=net.ipBaseNum, prefixLen=net.prefixLen)
         prefix = '/%s' % net.prefixLen
         param['ip'] =  sufix + prefix 
         if 'mac' not in param:
             param['mac'] = macColonHex(ip)
     elif 'mac' not in param:
         ip, prefix = netParse(param['ip'])
         param['mac'] = macColonHex(ip)
     if 'cores' not in param and net.autoPinCpus:
         param['cores'] = self.nextCore
         net.nextCore = (net.nextCore + 1) % net.numCores
     return True
Exemple #2
0
  def _install_proactive_path(self, src, dst):
    """Install entries on route between two hosts based on MAC addrs.
    
    src and dst are unsigned ints.
    """
    src_sw = self.t.up_nodes(self.t.id_gen(dpid = src).name_str())
    assert len(src_sw) == 1
    src_sw_name = src_sw[0]
    dst_sw = self.t.up_nodes(self.t.id_gen(dpid = dst).name_str())
    assert len(dst_sw) == 1
    dst_sw_name = dst_sw[0]
    hash_ = self._src_dst_hash(src, dst)
    route = self.r.get_route(src_sw_name, dst_sw_name, hash_)
    log.info("route: %s" % route)

    # Form OF match
    match = of.ofp_match()
    match.dl_src = EthAddr(macColonHex(src)).toRaw()
    match.dl_dst = EthAddr(macColonHex(dst)).toRaw()

    dst_host_name = self.t.id_gen(dpid = dst).name_str()
    final_out_port, ignore = self.t.port(route[-1], dst_host_name)
    for i, node in enumerate(route):
      node_dpid = self.t.id_gen(name = node).dpid
      if i < len(route) - 1:
        next_node = route[i + 1]
        out_port, next_in_port = self.t.port(node, next_node)
      else:
        out_port = final_out_port
      self.switches[node_dpid].install(out_port, match)
Exemple #3
0
 def addLink(self, node1, node2, port1=None, port2=None, cls=None, **params):
     """"Add a link from node1 to node2
         node1: source node
         node2: dest node
         port1: source port
         port2: dest port
         returns: link object"""
     mac1 = macColonHex(random.randint(1, 2 ** 48 - 1) & 0xFEFFFFFFFFFF | 0x020000000000)
     mac2 = macColonHex(random.randint(1, 2 ** 48 - 1) & 0xFEFFFFFFFFFF | 0x020000000000)
     defaults = {"port1": port1, "port2": port2, "addr1": mac1, "addr2": mac2, "intf": self.intf}
     defaults.update(params)
     if not cls:
         cls = self.link
     return cls(node1, node2, **defaults)
Exemple #4
0
    def addHost( self, name, cls=None, **params ):
        """Add host.
           name: name of host to add
           cls: custom host class/constructor (optional)
           params: parameters for host
           returns: added host"""
        defaults = {}

        autoSetIp = params.get( 'autoSetIp', True )
        if autoSetIp:
            # Default IP and MAC addresses
            defaults[ 'ip' ] = ipAdd( self.nextIP, ipBaseNum=self.ipBaseNum,
                                    prefixLen=self.prefixLen) + '/%s' % (self.prefixLen,)
            if self.autoSetMacs:
                defaults[ 'mac' ] = macColonHex( self.nextIP )

            self.nextIP += 1
        if self.autoPinCpus:
            defaults[ 'cores' ] = self.nextCore
            self.nextCore = ( self.nextCore + 1 ) % self.numCores
        defaults.update( params )
        if not cls:
            cls = self.host
        h = cls( name, **defaults )
        self.hosts.append( h )
        self.nameToNode[ name ] = h
        return h
Exemple #5
0
 def addHost( self, name, cls=None, **params ):
     """Add host.
        name: name of host to add
        cls: custom host class/constructor (optional)
        params: parameters for host
        returns: added host"""
     # Default IP and MAC addresses
     defaults = { 'ip': ipAdd( self.nextIP,
                               ipBaseNum=self.ipBaseNum,
                               prefixLen=self.prefixLen ) +
                               '/%s' % self.prefixLen }
     print defaults
     IPS=[]
     for lin in defaults.values():
         IPS.append(lin[0:8])
         print IPS
         
     with open('my_dict.json','a')as f:
         json.dump(defaults.values(),f)
         f.write('\n')
     if self.autoSetMacs:
         defaults[ 'mac'] = macColonHex( self.nextIP )
     if self.autoPinCpus:
         defaults[ 'cores' ] = self.nextCore
         self.nextCore = ( self.nextCore + 1 ) % self.numCores
     self.nextIP += 1
     defaults.update( params )
     if not cls:
         cls = self.host
     h = cls( name, **defaults )
     self.hosts.append( h )
     self.nameToNode[ name ] = h
     return h
Exemple #6
0
 def addNode( prefix, addMethod, nodeId ):
     "Add a host or a switch."
     name = prefix + topo.name( nodeId )
     mac = macColonHex( nodeId ) if self.setMacs else None
     ip = topo.ip( nodeId )
     node = addMethod( name, mac=mac, ip=ip )
     self.idToNode[ nodeId ] = node
     info( name + ' ' )
Exemple #7
0
 def addLink( self, node1, node2, port1=None, port2=None,
              cls=None, **params ):
     """"Add a link from node1 to node2
         node1: source node
         node2: dest node
         port1: source port
         port2: dest port
         returns: link object"""
     mac1 = macColonHex( random.randint(1, 2**48 - 1) & 0xfeffffffffff  | 0x020000000000 )
     mac2 = macColonHex( random.randint(1, 2**48 - 1) & 0xfeffffffffff  | 0x020000000000 )
     defaults = { 'port1': port1,
                  'port2': port2,
                  'addr1': mac1,
                  'addr2': mac2,
                  'intf': self.intf }
     defaults.update( params )
     if not cls:
         cls = self.link
     link = cls( node1, node2, **defaults )
     self.links.append( link )
     return link
Exemple #8
0
 def addStation( self, name, cls=None, **params ):
     """Add host.
        name: name of host to add
        cls: custom host class/constructor (optional)
        params: parameters for host
        returns: added host"""
     #Default IP and MAC addresses
     defaults = { 'ip': ipAdd( self.nextIP,
                               ipBaseNum=self.ipBaseNum,
                               prefixLen=self.prefixLen ) +
                               '/%s' % self.prefixLen }
     if self.autoSetMacs:
         defaults[ 'mac' ] = macColonHex( self.nextIP )
     if self.autoPinCpus:
         defaults[ 'cores' ] = self.nextCore
         self.nextCore = ( self.nextCore + 1 ) % self.numCores
     #self.nextIP += 1
     defaults.update( params )
     if not cls:
         cls = self.host
     h = cls( name, **defaults )      
     self.hosts.append( h )
     self.nameToNode[ name ] = h
     self.wirelessifaceControl.append(self.nextIface)
     self.wirelessdeviceControl.append(name)
     self.stationName.append(name)
     
     os.system("iw phy phy%s set netns %s" % (self.nextIface, h.pid))
     self.host.cmd(h,"ip link set dev wlan%s name %s-wlan0" % (self.nextIface, h))
     self.host.cmd(h,"ifconfig %s-wlan0 up" % h)
     self.host.cmd(h,"ifconfig %s-wlan0 10.1.1.%s/%s" % (h, self.nextIP, self.prefixLen)) 
     
     #callfun="start"
     #intf=self.nextIface
     #src=name        
     #wlink(callfun, intf, src)
            
     #self.host.cmd(h,"iw %s-wlan0 connect %s" % (h, "my_ssid"))
     self.nextIP += 1        
     self.nextIface+=1
     #os.system("iw dev wlan2 interface add mesh2 type station")
     #os.system("sleep 2")
     #os.system("sleep 2")
     #os.system("iw dev mesh2 station join bazookaa")
     return h
Exemple #9
0
 def addHost(self, name, cls=None, **params):
     """Add host.
        name: name of host to add
        cls: custom host class/constructor (optional)
        params: parameters for host
        returns: added host"""
     # Default IP and MAC addresses
     defaults = {
         "ip": ipAdd(self.nextIP, ipBaseNum=self.ipBaseNum, prefixLen=self.prefixLen) + "/%s" % self.prefixLen
     }
     if self.autoSetMacs:
         defaults["mac"] = macColonHex(self.nextIP)
     if self.autoPinCpus:
         defaults["cores"] = self.nextCore
         self.nextCore = (self.nextCore + 1) % self.numCores
     self.nextIP += 1
     defaults.update(params)
     if not cls:
         cls = self.host
     h = cls(name, **defaults)
     self.hosts.append(h)
     self.nameToNode[name] = h
     return h
Exemple #10
0
    def addTransitPortalRouter( self, name, cls=None, **params ):
        """Add transit portal router.
           name: name of transit portal router to add
           cls: custom router class/constructor (optional)
           returns: added transit portal router ."""

        # Default IP and MAC addresses
        defaults = { 'ip': ipAdd( self.nextIP,
                                  ipBaseNum=self.ipBaseNum,
                                  prefixLen=self.prefixLen ) +
                                  '/%s' % self.prefixLen }
        if self.autoSetMacs:
            defaults[ 'mac'] = macColonHex( self.nextIP )
        if self.autoPinCpus:
            defaults[ 'cores' ] = self.nextCore
            self.nextCore = ( self.nextCore + 1 ) % self.numCores
        self.nextIP += 1
        defaults.update( params )
        if not cls:
            cls = self.transitPortalRouter
        tpr = cls( name, **defaults )
        self.transitPortalRouters.append( tpr )
        self.nameToNode[ name ] = tpr
        return tpr
Exemple #11
0
 def randMac():
     "Return a random, non-multicast MAC address"
     return macColonHex( random.randint(1, 2**48 - 1) & 0xfeffffffffff |
                         0x020000000000 )
Exemple #12
0
 def randMac():
     "Return a random, non-multicast MAC address"
     return macColonHex(
         random.randint(1, 2**48 - 1) & 0xfeffffffffff | 0x020000000000)