X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev.h;h=287f6cc55a91d4ae3f0149d6c413b0ede5163460;hb=591cb419cf3694e0ae66a95973e73c61bad9e03d;hp=852b75dbd5f2d3b309f10b636369f4dee0394a3f;hpb=060ea9d5152b5c8cc6646ead1175484e07c583fe;p=sliver-openvswitch.git diff --git a/lib/netdev.h b/lib/netdev.h index 852b75dbd..287f6cc55 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -31,7 +31,23 @@ extern "C" { * Every port on a switch must have a corresponding netdev that must minimally * support a few operations, such as the ability to read the netdev's MTU. * The PORTING file at the top of the source tree has more information in the - * "Writing a netdev Provider" section. */ + * "Writing a netdev Provider" section. + * + * Thread-safety + * ============= + * + * Most of the netdev functions are fully thread-safe: they may be called from + * any number of threads on the same or different netdev objects. The + * exceptions are: + * + * netdev_rx_recv() + * netdev_rx_wait() + * netdev_rx_drain() + * + * These functions are conditionally thread-safe: they may be called from + * different threads only on different netdev_rx objects. (The client may + * create multiple netdev_rx objects for a single netdev and access each + * of those from a different thread.) */ struct netdev; struct netdev_class; @@ -106,9 +122,11 @@ void netdev_run(void); void netdev_wait(void); void netdev_enumerate_types(struct sset *types); +bool netdev_is_reserved_name(const char *name); /* Open and close. */ int netdev_open(const char *name, const char *type, struct netdev **); +struct netdev *netdev_ref(const struct netdev *); void netdev_close(struct netdev *); void netdev_parse_name(const char *netdev_name, char **name, char **type); @@ -225,6 +243,9 @@ struct netdev_queue_stats { uint64_t tx_bytes; uint64_t tx_packets; uint64_t tx_errors; + + /* Time at which the queue was created, in msecs, LLONG_MIN if unknown. */ + long long int created; }; int netdev_set_policing(struct netdev *, uint32_t kbits_rate,