/* 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 return EOPNOTSUPP. */
+ * 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 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.
*/
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
* 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);
-
/* Attempts to set input rate limiting (policing) policy, such that up to
* 'kbits_rate' kbps of traffic is accepted, with a maximum accumulative
* burst size of 'kbits' kb.