- * 'ethertype' may be a 16-bit Ethernet protocol value in host byte order
- * to capture frames of that type received on the device. It may also be
- * one of the 'enum netdev_pseudo_ethertype' values to receive frames in
- * one of those categories. */
- int (*open)(struct netdev_dev *netdev_dev, int ethertype,
- struct netdev **netdevp);
+ * If this netdev class does not support configuration, this may be a null
+ * 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);