Drop separate vswitch-cfg-update.log.
[openvswitch] / xenserver / opt_xensource_libexec_interface-reconfigure
index 5681d02d2f6ea7b9abd598065046b0c1eb42e70e..eae198b914823d23bdc819922b5e638efe4861d6 100755 (executable)
@@ -5,22 +5,26 @@
 #
 """Usage:
 
-    %(command-name)s --session <SESSION-REF> --pif <PIF-REF> [up|down|rewrite]
-    %(command-name)s --force <BRIDGE> [up|down|rewrite <CONFIG>]
+    %(command-name)s <PIF> up
+    %(command-name)s <PIF> down
+    %(command-name)s [<PIF>] rewrite
+    %(command-name)s --force <BRIDGE> up
+    %(command-name)s --force <BRIDGE> down
+    %(command-name)s --force <BRIDGE> rewrite --device=<INTERFACE> <CONFIG>
     %(command-name)s --force all down
 
-    where,
-          <CONFIG> = --device=<INTERFACE> --mode=dhcp
-          <CONFIG> = --device=<INTERFACE> --mode=static --ip=<IPADDR> --netmask=<NM> [--gateway=<GW>]
+    where <PIF> is one of:
+       --session <SESSION-REF> --pif <PIF-REF>
+       --pif-uuid <PIF-UUID>
+    and <CONFIG> is one of:
+       --mode=dhcp
+       --mode=static --ip=<IPADDR> --netmask=<NM> [--gateway=<GW>]
 
   Options:
     --session          A session reference to use to access the xapi DB
-    --pif               A PIF reference.
-    --force-interface  An interface name. Mutually exclusive with --session/--pif.
-
-  Either both --session and --pif  or just --pif-uuid.
-  
-  <ACTION> is either "up" or "down" or "rewrite"
+    --pif               A PIF reference within the session.
+    --pif-uuid          The UUID of a PIF.
+    --force             An interface name.
 """
 
 #
@@ -28,7 +32,6 @@
 #
 #  --output-directory=<DIR>    Write configuration to <DIR>. Also disables actually
 #                               raising/lowering the interfaces
-#  --pif-uuid                  A PIF UUID, use instead of --session/--pif.
 #
 #
 #
@@ -700,10 +703,7 @@ def log_pif_action(action, pif):
     rec['ip_configuration_mode'] = pifrec['ip_configuration_mode']
     rec['action'] = action
     rec['interface-name'] = interface_name(pif)
-    if action == "rewrite":
-        rec['message'] = "Rewrite PIF %(uuid)s configuration" % rec
-    else:
-        rec['message'] = "Bring %(action)s PIF %(uuid)s" % rec
+    rec['message'] = "Bring %(action)s PIF %(uuid)s" % rec
     log("%(message)s: %(interface-name)s configured as %(ip_configuration_mode)s" % rec)
 
 def get_bond_masters_of_pif(pif):
@@ -1030,7 +1030,7 @@ def configure_physdev(pif):
     run_ethtool(device, oc)
 
 def modify_config(commands):
-    run_command(['/root/vswitch/bin/ovs-cfg-mod', '-vANY:console:emer',
+    run_command(['/usr/bin/ovs-cfg-mod', '-vANY:console:emer',
                  '-F', '/etc/ovs-vswitchd.conf']
                 + commands + ['-c'])
     run_command(['/sbin/service', 'vswitch', 'reload'])
@@ -1190,7 +1190,7 @@ def action_up(pif):
     # - The networks corresponding to any VLANs attached to the
     #   datapath's PIF.
     network_uuids = []
-    for nwpif in db.get_pifs_by_device({'device': pifrec['device']}):
+    for nwpif in db.get_pifs_by_device(pifrec['device']):
         net = db.get_pif_record(nwpif)['network']
         network_uuids += [db.get_network_record(net)['uuid']]
 
@@ -1237,6 +1237,8 @@ def action_up(pif):
 
     # Bring up VLAN slave, plus physical devices other than bond
     # slaves (which we brought up earlier).
+    # XXX need to bring up bond itself.
+    # XXX need to set MAC address on fake bridge
     if vlan_slave:
         up_netdev(ipdev_name(vlan_slave))
     for physdev_pif in set(physdev_pifs) - set(bond_slave_physdev_pifs):
@@ -1313,6 +1315,7 @@ def action_down(pif):
         log("VLAN masters of %s - %s" % (rec['device'], [interface_name(m) for m in vlan_masters]))
         for m in vlan_masters:
             if db.get_pif_record(m)['currently_attached']:
+                # XXX remove IP address
                 log("Leaving %s up due to currently attached VLAN master %s" % (interface, interface_name(m)))
                 return
 
@@ -1368,6 +1371,9 @@ def action_rewrite(pif):
     # We have no code of our own to run here.
     pass
 
+def action_force_rewrite(interface, config):
+    raise Error("Force rewrite is not implemented yet.")
+
 def main(argv=None):
     global output_directory, management_pif
     
@@ -1390,7 +1396,6 @@ def main(argv=None):
                         "force=",
                         "force-interface=",
                         "management",
-                        "test-mode",
                         "device=", "mode=", "ip=", "netmask=", "gateway=",
                         "help" ]
             arglist, args = getopt.gnu_getopt(argv[1:], shortops, longops)
@@ -1427,6 +1432,10 @@ def main(argv=None):
             raise Usage("Too many arguments")
 
         action = args[0]
+
+        if not action in ["up", "down", "rewrite", "rewrite-configuration"]:
+            raise Usage("Unknown action \"%s\"" % action)
+
         # backwards compatibility
         if action == "rewrite-configuration": action = "rewrite"
         
@@ -1438,6 +1447,8 @@ def main(argv=None):
             raise Usage("--session and --pif must be used together.")
         if force_interface and ( session or pif or pif_uuid ):
             raise Usage("--force is mutually exclusive with --session, --pif and --pif-uuid")
+        if force_interface == "all" and action != "down":
+            raise Usage("\"--force all\" only valid for down action")
         if len(force_rewrite_config) and not (force_interface and action == "rewrite"):
             raise Usage("\"--force rewrite\" needed for --device, --mode, --ip, --netmask, and --gateway")
 
@@ -1447,7 +1458,10 @@ def main(argv=None):
 
             if action == "rewrite":
                 action_force_rewrite(force_interface, force_rewrite_config)
-            else:
+            elif action in ["up", "down"]:
+                if action == "down" and force_interface == "all":
+                    raise Error("Force all interfaces down not implemented yet")
+
                 db = DatabaseCache(cache_file=dbcache_file)
                 pif = db.get_pif_by_bridge(force_interface)
                 management_pif = db.get_management_pif()
@@ -1456,39 +1470,42 @@ def main(argv=None):
                     action_up(pif)
                 elif action == "down":
                     action_down(pif)
-                else:
-                    raise Usage("Unknown action %s"  % action)
+            else:
+                raise Error("Unknown action %s"  % action)
         else:
             db = DatabaseCache(session_ref=session)
 
             if pif_uuid:
                 pif = db.get_pif_by_uuid(pif_uuid)
-        
-            if not pif:
-                raise Usage("No PIF given")
 
-            if force_management:
-                # pif is going to be the management pif 
-                management_pif = pif
+            if action == "rewrite" and not pif:
+                pass
             else:
-                # pif is not going to be the management pif.
-                # Search DB cache for pif on same host with management=true
-                pifrec = db.get_pif_record(pif)
-                management_pif = db.get_management_pif()
+                if not pif:
+                    raise Usage("No PIF given")
 
-            log_pif_action(action, pif)
+                if force_management:
+                    # pif is going to be the management pif 
+                    management_pif = pif
+                else:
+                    # pif is not going to be the management pif.
+                    # Search DB cache for pif on same host with management=true
+                    pifrec = db.get_pif_record(pif)
+                    management_pif = db.get_management_pif()
 
-            if not check_allowed(pif):
-                return 0
+                log_pif_action(action, pif)
 
-            if action == "up":
-                action_up(pif)
-            elif action == "down":
-                action_down(pif)
-            elif action == "rewrite":
-                action_rewrite(pif)
-            else:
-                raise Usage("Unknown action %s"  % action)
+                if not check_allowed(pif):
+                    return 0
+
+                if action == "up":
+                    action_up(pif)
+                elif action == "down":
+                    action_down(pif)
+                elif action == "rewrite":
+                    action_rewrite(pif)
+                else:
+                    raise Error("Unknown action %s"  % action)
 
             # Save cache.
             db.save(dbcache_file)