}
}
+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;