netdev_register_provider(&netdev_tap_class);
netdev_vport_tunnel_register();
#endif
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__NetBSD__)
netdev_register_provider(&netdev_tap_class);
netdev_register_provider(&netdev_bsd_class);
#endif
+ netdev_register_provider(&netdev_tunnel_class);
+ netdev_register_provider(&netdev_pltap_class);
}
}
int error = new_class->init();
if (error) {
VLOG_ERR("failed to initialize %s network device class: %s",
- new_class->type, strerror(error));
+ new_class->type, ovs_strerror(error));
return error;
}
}
return 0;
}
+/* Returns a reference to 'netdev_' for the caller to own. Returns null if
+ * 'netdev_' is null. */
+struct netdev *
+netdev_ref(const struct netdev *netdev_)
+{
+ struct netdev *netdev = CONST_CAST(struct netdev *, netdev_);
+
+ if (netdev) {
+ ovs_assert(netdev->ref_cnt > 0);
+ netdev->ref_cnt++;
+ }
+ return netdev;
+}
+
/* Reconfigures the device 'netdev' with 'args'. 'args' may be empty
* or NULL if none are needed. */
int
*mtup = 0;
if (error != EOPNOTSUPP) {
VLOG_DBG_RL(&rl, "failed to retrieve MTU for network device %s: "
- "%s", netdev_get_name(netdev), strerror(error));
+ "%s", netdev_get_name(netdev), ovs_strerror(error));
}
}
return error;
error = class->set_mtu ? class->set_mtu(netdev, mtu) : EOPNOTSUPP;
if (error && error != EOPNOTSUPP) {
VLOG_DBG_RL(&rl, "failed to set MTU for network device %s: %s",
- netdev_get_name(netdev), strerror(error));
+ netdev_get_name(netdev), ovs_strerror(error));
}
return error;
if (error) {
VLOG_WARN_RL(&rl, "failed to %s flags for network device %s: %s",
off || on ? "set" : "get", netdev_get_name(netdev),
- strerror(error));
+ ovs_strerror(error));
old_flags = 0;
} else if ((off || on) && sfp) {
enum netdev_flags new_flags = (old_flags & ~off) | on;
&carrier);
if (error) {
VLOG_DBG("%s: failed to get network device carrier status, assuming "
- "down: %s", netdev_get_name(netdev), strerror(error));
+ "down: %s", netdev_get_name(netdev), ovs_strerror(error));
carrier = false;
}
/* Obtains statistics about 'queue_id' on 'netdev'. On success, returns 0 and
* fills 'stats' with the queue's statistics; individual members of 'stats' may
* be set to all-1-bits if the statistic is unavailable. On failure, returns a
- * positive errno value and fills 'stats' with all-1-bits. */
+ * positive errno value and fills 'stats' with values indicating unsupported
+ * statistics. */
int
netdev_get_queue_stats(const struct netdev *netdev, unsigned int queue_id,
struct netdev_queue_stats *stats)
? class->get_queue_stats(netdev, queue_id, stats)
: EOPNOTSUPP);
if (retval) {
- memset(stats, 0xff, sizeof *stats);
+ stats->tx_bytes = UINT64_MAX;
+ stats->tx_packets = UINT64_MAX;
+ stats->tx_errors = UINT64_MAX;
+ stats->created = LLONG_MIN;
}
return retval;
}