/* Closes 'netdev'. */
void (*close)(struct netdev *netdev);
-
- /* Enumerates the names of all network devices of this class.
- *
- * The caller has already initialized 'all_names' and might already have
- * added some names to it. This function should not disturb any existing
- * names in 'all_names'.
- *
- * If this netdev class does not support enumeration, this may be a null
- * pointer. */
- int (*enumerate)(struct sset *all_names);
\f
/* ## ----------------- ## */
/* ## Receiving Packets ## */
* packet, otherwise a negative errno value. Returns -EAGAIN immediately
* if no packet is ready to be received.
*
+ * Returns -EMSGSIZE, and discards the packet, if the received packet is
+ * longer than 'size' bytes.
+ *
* This function can only be expected to return a packet if ->listen() has
* been called successfully.
*
* bytes for Ethernet devices.
*
* If 'netdev' does not have an MTU (e.g. as some tunnels do not), then
- * this function should set '*mtup' to INT_MAX. */
+ * this function should return EOPNOTSUPP. This function may be set to
+ * null if it would always return EOPNOTSUPP. */
int (*get_mtu)(const struct netdev *netdev, int *mtup);
+ /* Sets 'netdev''s MTU to 'mtu'.
+ *
+ * If 'netdev' does not have an MTU (e.g. as some tunnels do not), then
+ * this function should return EOPNOTSUPP. This function may be set to
+ * null if it would always return EOPNOTSUPP. */
+ int (*set_mtu)(const struct netdev *netdev, int mtu);
+
/* Returns the ifindex of 'netdev', if successful, as a positive number.
* On failure, returns a negative errno value.
*
*/
int (*get_carrier)(const struct netdev *netdev, bool *carrier);
+ /* Returns the number of times 'netdev''s carrier has changed since being
+ * initialized.
+ *
+ * If null, callers will assume the number of carrier resets is zero. */
+ long long int (*get_carrier_resets)(const struct netdev *netdev);
+
/* Forces ->get_carrier() to poll 'netdev''s MII registers for link status
* instead of checking 'netdev''s carrier. 'netdev''s MII registers will
* be polled once ever 'interval' milliseconds. If 'netdev' does not
/* Stores the features supported by 'netdev' into each of '*current',
* '*advertised', '*supported', and '*peer'. Each value is a bitmap of
- * "enum ofp_port_features" bits, in host byte order.
+ * NETDEV_F_* bits.
*
* This function may be set to null if it would always return EOPNOTSUPP.
*/
int (*get_features)(const struct netdev *netdev,
- uint32_t *current, uint32_t *advertised,
- uint32_t *supported, uint32_t *peer);
+ enum netdev_features *current,
+ enum netdev_features *advertised,
+ enum netdev_features *supported,
+ enum netdev_features *peer);
/* Set the features advertised by 'netdev' to 'advertise', which is a
- * bitmap of "enum ofp_port_features" bits, in host byte order.
+ * set of NETDEV_F_* bits.
*
* This function may be set to null for a network device that does not
* support configuring advertisements. */
- int (*set_advertisements)(struct netdev *netdev, uint32_t advertise);
-
- /* If 'netdev' is a VLAN network device (e.g. one created with vconfig(8)),
- * sets '*vlan_vid' to the VLAN VID associated with that device and returns
- * 0.
- *
- * Returns ENOENT if 'netdev' is a network device that is not a
- * VLAN device.
- *
- * This function should be set to null if it doesn't make any sense for
- * your network device (it probably doesn't). */
- int (*get_vlan_vid)(const struct netdev *netdev, int *vlan_vid);
+ int (*set_advertisements)(struct netdev *netdev,
+ enum netdev_features advertise);
/* Attempts to set input rate limiting (policing) policy, such that up to
* 'kbits_rate' kbps of traffic is accepted, with a maximum accumulative