예제 #1
0
파일: FlowlogMN.py 프로젝트: 0xdyu/Flowlog
    def nextSubnetHost(self, addr, mask, gw):
      try:
        last_ip = self.subnetHostLastIP[subnetStr(addr, mask)]
      except KeyError:
        last_ip = gw

      pieces = last_ip.split('.')
      pieces[3] = str(1 + int(pieces[3]))
      next_ip = '.'.join(pieces)

      self.subnetHostLastIP[subnetStr(addr, mask)] = next_ip
      return next_ip
예제 #2
0
    def nextSubnetHost(self, addr, mask, gw):
        try:
            last_ip = self.subnetHostLastIP[subnetStr(addr, mask)]
        except KeyError:
            last_ip = gw

        pieces = last_ip.split('.')
        pieces[3] = str(1 + int(pieces[3]))
        next_ip = '.'.join(pieces)

        self.subnetHostLastIP[subnetStr(addr, mask)] = next_ip
        return next_ip
예제 #3
0
    def buildRouter(self, network, r, create_edge, create_srs):
      r.name = r.name.encode('ascii', 'ignore')

      router = network.addSwitch(r.name + '-rtr',
                                 dpid=self.padDpid(r.self_dpid))

      nat = network.addSwitch(r.name + '-nat',
                              dpid=self.padDpid(r.nat_dpid))
      network.addLink(router, nat, **self.linkopts)

      translator = network.addSwitch(r.name + '-tr',
                                     dpid=self.padDpid(r.tr_dpid))
      acl_table = network.addSwitch(r.name + '-acl',
                                    dpid=self.padDpid(r.acl_dpid))

      for (i, s) in enumerate(r.subnets):
        s.gw = s.gw.encode('ascii', 'ignore')
        N = i + 1
        inPt = 2 * N - 1
        outPt = 2 * N
        rtrPt = N + 1

        network.addLink(acl_table, translator, port1=outPt, port2=inPt,
                        **self.linkopts)
        network.addLink(translator, router, port1=outPt, port2=rtrPt,
                        **self.linkopts)

        if not create_srs:
          continue

        srs = self.subnetRootSwitch[subnetStr(s.addr, s.mask)]
        network.addLink(srs, acl_table, port2=inPt, **self.linkopts)

        # if there's room for hosts, add an edge switch with some hosts!
        if s.mask < 30 and create_edge:
          self.globalEdgeSwCount += 1
          edge_switch = network.addSwitch('s' + str(self.globalEdgeSwCount))
          network.addLink(srs, edge_switch, **self.linkopts)

          for h in irange(1, self.numHostsPerSubnet):
            self.globalHostCount += 1
            name = "host%d" % self.globalHostCount
            ip = self.nextSubnetHost(s.addr, s.mask, s.gw)

            host = network.addHost(name, ip='%s/%d' % (ip, s.mask),
                                   defaultRoute='dev %s-eth0 via %s'
                                   % (name, s.gw))
            network.addLink(host, edge_switch, **self.linkopts)

      # Finally, add hosts which represents our BGP peers

      for p in r.peers:
        self.globalPeerCount += 1
        name = "peer%d" % self.globalPeerCount
        peer = network.addHost(name, ip='%s/%d' % (p.ip, p.mask),
                               mac=p.mac)
        network.addLink(router, peer, **self.linkopts)

        self.networksToLaunch[name] = p.networks
예제 #4
0
    def nextSubnetHost(self, addr, mask, gw):
        try:
            last_ip = self.subnetHostLastIP[subnetStr(addr, mask)]
        except KeyError:
            last_ip = gw

        pieces = last_ip.split('.')
        pieces[3] = str(1 + int(pieces[3]))
        next_ip = '.'.join(pieces)
        # If IP has been used by the gw, find a nother available one
        if next_ip in self.gwIPList:
            pieces = next_ip.split('.')
            pieces[3] = str(1 + int(pieces[3]))
            next_ip = '.'.join(pieces)

        self.subnetHostLastIP[subnetStr(addr, mask)] = next_ip
        return next_ip
예제 #5
0
파일: FlowlogMN.py 프로젝트: 8472/FlowLog
    def nextSubnetHost(self, addr, mask, gw):
      try:
        last_ip = self.subnetHostLastIP[subnetStr(addr, mask)]
      except KeyError:
        last_ip = gw

      pieces = last_ip.split('.')
      pieces[3] = str(1 + int(pieces[3]))
      next_ip = '.'.join(pieces)
      # If IP has been used by the gw, find a nother available one
      if next_ip in self.gwIPList:
      	pieces = next_ip.split('.')
      	pieces[3] = str(1 + int(pieces[3]))
      	next_ip = '.'.join(pieces)

      self.subnetHostLastIP[subnetStr(addr, mask)] = next_ip
      return next_ip
