dpif: New function dpif_get_name().
authorBen Pfaff <blp@nicira.com>
Fri, 6 Mar 2009 22:03:24 +0000 (14:03 -0800)
committerBen Pfaff <blp@nicira.com>
Fri, 6 Mar 2009 22:03:24 +0000 (14:03 -0800)
This function is equivalent to querying the ODPP_LOCAL port, but its name
better reflects the caller's intent, and its interface is slightly more
convenient.

lib/dpif.c
lib/dpif.h
secchan/discovery.c
secchan/in-band.c
secchan/ofproto.c

index 84cef19b8b784c99054d06374473e3a49a7498fe..9b89a9e2235f3af8c22f60bc03bcba63796232cf 100644 (file)
@@ -185,6 +185,22 @@ dpif_create(const char *name, struct dpif *dpif)
     }
 }
 
+int
+dpif_get_name(struct dpif *dpif, char *name, size_t name_size)
+{
+    struct odp_port port;
+    int error;
+
+    assert(name_size > 0);
+    *name = '\0';
+
+    error = dpif_port_query_by_number(dpif, ODPP_LOCAL, &port);
+    if (!error) {
+        strlcpy(name, port.devname, name_size);
+    }
+    return error;
+}
+
 int
 dpif_delete(struct dpif *dpif)
 {
@@ -581,7 +597,7 @@ int
 dpifmon_create(const char *datapath_name, struct dpifmon **monp)
 {
     struct dpifmon *mon;
-    struct odp_port local;
+    char local_name[IFNAMSIZ];
     int error;
 
     mon = *monp = xmalloc(sizeof *mon);
@@ -590,16 +606,16 @@ dpifmon_create(const char *datapath_name, struct dpifmon **monp)
     if (error) {
         goto error;
     }
-    error = dpif_port_query_by_number(&mon->dpif, ODPP_LOCAL, &local);
+    error = dpif_get_name(&mon->dpif, local_name, sizeof local_name);
     if (error) {
         goto error_close_dpif;
     }
 
-    mon->local_ifindex = if_nametoindex(local.devname);
+    mon->local_ifindex = if_nametoindex(local_name);
     if (!mon->local_ifindex) {
         error = errno;
         VLOG_WARN("could not get ifindex of %s device: %s",
-                  local.devname, strerror(errno));
+                  local_name, strerror(errno));
         goto error_close_dpif;
     }
 
index c8e7a437179c5212ac19c6466e2a2d3e8ef8bad4..6067188e7d5b30a8073fd9716b5e831b39b5a1f7 100644 (file)
@@ -56,6 +56,8 @@ int dpif_open(const char *name, struct dpif *);
 int dpif_create(const char *name, struct dpif *);
 void dpif_close(struct dpif *);
 
+int dpif_get_name(struct dpif *, char *name, size_t name_size);
+
 int dpif_delete(struct dpif *);
 
 int dpif_get_dp_stats(const struct dpif *, struct odp_stats *);
index 087fa2a184de7cba1b18f96630d88bf860a4b6d8..2651a9b4d2703d7b62562c18d890b1d96e42ec24 100644 (file)
@@ -35,6 +35,7 @@
 #include "discovery.h"
 #include <errno.h>
 #include <inttypes.h>
+#include <net/if.h>
 #include <regex.h>
 #include <stdlib.h>
 #include <string.h>
@@ -115,7 +116,7 @@ discovery_create(const char *re, bool update_resolv_conf,
                  struct discovery **discoveryp)
 {
     struct discovery *d;
-    struct odp_port port;
+    char local_name[IF_NAMESIZE];
     int error;
 
     d = xcalloc(1, sizeof *d);
@@ -128,12 +129,12 @@ discovery_create(const char *re, bool update_resolv_conf,
     d->update_resolv_conf = update_resolv_conf;
 
     /* Initialize DHCP client. */
-    error = dpif_port_query_by_number(dpif, ODPP_LOCAL, &port);
+    error = dpif_get_name(dpif, local_name, sizeof local_name);
     if (error) {
         VLOG_ERR("failed to query datapath local port: %s", strerror(error));
         goto error_regfree;
     }
-    error = dhclient_create(port.devname, modify_dhcp_request,
+    error = dhclient_create(local_name, modify_dhcp_request,
                             validate_dhcp_offer, d, &d->dhcp);
     if (error) {
         VLOG_ERR("failed to initialize DHCP client: %s", strerror(error));
index fe1301f016bd9322759d1be33645730d91f7215a..c5793f08a368eb5ea267fac9b71be9a38bfb75bf 100644 (file)
@@ -36,6 +36,7 @@
 #include <arpa/inet.h>
 #include <errno.h>
 #include <inttypes.h>
+#include <net/if.h>
 #include <string.h>
 #include "dpif.h"
 #include "flow.h"
@@ -248,20 +249,19 @@ in_band_create(struct dpif *dpif, struct switch_status *ss,
 {
     struct in_band *in_band;
     struct netdev *netdev;
-    struct odp_port port;
+    char local_name[IF_NAMESIZE];
     int error;
 
     *in_bandp = NULL;
-    error = dpif_port_query_by_number(dpif, ODPP_LOCAL, &port);
+    error = dpif_get_name(dpif, local_name, sizeof local_name);
     if (error) {
-        VLOG_ERR("failed to query datapath local port: %s", strerror(error));
         return error;
     }
 
-    error = netdev_open(port.devname, NETDEV_ETH_TYPE_NONE, &netdev);
+    error = netdev_open(local_name, NETDEV_ETH_TYPE_NONE, &netdev);
     if (error) {
         VLOG_ERR("failed to open %s network device: %s",
-                 port.devname, strerror(error));
+                 local_name, strerror(error));
         return error;
     }
 
index bc632767dd4c61264a0a1bac96d0903245f31d7f..9092723cfc7436b1546d7d150da4469113dfb87e 100644 (file)
@@ -35,6 +35,7 @@
 #include "ofproto.h"
 #include <errno.h>
 #include <inttypes.h>
+#include <net/if.h>
 #include <netinet/in.h>
 #include <stdbool.h>
 #include <stdlib.h>
@@ -2797,20 +2798,18 @@ send_packet_in_miss(struct ofpbuf *packet, void *p_)
 static uint64_t
 pick_datapath_id(struct dpif *dpif, uint64_t fallback_dpid)
 {
-    struct odp_port port;
+    char local_name[IF_NAMESIZE];
     uint8_t ea[ETH_ADDR_LEN];
     int error;
 
-    error = dpif_port_query_by_number(dpif, ODPP_LOCAL, &port);
+    error = dpif_get_name(dpif, local_name, sizeof local_name);
     if (!error) {
-        error = netdev_nodev_get_etheraddr(port.devname, ea);
+        error = netdev_nodev_get_etheraddr(local_name, ea);
         if (!error) {
             return eth_addr_to_uint64(ea);
         }
         VLOG_WARN("could not get MAC address for %s (%s)",
-                  port.devname, strerror(error));
-    } else {
-        VLOG_WARN("datapath local port query failed (%s)", strerror(error));
+                  local_name, strerror(error));
     }
 
     return fallback_dpid;