/* Generic interface to network devices. */
+#include "connectivity.h"
#include "netdev.h"
#include "list.h"
+#include "seq.h"
#include "shash.h"
#include "smap.h"
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. */
struct shash_node *node; /* Pointer to element in global map. */
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.
*
* None of these members change during the lifetime of a struct netdev_rxq. */
struct netdev_rxq {
struct netdev *netdev; /* Owns a reference to the netdev. */
+ int queue_id;
};
struct netdev *netdev_rxq_get_netdev(const struct netdev_rxq *);
* implementation must not refer to base or derived state in the data
* structure, because it has already been uninitialized.
*
+ * If netdev support multi-queue IO then netdev->construct should set initialize
+ * netdev->n_rxq to number of queues.
+ *
* Each "alloc" function allocates and returns a new instance of the respective
* data structure. The "alloc" function is not given any information about the
* use of the new data structure, so it cannot perform much initialization.