Setting tag plcapi-5.4-2
[plcapi.git] / PLC / Interfaces.py
index db8ef50..0e6c728 100644 (file)
@@ -27,7 +27,7 @@ def valid_ipv4(ip):
 
 def valid_ipv6(ip):
     try:
-        ip = socket.inet_ntop(socket.AF_INET6, socket.inet_pton(socket.AF_INET6, ip)
+        ip = socket.inet_ntop(socket.AF_INET6, socket.inet_pton(socket.AF_INET6, ip))
         return True
     except socket.error:
         return False   
@@ -208,26 +208,31 @@ class Interface(Row):
             # DHCP!
 
         elif method == "static":
-            for key in ['gateway', 'dns1']:
-                if key not in self or not self[key]:
-                   if 'is_primary' in self and self['is_primary'] is True:
-                        raise PLCInvalidArgument, "For static method primary network, %s is required" % key
-                else:
+            if self['type'] == 'ipv4':
+                for key in ['gateway', 'dns1']:
+                    if key not in self or not self[key]:
+                        if 'is_primary' in self and self['is_primary'] is True:
+                            raise PLCInvalidArgument, "For static method primary network, %s is required" % key
+                    else:
+                        globals()[key] = self[key]
+                for key in ['ip', 'network', 'broadcast', 'netmask']:
+                    if key not in self or not self[key]:
+                        raise PLCInvalidArgument, "For static method, %s is required" % key
+                    globals()[key] = self[key]
+                if not in_same_network(ip, network, netmask):
+                    raise PLCInvalidArgument, "IP address %s is inconsistent with network %s/%s" % \
+                          (ip, network, netmask)
+                if not in_same_network(broadcast, network, netmask):
+                    raise PLCInvalidArgument, "Broadcast address %s is inconsistent with network %s/%s" % \
+                          (broadcast, network, netmask)
+                if 'gateway' in globals() and not in_same_network(ip, gateway, netmask):
+                    raise PLCInvalidArgument, "Gateway %s is not reachable from %s/%s" % \
+                          (gateway, ip, netmask)
+            elif self['type'] == 'ipv6':
+                for key in ['ip', 'gateway']:
+                    if key not in self or not self[key]:
+                        raise PLCInvalidArgument, "For static ipv6 method, %s is required" % key
                     globals()[key] = self[key]
-            for key in ['ip', 'network', 'broadcast', 'netmask']:
-                if key not in self or not self[key]:
-                    raise PLCInvalidArgument, "For static method, %s is required" % key
-                globals()[key] = self[key]
-            if not in_same_network(ip, network, netmask):
-                raise PLCInvalidArgument, "IP address %s is inconsistent with network %s/%s" % \
-                      (ip, network, netmask)
-            if not in_same_network(broadcast, network, netmask):
-                raise PLCInvalidArgument, "Broadcast address %s is inconsistent with network %s/%s" % \
-                      (broadcast, network, netmask)
-            if 'gateway' in globals() and not in_same_network(ip, gateway, netmask):
-                raise PLCInvalidArgument, "Gateway %s is not reachable from %s/%s" % \
-                      (gateway, ip, netmask)
-
         elif method == "ipmi":
             if 'ip' not in self or not self['ip']:
                 raise PLCInvalidArgument, "For ipmi method, ip is required"