Setting tag pyplnet-4.3-9
[pyplnet.git] / plnet.py
index 2aee4ec..76e1307 100755 (executable)
--- a/plnet.py
+++ b/plnet.py
@@ -1,11 +1,11 @@
 #!/usr/bin/python /usr/bin/plcsh
-# $Id$
 
 import os
 import socket
 import time
 import tempfile
 import errno
+import struct
 
 import sioc
 import modprobe
@@ -43,7 +43,7 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa
     failedToGetSettings = False
 
     # NOTE: GetInterfaces/NodeNetworks does not necessarily order the interfaces
-    # returned.  Because 'interface'is decremented as each interface is processed,
+    # returned.  Because 'interface' is decremented as each interface is processed,
     # by the time is_primary=True (primary) interface is reached, the device
     # "eth%s" % interface, is not eth0.  But, something like eth-4, or eth-12.
     # This code sorts the interfaces, placing is_primary=True interfaces first.  
@@ -255,6 +255,7 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa
 
     # 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")
@@ -265,8 +266,8 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa
         
         # print the configuration values
         for (key, val) in details.iteritems():
-            if key not in ('IFNAME','ALIAS','CFGOPTIONS','DRIVER'):
-                f.write('%s=%s\n' % (key, val))
+            if key not in ('IFNAME','ALIAS','CFGOPTIONS','DRIVER','GATEWAY'):
+                f.write('%s="%s"\n' % (key, val))
 
         # print the configuration specific option values (if any)
         if 'CFGOPTIONS' in details:
@@ -279,7 +280,6 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa
                 val=val.strip()
                 f.write('%s="%s"\n' % (key,val))
         f.close()
-        os.close(fd)
 
         # compare whether two files are the same
         def comparefiles(a,b):
@@ -302,18 +302,14 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa
         src_route_changed = False
         if ('PRIMARY' not in details and 'GATEWAY' in details and
             details['GATEWAY'] != ''):
-            i = len(dev) - 1
-            while dev[i - 1].isdigit():
-                i -= 1
-            table = 10 + int(dev[i:])
+            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.unlink(rule_dest)
                 os.rename(rule_tmpnam, rule_dest)
-                os.chmod(0644, rule_dest)
+                os.chmod(rule_dest, 0644)
                 src_route_changed = True
             else:
                 os.unlink(rule_tmpnam)
@@ -331,9 +327,8 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa
             os.close(fd)
             route_dest = "%s/route-%s" % (sysconfig, dev)
             if not comparefiles(route_tmpnam, route_dest):
-                os.unlink(route_dest)
                 os.rename(route_tmpnam, route_dest)
-                os.chmod(0644, route_dest)
+                os.chmod(route_dest, 0644)
                 src_route_changed = True
             else:
                 os.unlink(route_tmpnam)
@@ -412,6 +407,7 @@ if __name__ == "__main__":
                       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)