Merge branch 'mainstream'
[sliver-openvswitch.git] / lib / netdev-provider.h
index 8b6e9b3..236bcc2 100644 (file)
 
 /* Generic interface to network devices. */
 
+#include "connectivity.h"
 #include "netdev.h"
 #include "list.h"
+#include "seq.h"
 #include "shash.h"
 #include "smap.h"
 
@@ -38,6 +40,14 @@ struct netdev {
     const struct netdev_class *netdev_class; /* Functions to control
                                                 this device. */
 
+    /* A sequence number which indicates changes in one of 'netdev''s
+     * properties.   It must be nonzero so that users have a value which
+     * they may use as a reset when tracking 'netdev'.
+     *
+     * Minimally, the sequence number is required to change whenever
+     * 'netdev''s flags, features, ethernet address, or carrier changes. */
+    uint64_t change_seq;
+
     /* The following are protected by 'netdev_mutex' (internal to netdev.c). */
     int n_rxq;
     int ref_cnt;                        /* Times this devices was opened. */
@@ -45,12 +55,23 @@ struct netdev {
     struct list saved_flags_list; /* Contains "struct netdev_saved_flags". */
 };
 
+static void
+netdev_change_seq_changed(struct netdev *netdev)
+{
+    seq_change(connectivity_seq_get());
+    netdev->change_seq++;
+    if (!netdev->change_seq) {
+        netdev->change_seq++;
+    }
+}
+
 const char *netdev_get_type(const struct netdev *);
 const struct netdev_class *netdev_get_class(const struct netdev *);
 const char *netdev_get_name(const struct netdev *);
 struct netdev *netdev_from_name(const char *name);
 void netdev_get_devices(const struct netdev_class *,
                         struct shash *device_list);
+struct netdev **netdev_get_vports(size_t *size);
 
 /* A data structure for capturing packets received by a network device.
  *