netdev_dev->tc->ops->tc_destroy(netdev_dev->tc);
}
- if (class == &netdev_tap_class) {
+ if (class == &netdev_tap_class || class == &netdev_tap_pl_class) {
destroy_tap(netdev_dev);
}
free(netdev_dev);
for (;;) {
ssize_t retval;
- retval = (netdev_->netdev_dev->netdev_class == &netdev_tap_class
+ retval = ((netdev_->netdev_dev->netdev_class == &netdev_tap_class ||
+ netdev_->netdev_dev->netdev_class == &netdev_tap_pl_class)
? read(netdev->fd, data, size)
: recv(netdev->fd, data, size, MSG_TRUNC));
if (retval >= 0) {
goto error_unref_notifier;
}
- netdev_dev_init(&netdev_dev->netdev_dev, name, &netdev_tap_class);
+ netdev_dev_init(&netdev_dev->netdev_dev, name, &netdev_tap_pl_class);
*netdev_devp = &netdev_dev->netdev_dev;
return 0;
return error;
}
+static int
+netdev_tap_pl_update_flags(struct netdev *netdev, enum netdev_flags off,
+ enum netdev_flags on, enum netdev_flags *old_flagsp)
+{
+ return 0;
+}
+
static unsigned int
netdev_linux_change_seq(const struct netdev *netdev)
{
}
#define NETDEV_LINUX_CLASS(NAME, CREATE, GET_STATS, SET_STATS, \
- GET_FEATURES, GET_STATUS) \
+ GET_FEATURES, GET_STATUS, \
+ UPDATE_FLAGS) \
{ \
NAME, \
\
GET_STATUS, \
netdev_linux_arp_lookup, \
\
- netdev_linux_update_flags, \
+ UPDATE_FLAGS, \
\
netdev_linux_change_seq \
}
netdev_linux_get_stats,
NULL, /* set_stats */
netdev_linux_get_features,
- netdev_linux_get_drv_info);
+ netdev_linux_get_drv_info,
+ netdev_linux_update_flags);
const struct netdev_class netdev_tap_class =
NETDEV_LINUX_CLASS(
netdev_tap_get_stats,
NULL, /* set_stats */
netdev_linux_get_features,
- netdev_linux_get_drv_info);
+ netdev_linux_get_drv_info,
+ netdev_linux_update_flags);
const struct netdev_class netdev_internal_class =
NETDEV_LINUX_CLASS(
netdev_internal_get_stats,
netdev_vport_set_stats,
NULL, /* get_features */
- netdev_internal_get_drv_info);
+ netdev_internal_get_drv_info,
+ netdev_linux_update_flags);
const struct netdev_class netdev_tap_pl_class =
NETDEV_LINUX_CLASS(
netdev_tap_get_stats,
NULL, /* set_stats */
netdev_linux_get_features,
- netdev_linux_get_drv_info);
+ netdev_linux_get_drv_info,
+ netdev_tap_pl_update_flags);
\f
/* HTB traffic control class. */