X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev.h;h=7cb3c8031842af9b9eb34759d20eada1858b2a82;hb=0ef165ecb57943e17a8ee8270df68ffb8d032e29;hp=bafa50eba8dc500569cd24d9b3b130ce75429e68;hpb=89454bf477d1dc95357792677ccbd4d483ab42d8;p=sliver-openvswitch.git diff --git a/lib/netdev.h b/lib/netdev.h index bafa50eba..7cb3c8031 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -40,13 +40,13 @@ extern "C" { * any number of threads on the same or different netdev objects. The * exceptions are: * - * netdev_rx_recv() - * netdev_rx_wait() - * netdev_rx_drain() + * netdev_rxq_recv() + * netdev_rxq_wait() + * netdev_rxq_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 + * different threads only on different netdev_rxq objects. (The client may + * create multiple netdev_rxq objects for a single netdev and access each * of those from a different thread.) * * NETDEV_FOR_EACH_QUEUE @@ -61,7 +61,7 @@ extern "C" { struct netdev; struct netdev_class; -struct netdev_rx; +struct netdev_rxq; struct netdev_saved_flags; struct ofpbuf; struct in_addr; @@ -134,8 +134,12 @@ void netdev_wait(void); void netdev_enumerate_types(struct sset *types); bool netdev_is_reserved_name(const char *name); +int netdev_n_rxq(const struct netdev *netdev); +bool netdev_is_pmd(const struct netdev *netdev); + /* Open and close. */ -int netdev_open(const char *name, const char *type, struct netdev **); +int netdev_open(const char *name, const char *type, struct netdev **netdevp); + struct netdev *netdev_ref(const struct netdev *); void netdev_close(struct netdev *); @@ -156,17 +160,17 @@ int netdev_set_mtu(const struct netdev *, int mtu); int netdev_get_ifindex(const struct netdev *); /* Packet reception. */ -int netdev_rx_open(struct netdev *, struct netdev_rx **); -void netdev_rx_close(struct netdev_rx *); +int netdev_rxq_open(struct netdev *, struct netdev_rxq **, int id); +void netdev_rxq_close(struct netdev_rxq *); -const char *netdev_rx_get_name(const struct netdev_rx *); +const char *netdev_rxq_get_name(const struct netdev_rxq *); -int netdev_rx_recv(struct netdev_rx *, struct ofpbuf *); -void netdev_rx_wait(struct netdev_rx *); -int netdev_rx_drain(struct netdev_rx *); +int netdev_rxq_recv(struct netdev_rxq *rx, struct ofpbuf **buffers, int *cnt); +void netdev_rxq_wait(struct netdev_rxq *); +int netdev_rxq_drain(struct netdev_rxq *); /* Packet transmission. */ -int netdev_send(struct netdev *, const struct ofpbuf *); +int netdev_send(struct netdev *, struct ofpbuf *, bool may_steal); void netdev_send_wait(struct netdev *); /* Hardware address. */ @@ -280,6 +284,7 @@ int netdev_set_queue(struct netdev *, int netdev_delete_queue(struct netdev *, unsigned int queue_id); int netdev_get_queue_stats(const struct netdev *, unsigned int queue_id, struct netdev_queue_stats *); +uint64_t netdev_get_change_seq(const struct netdev *); struct netdev_queue_dump { struct netdev *netdev; @@ -313,7 +318,7 @@ typedef void netdev_dump_queue_stats_cb(unsigned int queue_id, int netdev_dump_queue_stats(const struct netdev *, netdev_dump_queue_stats_cb *, void *aux); -unsigned int netdev_change_seq(const struct netdev *netdev); +enum { NETDEV_MAX_RX_BATCH = 256 }; /* Maximum number packets in rx_recv() batch. */ #ifdef __cplusplus }