return '.'.join(start) + ',' + '.'.join(end)
-def InitPlanetStack(plc, data):
-
- for interface in data[KEY_NAME]:
- try:
- settings = plc.GetInterfaceTags({'interface_tag_id': interface['interface_tag_ids']})
- except:
- continue
-
- tags = {}
- for setting in settings:
- tags[setting['tagname'].upper()] = setting['value']
-
- if 'IFNAME' in tags:
- dev = tags['IFNAME']
- else:
- # Skip devices that don't have names
- logger.log('net:InitPlanetStack: Device has no name, skipping...')
- continue
-
- logger.log('net:InitPlanetStack: Processing device %s' % dev)
-
- if 'NAT' in tags:
- # Enable iptables MASQ on this device
- # Right now the subnet is hardcoded, should instead use interface's subnet
- ipaddr = interface['ip']
- netmask = interface['netmask']
-
- if (ipaddr and netmask):
- try:
- cidr = to_cidr(ipaddr, netmask)
- except:
- logger.log('net:InitPlanetStack: could not convert ipaddr %s and netmask %s to CIDR' % (ipaddr, netmask))
-
- if cidr:
- cmd = ['/sbin/iptables', '-t', 'nat', '-C', 'POSTROUTING', '-s', cidr,
- '!', '-d', cidr, '-j', 'MASQUERADE']
- try:
- logger.log('net:InitPlanetStack: checking if NAT iptables rule present for device %s' % dev)
- subprocess.check_call(cmd)
- except:
- logger.log('net:InitPlanetStack: adding NAT iptables NAT for device %s' % dev)
- cmd[3] = '-A'
- try:
- subprocess.check_call(cmd)
- except:
- logger.log('net:InitPlanetStack: failed to add NAT iptables rule for device %s' % dev)
-
- # Enable dnsmasq for this interface
- # Check if dnsmasq already running
- start_dnsmasq = True
- pidfile = '/var/run/dnsmasq-%s.pid' % dev
- try:
- pid = open(pidfile, 'r').read().strip()
- if os.path.exists('/proc/%s' % pid):
- start_dnsmasq = False
- logger.log('net:InitPlanetStack: dnsmasq already running on device %s' % dev)
- except:
- pass
-
- if start_dnsmasq:
- try:
- logger.log('net:InitPlanetStack: starting dnsmasq on device %s' % dev)
- iprange = ipaddr_range(interface['network'], interface['broadcast'])
- logger.log('net:InitPlanetStack: IP range: %s' % iprange)
- subprocess.check_call(['/usr/sbin/dnsmasq',
- '--strict-order',
- '--bind-interfaces',
- '--local=//',
- '--domain-needed',
- '--pid-file=%s' % pidfile,
- '--conf-file=',
- '--interface=%s' % dev,
- '--dhcp-range=%s' % iprange,
- '--dhcp-leasefile=/var/lib/dnsmasq/%s.leases' % dev,
- '--dhcp-no-override'])
-
- except:
- logger.log('net:InitPlanetStack: failed to start dnsmasq for device %s' % dev)