On Thu, Dec 12, 2013 at 08:11:47AM -0800, Jarno Rajahalme wrote: > IMO this patch could go a bit further and have the rx_recv also update the > but size to reflect the number of bytes placed in the buffer and maybe change > the return value to a normal error code.
Hi, I would not be opposed to that, though I do not that the size is never updated (or used?) by the caller, so I don't think it will have much effect either way. Ben, what are your feelings on this? > > Jarno > > On Dec 12, 2013, at 12:38 AM, Simon Horman <ho...@verge.net.au> wrote: > > > Update the netdev_class so that struct ofpbuf * is passed to rx_recv() > > to provide both the data and size of the data to read a packet into. > > > > This patch should not have any behavioural changes. > > > > This patch is in preparation for the netdev-linux variant of rx_recv() > > making use of headroom in the struct ofpbuf * parameter to push a VLAN tag > > obtained from auxdata. > > > > Signed-off-by: Simon Horman <ho...@verge.net.au> > > > > --- > > v2 > > * First post > > --- > > lib/netdev-dummy.c | 6 +++--- > > lib/netdev-linux.c | 7 ++++--- > > lib/netdev-provider.h | 2 +- > > lib/netdev.c | 3 +-- > > 4 files changed, 9 insertions(+), 9 deletions(-) > > > > diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c > > index fd30454..5b363fa 100644 > > --- a/lib/netdev-dummy.c > > +++ b/lib/netdev-dummy.c > > @@ -447,7 +447,7 @@ netdev_dummy_rx_dealloc(struct netdev_rx *rx_) > > } > > > > static int > > -netdev_dummy_rx_recv(struct netdev_rx *rx_, void *buffer, size_t size) > > +netdev_dummy_rx_recv(struct netdev_rx *rx_, struct ofpbuf *buffer) > > { > > struct netdev_rx_dummy *rx = netdev_rx_dummy_cast(rx_); > > struct netdev_dummy *netdev = netdev_dummy_cast(rx->up.netdev); > > @@ -467,8 +467,8 @@ netdev_dummy_rx_recv(struct netdev_rx *rx_, void > > *buffer, size_t size) > > return -EAGAIN; > > } > > > > - if (packet->size <= size) { > > - memcpy(buffer, packet->data, packet->size); > > + if (packet->size <= ofpbuf_tailroom(buffer)) { > > + memcpy(buffer->data, packet->data, packet->size); > > retval = packet->size; > > > > ovs_mutex_lock(&netdev->mutex); > > diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c > > index 3e0da48..a997a77 100644 > > --- a/lib/netdev-linux.c > > +++ b/lib/netdev-linux.c > > @@ -852,15 +852,16 @@ netdev_linux_rx_dealloc(struct netdev_rx *rx_) > > } > > > > static int > > -netdev_linux_rx_recv(struct netdev_rx *rx_, void *data, size_t size) > > +netdev_linux_rx_recv(struct netdev_rx *rx_, struct ofpbuf *buffer) > > { > > struct netdev_rx_linux *rx = netdev_rx_linux_cast(rx_); > > ssize_t retval; > > + size_t size = ofpbuf_tailroom(buffer); > > > > do { > > retval = (rx->is_tap > > - ? read(rx->fd, data, size) > > - : recv(rx->fd, data, size, MSG_TRUNC)); > > + ? read(rx->fd, buffer->data, size) > > + : recv(rx->fd, buffer->data, size, MSG_TRUNC)); > > } while (retval < 0 && errno == EINTR); > > > > if (retval >= 0) { > > diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h > > index 9ab58fb..db24ac5 100644 > > --- a/lib/netdev-provider.h > > +++ b/lib/netdev-provider.h > > @@ -643,7 +643,7 @@ struct netdev_class { > > * is longer than 'size' bytes. > > * > > * Specify NULL if this */ > > - int (*rx_recv)(struct netdev_rx *rx, void *buffer, size_t size); > > + int (*rx_recv)(struct netdev_rx *rx, struct ofpbuf *buffer); > > > > /* Registers with the poll loop to wake up from the next call to > > * poll_block() when a packet is ready to be received with > > netdev_rx_recv() > > diff --git a/lib/netdev.c b/lib/netdev.c > > index 9aa6d27..d5b0d78 100644 > > --- a/lib/netdev.c > > +++ b/lib/netdev.c > > @@ -547,8 +547,7 @@ netdev_rx_recv(struct netdev_rx *rx, struct ofpbuf > > *buffer) > > ovs_assert(buffer->size == 0); > > ovs_assert(ofpbuf_tailroom(buffer) >= ETH_TOTAL_MIN); > > > > - retval = rx->netdev->netdev_class->rx_recv(rx, buffer->data, > > - ofpbuf_tailroom(buffer)); > > + retval = rx->netdev->netdev_class->rx_recv(rx, buffer); > > if (retval >= 0) { > > COVERAGE_INC(netdev_received); > > buffer->size += retval; > > -- > > 1.8.4 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev