treewide: Remove trailing whitespace
[sliver-openvswitch.git] / vswitchd / ovs-brcompatd.c
index b503705..39c1101 100644 (file)
 #include "timeval.h"
 #include "unixctl.h"
 #include "util.h"
+#include "vlog.h"
 #include "vswitchd/vswitch-idl.h"
 
-#include "vlog.h"
-#define THIS_MODULE VLM_brcompatd
+VLOG_DEFINE_THIS_MODULE(brcompatd)
 
 
 /* xxx Just hangs if datapath is rmmod/insmod.  Learn to reconnect? */
@@ -75,7 +75,7 @@ static void usage(void) NO_RETURN;
 
 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 60);
 
-/* Maximum number of milliseconds to wait before pruning port entries that 
+/* Maximum number of milliseconds to wait before pruning port entries that
  * no longer exist.  If set to zero, ports are never pruned. */
 static int prune_timeout = 5000;
 
@@ -115,7 +115,7 @@ lookup_brc_multicast_group(int *multicast_group)
         return retval;
     }
     ofpbuf_init(&request, 0);
-    nl_msg_put_genlmsghdr(&request, sock, 0, brc_family,
+    nl_msg_put_genlmsghdr(&request, 0, brc_family,
             NLM_F_REQUEST, BRC_GENL_C_QUERY_MC, 1);
     retval = nl_sock_transact(sock, &request, &reply);
     ofpbuf_uninit(&request);
@@ -224,7 +224,7 @@ execute_appctl_command(const char *unixctl_command, char **output)
 }
 
 static void
