}
 }
 
+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)
 {
 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);
     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;
     }
 
 
 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 *);
 
 #include "discovery.h"
 #include <errno.h>
 #include <inttypes.h>
+#include <net/if.h>
 #include <regex.h>
 #include <stdlib.h>
 #include <string.h>
                  struct discovery **discoveryp)
 {
     struct discovery *d;
-    struct odp_port port;
+    char local_name[IF_NAMESIZE];
     int error;
 
     d = xcalloc(1, sizeof *d);
     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));
 
 #include <arpa/inet.h>
 #include <errno.h>
 #include <inttypes.h>
+#include <net/if.h>
 #include <string.h>
 #include "dpif.h"
 #include "flow.h"
 {
     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;
     }
 
 
 #include "ofproto.h"
 #include <errno.h>
 #include <inttypes.h>
+#include <net/if.h>
 #include <netinet/in.h>
 #include <stdbool.h>
 #include <stdlib.h>
 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;