X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-provider.h;h=c2123dc6717f603d851874d3b2a48c448c51a8eb;hb=41ca1e0afb4b261a217c9fdaf672ef606e8434f9;hp=943acc9d8b7472cdf301e606a57a6ff3b70dd9d5;hpb=f77917408a404d4660c6fb2cbe4d4c0f9f123cf2;p=sliver-openvswitch.git diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h index 943acc9d8..c2123dc67 100644 --- a/lib/netdev-provider.h +++ b/lib/netdev-provider.h @@ -19,8 +19,10 @@ /* Generic interface to network devices. */ +#include "connectivity.h" #include "netdev.h" #include "list.h" +#include "seq.h" #include "shash.h" #include "smap.h" @@ -38,18 +40,38 @@ struct netdev { 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. * @@ -59,6 +81,7 @@ void netdev_get_devices(const struct netdev_class *, * 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 *); @@ -127,6 +150,9 @@ 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.