-do_get_bridge_parts(const struct ovsrec_bridge *br, struct svec *parts, 
+do_get_bridge_parts(const struct ovsrec_bridge *br, struct svec *parts,
                     int vlan, bool break_down_bonds)
 {
     struct svec ports;
@@ -261,7 +261,7 @@ do_get_bridge_parts(const struct ovsrec_bridge *br, struct svec *parts,
  * reported.  If 'vlan' > 0, only interfaces with implicit VLAN 'vlan' are
  * reported.  */
 static void
-get_bridge_ifaces(const struct ovsrec_bridge *br, struct svec *ifaces, 
+get_bridge_ifaces(const struct ovsrec_bridge *br, struct svec *ifaces,
                   int vlan)
 {
     do_get_bridge_parts(br, ifaces, vlan, true);
@@ -274,74 +274,12 @@ get_bridge_ifaces(const struct ovsrec_bridge *br, struct svec *ifaces,
  * only trunk ports or ports with implicit VLAN 0 are reported.  If 'vlan' > 0,
  * only port with implicit VLAN 'vlan' are reported.  */
 static void
-get_bridge_ports(const struct ovsrec_bridge *br, struct svec *ports, 
+get_bridge_ports(const struct ovsrec_bridge *br, struct svec *ports,
                  int vlan)
 {
     do_get_bridge_parts(br, ports, vlan, false);
 }
 
-#if 0
-/* Go through the configuration file and remove any ports that no longer
- * exist associated with a bridge. */
-static void
-prune_ports(void)
-{
-    int i, j;
-    struct svec bridges, delete;
-
-    if (cfg_lock(NULL, 0)) {
-        /* Couldn't lock config file. */
-        return;
-    }
-
-    svec_init(&bridges);
-    svec_init(&delete);
-    cfg_get_subsections(&bridges, "bridge");
-    for (i=0; i<bridges.n; i++) {
-        const char *br_name = bridges.names[i];
-        struct svec ifaces;
-
-        /* Check that each bridge interface exists. */
-        svec_init(&ifaces);
-        get_bridge_ifaces(br_name, &ifaces, -1);
-        for (j = 0; j < ifaces.n; j++) {
-            const char *iface_name = ifaces.names[j];
-
-            /* The local port and internal ports are created and destroyed by
-             * ovs-vswitchd itself, so don't bother checking for them at all.
-             * In practice, they might not exist if ovs-vswitchd hasn't
-             * finished reloading since the configuration file was updated. */
-            if (!strcmp(iface_name, br_name)
-                || cfg_get_bool(0, "iface.%s.internal", iface_name)) {
-                continue;
-            }
-
-            if (!netdev_exists(iface_name)) {
-                VLOG_INFO_RL(&rl, "removing dead interface %s from %s",
-                             iface_name, br_name);
-                svec_add(&delete, iface_name);
-            }
-        }
-        svec_destroy(&ifaces);
-    }
-    svec_destroy(&bridges);
-
-    if (delete.n) {
-        size_t i;
-
-        for (i = 0; i < delete.n; i++) {
-            cfg_del_match("bridge.*.port=%s", delete.names[i]);
-            cfg_del_match("bonding.*.slave=%s", delete.names[i]);
-        }
-        reload_config();
-        cfg_unlock();
-    } else {
-        cfg_unlock();
-    }
-    svec_destroy(&delete);
-}
-#endif
-
 static struct ovsdb_idl_txn *
 txn_from_openvswitch(const struct ovsrec_open_vswitch *ovs)
 {
@@ -361,7 +299,7 @@ ovs_insert_bridge(const struct ovsrec_open_vswitch *ovs,
                   struct ovsrec_bridge *bridge)
 {
     struct ovsrec_bridge **bridges;
-    size_t i;     
+    size_t i;
 
     bridges = xmalloc(sizeof *ovs->bridges * (ovs->n_bridges + 1));
     for (i = 0; i < ovs->n_bridges; i++) {
@@ -370,7 +308,7 @@ ovs_insert_bridge(const struct ovsrec_open_vswitch *ovs,
     bridges[ovs->n_bridges] = bridge;
     ovsrec_open_vswitch_set_bridges(ovs, bridges, ovs->n_bridges + 1);
     free(bridges);
-}   
+}
 
 static struct json *
 where_uuid_equals(const struct uuid *uuid)
@@ -499,18 +437,18 @@ add_bridge(struct ovsdb_idl *idl, const struct ovsrec_open_vswitch *ovs,
     port = ovsrec_port_insert(txn_from_openvswitch(ovs));
     ovsrec_port_set_name(port, br_name);
     ovsrec_port_set_interfaces(port, &iface, 1);
-    
+
     br = ovsrec_bridge_insert(txn_from_openvswitch(ovs));
     ovsrec_bridge_set_name(br, br_name);
     ovsrec_bridge_set_ports(br, &port, 1);
-    
+
     ovs_insert_bridge(ovs, br);
 
     return commit_txn(txn, true);
 }
 
 static void
-add_port(const struct ovsrec_open_vswitch *ovs, 
+add_port(const struct ovsrec_open_vswitch *ovs,
          const struct ovsrec_bridge *br, const char *port_name)
 {
     struct ovsrec_interface *iface;
@@ -661,8 +599,8 @@ del_bridge(struct ovsdb_idl *idl,
     if (br->sflow) {
         ovsrec_sflow_delete(br->sflow);
     }
-    if (br->controller) {
-        ovsrec_controller_delete(br->controller);
+    for (i = 0; i < br->n_controller; i++) {
+        ovsrec_controller_delete(br->controller[i]);
     }
 
     /* Remove 'br' from the vswitch's list of bridges. */
@@ -725,7 +663,7 @@ static struct ofpbuf *
 compose_reply(uint32_t seq, int error)
 {
     struct ofpbuf *reply = ofpbuf_new(4096);
-    nl_msg_put_genlmsghdr(reply, brc_sock, 32, brc_family, NLM_F_REQUEST,
+    nl_msg_put_genlmsghdr(reply, 32, brc_family, NLM_F_REQUEST,
                           BRC_GENL_C_DP_RESULT, 1);
     ((struct nlmsghdr *) reply->data)->nlmsg_seq = seq;
     nl_msg_put_u32(reply, BRC_GENL_A_ERR_CODE, error);
@@ -754,7 +692,7 @@ send_simple_reply(uint32_t seq, int error)
 
 static int
 handle_bridge_cmd(struct ovsdb_idl *idl,
-                  const struct ovsrec_open_vswitch *ovs, 
+                  const struct ovsrec_open_vswitch *ovs,
                   struct ofpbuf *buffer, bool add)
 {
     const char *br_name;
@@ -921,7 +859,7 @@ handle_fdb_query_cmd(const struct ovsrec_open_vswitch *ovs,
     }
 
     /* Figure out vswitchd bridge and VLAN. */
-    error = linux_bridge_to_ovs_bridge(ovs, linux_name, 
+    error = linux_bridge_to_ovs_bridge(ovs, linux_name,
                                        &ovs_bridge, &br_vlan);
     if (error) {
         send_simple_reply(seq, error);
@@ -1119,7 +1057,7 @@ handle_get_ports_cmd(const struct ovsrec_open_vswitch *ovs,
         return error;
     }
 
-    error = linux_bridge_to_ovs_bridge(ovs, linux_name, 
+    error = linux_bridge_to_ovs_bridge(ovs, linux_name,
                                        &ovs_bridge, &br_vlan);
     if (error) {
         send_simple_reply(seq, error);
@@ -1234,7 +1172,7 @@ rtnl_recv_update(struct ovsdb_idl *idl,
     } else if (error == ENOBUFS) {
         VLOG_WARN_RL(&rl, "network monitor socket overflowed");
     } else if (error) {
-        VLOG_WARN_RL(&rl, "error on network monitor socket: %s", 
+        VLOG_WARN_RL(&rl, "error on network monitor socket: %s",
                 strerror(error));
     } else {
         struct nlattr *attrs[ARRAY_SIZE(rtnlgrp_link_policy)];
@@ -1247,8 +1185,8 @@ rtnl_recv_update(struct ovsdb_idl *idl,
             VLOG_WARN_RL(&rl, "received bad rtnl message (no ifinfomsg)");
             ofpbuf_delete(buf);
             return;
-        } 
-    
+        }
+
         if (!nl_policy_parse(buf, NLMSG_HDRLEN + sizeof(struct ifinfomsg),
                              rtnlgrp_link_policy,
                              attrs, ARRAY_SIZE(rtnlgrp_link_policy))) {
@@ -1278,7 +1216,7 @@ rtnl_recv_update(struct ovsdb_idl *idl,
 
                 br = find_bridge(ovs, br_name);
                 if (!br) {
-                    VLOG_WARN("no bridge named %s from which to remove %s", 
+                    VLOG_WARN("no bridge named %s from which to remove %s",
                             br_name, port_name);
                     ofpbuf_delete(buf);
                     return;
@@ -1349,6 +1287,7 @@ rtnl_recv_update(struct ovsdb_idl *idl,
 int
 main(int argc, char *argv[])
 {
+    extern struct vlog_module VLM_reconnect;
     struct unixctl_server *unixctl;
     const char *remote;
     struct ovsdb_idl *idl;
@@ -1356,10 +1295,8 @@ main(int argc, char *argv[])
 
     proctitle_init(argc, argv);
     set_program_name(argv[0]);
-    time_init();
-    vlog_init();
-    vlog_set_levels(VLM_ANY_MODULE, VLF_CONSOLE, VLL_WARN);
-    vlog_set_levels(VLM_reconnect, VLF_ANY_FACILITY, VLL_WARN);
+    vlog_set_levels(NULL, VLF_CONSOLE, VLL_WARN);
+    vlog_set_levels(&VLM_reconnect, VLF_ANY_FACILITY, VLL_WARN);
 
     remote = parse_options(argc, argv);
     signal(SIGPIPE, SIG_IGN);
@@ -1406,8 +1343,8 @@ main(int argc, char *argv[])
         netdev_run();
 
         /* If 'prune_timeout' is non-zero, we actively prune from the
-         * configuration of port entries that are no longer valid.  We 
-         * use two methods: 
+         * configuration of port entries that are no longer valid.  We
+         * use two methods:
          *
          *   1) The kernel explicitly notifies us of removed ports
          *      through the RTNL messages.
@@ -1417,10 +1354,6 @@ main(int argc, char *argv[])
          */
         if (ovs && prune_timeout) {
             rtnl_recv_update(idl, ovs);
-#if 0
-            prune_ports();
-#endif
-
             nl_sock_wait(rtnl_sock, POLLIN);
             poll_timer_wait(prune_timeout);
         }