예제 #6
0
    def buildRouter(self, network, r, create_edge, create_srs):
        r.name = r.name.encode('ascii', 'ignore')

        router = network.addSwitch(r.name + '-rtr',
                                   dpid=self.padDpid(r.self_dpid))

        nat = network.addSwitch(r.name + '-nat', dpid=self.padDpid(r.nat_dpid))
        network.addLink(router, nat, **self.linkopts)

        translator = network.addSwitch(r.name + '-tr',
                                       dpid=self.padDpid(r.tr_dpid))
        acl_table = network.addSwitch(r.name + '-acl',
                                      dpid=self.padDpid(r.acl_dpid))
        vlan = network.addSwitch(r.name + '-vlan',
                                 dpid=self.padDpid(r.vlan_dpid))

        for (i, s) in enumerate(r.subnets):
            s.gw = s.gw.encode('ascii', 'ignore')
            N = i + 1
            inPt = 2 * N - 1
            outPt = 2 * N
            rtrPt = N + 1

            network.addLink(vlan,
                            acl_table,
                            port1=r.num_physical + N,
                            port2=inPt,
                            **self.linkopts)
            network.addLink(acl_table,
                            translator,
                            port1=outPt,
                            port2=inPt,
                            **self.linkopts)
            network.addLink(translator,
                            router,
                            port1=outPt,
                            port2=rtrPt,
                            **self.linkopts)

        if not create_srs:
            return  # Don't create anything

        for p in r.ports:
            # Not a vlan tag
            if p.vlan_type == '':

                s = filter(lambda x: p.id in x.physical_portid, r.subnets)[0]

                srs = self.subnetRootSwitch[subnetStr(s.addr, s.mask)]
                network.addLink(srs, vlan, port2=p.id, **self.linkopts)

                # if there's room for hosts, add an edge switch with some hosts!
                if s.mask < 30 and create_edge:
                    self.globalEdgeSwCount += 1
                    edge_switch = network.addSwitch(
                        's' + str(self.globalEdgeSwCount))
                    network.addLink(srs, edge_switch, **self.linkopts)

                    for h in irange(1, self.numHostsPerSubnet):
                        self.globalHostCount += 1
                        name = "host%d" % self.globalHostCount
                        ip = self.nextSubnetHost(s.addr, s.mask, s.gw)

                        host = network.addHost(
                            name,
                            ip='%s/%d' % (ip, s.mask),
                            defaultRoute='dev %s-eth0 via %s' % (name, s.gw))
                        network.addLink(host, edge_switch, **self.linkopts)

            elif p.vlan_type.lower() == 'access':
                s = filter(lambda x: p.id in x.physical_portid, r.subnets)

                if len(s) == 0:
                    print "Warning! %s:%s is not in a subnet!" % (r.name,
                                                                  p.name)
                    continue
                s = s[0]

                if s.mask < 30 and create_edge:
                    self.globalHostCount += 1
                    name = "host%d" % self.globalHostCount
                    ip = self.nextSubnetHost(s.addr, s.mask, s.gw)

                    host = network.addHost(name,
                                           ip='%s/%d' % (ip, s.mask),
                                           defaultRoute='dev %s-eth0 via %s' %
                                           (name, s.gw))

                    network.addLink(host, vlan, port2=p.id, **self.linkopts)

            elif p.vlan_type.lower() == 'trunk':
                self.trunkPorts[r.name.lower(), p.name.lower()] = p.id
예제 #7
0
파일: FlowlogMN.py 프로젝트: 8472/FlowLog
    def buildRouter(self, network, r, create_edge, create_srs):
      r.name = r.name.encode('ascii', 'ignore')

      router = network.addSwitch(r.name + '-rtr',
                                 dpid=self.padDpid(r.self_dpid))

      nat = network.addSwitch(r.name + '-nat',
                              dpid=self.padDpid(r.nat_dpid))
      network.addLink(router, nat, **self.linkopts)

      translator = network.addSwitch(r.name + '-tr',
                                     dpid=self.padDpid(r.tr_dpid))
      acl_table = network.addSwitch(r.name + '-acl',
                                    dpid=self.padDpid(r.acl_dpid))
      vlan = network.addSwitch(r.name + '-vlan',
                                    dpid=self.padDpid(r.vlan_dpid))

      for (i, s) in enumerate(r.subnets):
        s.gw = s.gw.encode('ascii', 'ignore')
        N = i + 1
        inPt = 2 * N - 1
        outPt = 2 * N
        rtrPt = N + 1

        network.addLink(vlan, acl_table, port1=r.num_physical+N, port2=inPt,
                        **self.linkopts)
        network.addLink(acl_table, translator, port1=outPt, port2=inPt,
                        **self.linkopts)
        network.addLink(translator, router, port1=outPt, port2=rtrPt,
                        **self.linkopts)


      if not create_srs:
        return # Don't create anything

      for p in r.ports:
        # Not a vlan tag
        if p.vlan_type == '':

            s = filter(lambda x: p.id in x.physical_portid, r.subnets)[0]

            srs = self.subnetRootSwitch[subnetStr(s.addr, s.mask)]
            network.addLink(srs, vlan, port2=p.id, **self.linkopts)

            # if there's room for hosts, add an edge switch with some hosts!
            if s.mask < 30 and create_edge:
              self.globalEdgeSwCount += 1
              edge_switch = network.addSwitch('s' + str(self.globalEdgeSwCount))
              network.addLink(srs, edge_switch, **self.linkopts)

              for h in irange(1, self.numHostsPerSubnet):
                self.globalHostCount += 1
                name = "host%d" % self.globalHostCount
                ip = self.nextSubnetHost(s.addr, s.mask, s.gw)

                host = network.addHost(name, ip='%s/%d' % (ip, s.mask),
                                       defaultRoute='dev %s-eth0 via %s'
                                       % (name, s.gw))
                network.addLink(host, edge_switch, **self.linkopts)

        elif p.vlan_type.lower() == 'access':
            s = filter(lambda x: p.id in x.physical_portid, r.subnets)

            if len(s) == 0:
                print "Warning! %s:%s is not in a subnet!" % (r.name, p.name)
                continue
            s = s[0]

            if s.mask < 30 and create_edge:
                self.globalHostCount += 1
                name = "host%d" % self.globalHostCount
                ip = self.nextSubnetHost(s.addr, s.mask, s.gw)


                host = network.addHost(name, ip='%s/%d' % (ip, s.mask),
                                           defaultRoute='dev %s-eth0 via %s'
                                           % (name, s.gw))

                network.addLink(host, vlan, port2 = p.id, **self.linkopts)

        elif p.vlan_type.lower() == 'trunk':
            self.trunkPorts[r.name.lower(), p.name.lower()] = p.id