upgrade to new signature of update_flags
[sliver-openvswitch.git] / lib / netdev-provider.h
index 910ff58..c19816e 100644 (file)
@@ -19,8 +19,6 @@
 
 /* Generic interface to network devices. */
 
-#include <assert.h>
-
 #include "netdev.h"
 #include "list.h"
 #include "shash.h"
@@ -40,6 +38,7 @@ struct netdev_dev {
                                                 this device. */
     int ref_cnt;                        /* Times this devices was opened. */
     struct shash_node *node;            /* Pointer to element in global map. */
+    struct list saved_flags_list; /* Contains "struct netdev_saved_flags". */
 };
 
 void netdev_dev_init(struct netdev_dev *, const char *name,
@@ -55,7 +54,7 @@ void netdev_dev_get_devices(const struct netdev_class *,
 static inline void netdev_dev_assert_class(const struct netdev_dev *netdev_dev,
                                            const struct netdev_class *class_)
 {
-    assert(netdev_dev->netdev_class == class_);
+    ovs_assert(netdev_dev->netdev_class == class_);
 }
 
 /* A instance of an open network device.
@@ -65,9 +64,6 @@ static inline void netdev_dev_assert_class(const struct netdev_dev *netdev_dev,
 struct netdev {
     struct netdev_dev *netdev_dev;   /* Parent netdev_dev. */
     struct list node;                /* Element in global list. */
-
-    enum netdev_flags save_flags;    /* Initial device flags. */
-    enum netdev_flags changed_flags; /* Flags that we changed. */
 };
 
 void netdev_init(struct netdev *, struct netdev_dev *);
@@ -139,6 +135,13 @@ struct netdev_class {
      * pointer. */
     int (*set_config)(struct netdev_dev *netdev_dev, const struct smap *args);
 
+    /* Returns the tunnel configuration of 'netdev_dev'.  If 'netdev_dev' is
+     * not a tunnel, returns null.
+     *
+     * If this function would always return null, it may be null instead. */
+    const struct netdev_tunnel_config *
+        (*get_tunnel_config)(const struct netdev_dev *netdev_dev);
+
     /* Attempts to open a network device.  On success, sets 'netdevp'
      * to the new network device. */
     int (*open)(struct netdev_dev *netdev_dev, struct netdev **netdevp);
@@ -567,14 +570,14 @@ struct netdev_class {
     int (*arp_lookup)(const struct netdev *netdev, ovs_be32 ip,
                       uint8_t mac[6]);
 
-    /* Retrieves the current set of flags on 'netdev' into '*old_flags'.
-     * Then, turns off the flags that are set to 1 in 'off' and turns on the
-     * flags that are set to 1 in 'on'.  (No bit will be set to 1 in both 'off'
-     * and 'on'; that is, off & on == 0.)
+    /* Retrieves the current set of flags on 'dev' into '*old_flags'.  Then,
+     * turns off the flags that are set to 1 in 'off' and turns on the flags
+     * that are set to 1 in 'on'.  (No bit will be set to 1 in both 'off' and
+     * 'on'; that is, off & on == 0.)
      *
      * This function may be invoked from a signal handler.  Therefore, it
      * should not do anything that is not signal-safe (such as logging). */
-    int (*update_flags)(struct netdev *netdev, enum netdev_flags off,
+    int (*update_flags)(struct netdev_dev *dev, enum netdev_flags off,
                         enum netdev_flags on, enum netdev_flags *old_flags);
 
     /* Returns a sequence number which indicates changes in one of 'netdev''s
@@ -600,6 +603,9 @@ extern const struct netdev_class netdev_tap_class;
 extern const struct netdev_class netdev_bsd_class;
 #endif
 
+extern const struct netdev_class netdev_tunnel_class;
+extern const struct netdev_class netdev_pltap_class;
+
 #ifdef  __cplusplus
 }
 #endif