import time
import tempfile
import errno
+import struct
import sioc
import modprobe
details['BOOTPROTO'] = "static"
details['IPADDR'] = interface['ip']
details['NETMASK'] = interface['netmask']
+ details['GATEWAY'] = interface['gateway']
if interface['is_primary']:
gateway = interface['gateway']
if interface['dns1']:
# Process ifcfg-$dev changes / additions
newdevs = []
+ table = 10
for (dev, details) in devices_map.iteritems():
(fd, tmpnam) = tempfile.mkstemp(dir=sysconfig)
f = os.fdopen(fd, "w")
# print the configuration values
for (key, val) in details.iteritems():
- if key not in ('IFNAME','ALIAS','CFGOPTIONS','DRIVER'):
+ if key not in ('IFNAME','ALIAS','CFGOPTIONS','DRIVER','GATEWAY'):
f.write('%s=%s\n' % (key, val))
# print the configuration specific option values (if any)
except IOError, e:
return False
+ src_route_changed = False
+ if ('PRIMARY' not in details and 'GATEWAY' in details and
+ details['GATEWAY'] != ''):
+ table += 1
+ (fd, rule_tmpnam) = tempfile.mkstemp(dir=sysconfig)
+ os.write(fd, "from %s lookup %d\n" % (details['IPADDR'], table))
+ os.close(fd)
+ rule_dest = "%s/rule-%s" % (sysconfig, dev)
+ if not comparefiles(rule_tmpnam, rule_dest):
+ os.rename(rule_tmpnam, rule_dest)
+ os.chmod(rule_dest, 0644)
+ src_route_changed = True
+ else:
+ os.unlink(rule_tmpnam)
+ (fd, route_tmpnam) = tempfile.mkstemp(dir=sysconfig)
+ netmask = struct.unpack("I", socket.inet_aton(details['NETMASK']))[0]
+ ip = struct.unpack("I", socket.inet_aton(details['IPADDR']))[0]
+ network = socket.inet_ntoa(struct.pack("I", (ip & netmask)))
+ netmask = socket.ntohl(netmask)
+ i = 0
+ while (netmask & (1 << i)) == 0:
+ i += 1
+ prefix = 32 - i
+ os.write(fd, "%s/%d dev %s table %d\n" % (network, prefix, dev, table))
+ os.write(fd, "default via %s dev %s table %d\n" % (details['GATEWAY'], dev, table))
+ os.close(fd)
+ route_dest = "%s/route-%s" % (sysconfig, dev)
+ if not comparefiles(route_tmpnam, route_dest):
+ os.rename(route_tmpnam, route_dest)
+ os.chmod(route_dest, 0644)
+ src_route_changed = True
+ else:
+ os.unlink(route_tmpnam)
+
path = "%s/ifcfg-%s" % (sysconfig,dev)
if not os.path.exists(path):
logger.verbose('net:InitInterfaces adding configuration for %s' % dev)
os.chmod(path,0644)
newdevs.append(dev)
- elif not comparefiles(tmpnam,path):
+ elif not comparefiles(tmpnam,path) or src_route_changed:
logger.verbose('net:InitInterfaces Configuration change for %s' % dev)
if not files_only:
logger.verbose('net:InitInterfaces ifdown %s' % dev)
dest="program", default="plnet")
(options, args) = parser.parse_args()
if len(args) != 1 or options.root is None:
+ print sys.argv
print >>sys.stderr, "Missing root or node_id"
parser.print_help()
sys.exit(1)