X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev.c;h=0d7b69d241020af518478dec38b4995d584fbf8c;hb=df1e5a3bc7d772237de0ca19663e4a5a9b8f403b;hp=4c1d38a40a694949ae5399c5ac717e95035d7476;hpb=da695497b81f40f60b93116d4bfbf37505b7677c;p=sliver-openvswitch.git diff --git a/lib/netdev.c b/lib/netdev.c index 4c1d38a40..0d7b69d24 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -102,7 +102,7 @@ netdev_initialize(void) fatal_signal_add_hook(restore_all_flags, NULL, NULL, true); netdev_vport_patch_register(); -#ifdef LINUX_DATAPATH +#ifdef __linux__ netdev_register_provider(&netdev_linux_class); netdev_register_provider(&netdev_internal_class); netdev_register_provider(&netdev_tap_class); @@ -225,7 +225,6 @@ netdev_unregister_provider(const char *type) atomic_read(&rc->ref_cnt, &ref_cnt); if (!ref_cnt) { hmap_remove(&netdev_classes, &rc->hmap_node); - atomic_destroy(&rc->ref_cnt); free(rc); error = 0; } else { @@ -552,22 +551,13 @@ netdev_rx_close(struct netdev_rx *rx) } } -/* Attempts to receive a packet from 'rx' into the tailroom of 'buffer', which - * must initially be empty. If successful, returns 0 and increments - * 'buffer->size' by the number of bytes in the received packet, otherwise a - * positive errno value. +/* Attempts to receive batch of packets from 'rx'. * * Returns EAGAIN immediately if no packet is ready to be received. * * Returns EMSGSIZE, and discards the packet, if the received packet is longer * than 'ofpbuf_tailroom(buffer)'. * - * Implementations may make use of VLAN_HEADER_LEN bytes of tailroom to - * add a VLAN header which is obtained out-of-band to the packet. If - * this occurs then VLAN_HEADER_LEN bytes of tailroom will no longer be - * available for the packet, otherwise it may be used for the packet - * itself. - * * It is advised that the tailroom of 'buffer' should be * VLAN_HEADER_LEN bytes longer than the MTU to allow space for an * out-of-band VLAN header to be added to the packet. At the very least, @@ -576,23 +566,15 @@ netdev_rx_close(struct netdev_rx *rx) * This function may be set to null if it would always return EOPNOTSUPP * anyhow. */ int -netdev_rx_recv(struct netdev_rx *rx, struct ofpbuf *buffer) +netdev_rx_recv(struct netdev_rx *rx, struct ofpbuf **buffers, int *cnt) { int retval; - ovs_assert(buffer->size == 0); - ovs_assert(ofpbuf_tailroom(buffer) >= ETH_TOTAL_MIN); - - retval = rx->netdev->netdev_class->rx_recv(rx, buffer); + retval = rx->netdev->netdev_class->rx_recv(rx, buffers, cnt); if (!retval) { COVERAGE_INC(netdev_received); - if (buffer->size < ETH_TOTAL_MIN) { - ofpbuf_put_zeros(buffer, ETH_TOTAL_MIN - buffer->size); - } - return 0; - } else { - return retval; } + return retval; } /* Arranges for poll_block() to wake up when a packet is ready to be received