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 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_);
- ovs_assert(netdev->ref_cnt > 0);
- netdev->ref_cnt++;
+ if (netdev) {
+ ovs_assert(netdev->ref_cnt > 0);
+ netdev->ref_cnt++;
+ }
return netdev;
}
*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;
}