From: Ben Pfaff Date: Fri, 6 Mar 2009 22:03:24 +0000 (-0800) Subject: dpif: New function dpif_get_name(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b38fe047a80f259c302171225ddcce7665b81be6;p=openvswitch dpif: New function dpif_get_name(). 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. --- diff --git a/lib/dpif.c b/lib/dpif.c index 84cef19b..9b89a9e2 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -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; } diff --git a/lib/dpif.h b/lib/dpif.h index c8e7a437..6067188e 100644 --- a/lib/dpif.h +++ b/lib/dpif.h @@ -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 *); diff --git a/secchan/discovery.c b/secchan/discovery.c index 087fa2a1..2651a9b4 100644 --- a/secchan/discovery.c +++ b/secchan/discovery.c @@ -35,6 +35,7 @@ #include "discovery.h" #include #include +#include #include #include #include @@ -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)); diff --git a/secchan/in-band.c b/secchan/in-band.c index fe1301f0..c5793f08 100644 --- a/secchan/in-band.c +++ b/secchan/in-band.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #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; } diff --git a/secchan/ofproto.c b/secchan/ofproto.c index bc632767..9092723c 100644 --- a/secchan/ofproto.c +++ b/secchan/ofproto.c @@ -35,6 +35,7 @@ #include "ofproto.h" #include #include +#include #include #include #include @@ -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;