struct ofpbuf *options;
int dp_ifindex; /* -1 if unknown. */
uint32_t port_no; /* UINT32_MAX if unknown. */
+ unsigned int change_seq;
};
struct netdev_vport {
dev->options = options;
dev->dp_ifindex = dp_ifindex;
dev->port_no = port_no;
+ dev->change_seq = 1;
*netdev_devp = &dev->netdev_dev;
route_table_register();
free(notifier);
}
+static unsigned int
+netdev_vport_change_seq(const struct netdev *netdev)
+{
+ return netdev_dev_vport_cast(netdev_get_dev(netdev))->change_seq;
+}
+
static void
netdev_vport_run(void)
{
char *poll_name = make_poll_name(netdev);
struct list *list = shash_find_data(&netdev_vport_notifiers,
poll_name);
+ struct netdev_dev_vport *ndv;
+
+ ndv = netdev_dev_vport_cast(netdev_get_dev(netdev));
if (list) {
struct netdev_vport_notifier *notifier;
}
}
+ ndv->change_seq++;
+ if (!ndv->change_seq) {
+ ndv->change_seq++;
+ }
+
free(poll_name);
}
\f
netdev_vport_update_flags, \
\
netdev_vport_poll_add, \
- netdev_vport_poll_remove,
+ netdev_vport_poll_remove, \
+ netdev_vport_change_seq
void
netdev_vport_register(void)