[ovs-dev] [tcpdump 1/5] byte-order: Make uint32_byteswap() available regardless of endianness.

Ben Pfaff blp at nicira.com
Mon Dec 2 22:53:59 UTC 2013


I didn't know about, or had forgotten, the GCC builtin.  But we're not
using uint32_byteswap() anywhere in an inner loop, so I think I'll
just leave this code as-is for now.

I'll push this in a minute, thank you!

On Tue, Nov 26, 2013 at 03:21:05PM -0800, Jarno Rajahalme wrote:
> LGTM, and maybe it?s not worth trying to use a GCC builtin for this.
> 
> Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>
> 
>   Jarno
> 
> On Nov 22, 2013, at 1:37 PM, Ben Pfaff <blp at nicira.com> wrote:
> 
> > pcap_read() can use it whether we're big-endian or not.
> > 
> > Signed-off-by: Ben Pfaff <blp at nicira.com>
> > ---
> > lib/byte-order.h |    4 +---
> > lib/pcap-file.c  |    6 ++----
> > 2 files changed, 3 insertions(+), 7 deletions(-)
> > 
> > diff --git a/lib/byte-order.h b/lib/byte-order.h
> > index f9be78b..352f91e 100644
> > --- a/lib/byte-order.h
> > +++ b/lib/byte-order.h
> > @@ -1,5 +1,5 @@
> > /*
> > - * Copyright (c) 2008, 2010, 2011 Nicira, Inc.
> > + * Copyright (c) 2008, 2010, 2011, 2013 Nicira, Inc.
> >  *
> >  * Licensed under the Apache License, Version 2.0 (the "License");
> >  * you may not use this file except in compliance with the License.
> > @@ -40,7 +40,6 @@ ovs_be64 htonll(uint64_t);
> > uint64_t ntohll(ovs_be64);
> > #endif
> > 
> > -#if defined(WORDS_BIGENDIAN)
> > static inline uint32_t
> > uint32_byteswap(uint32_t crc) {
> >     return (((crc & 0x000000ff) << 24) |
> > @@ -48,7 +47,6 @@ uint32_byteswap(uint32_t crc) {
> >             ((crc & 0x00ff0000) >>  8) |
> >             ((crc & 0xff000000) >> 24));
> > }
> > -#endif
> > 
> > /* These macros may substitute for htons(), htonl(), and htonll() in contexts
> >  * where function calls are not allowed, such as case labels.  They should not
> > diff --git a/lib/pcap-file.c b/lib/pcap-file.c
> > index 700cdea..fbb0751 100644
> > --- a/lib/pcap-file.c
> > +++ b/lib/pcap-file.c
> > @@ -21,6 +21,7 @@
> > #include <stdlib.h>
> > #include <string.h>
> > #include <sys/stat.h>
> > +#include "byte-order.h"
> > #include "compiler.h"
> > #include "ofpbuf.h"
> > #include "vlog.h"
> > @@ -151,10 +152,7 @@ pcap_read(FILE *file, struct ofpbuf **bufp)
> >     /* Calculate length. */
> >     len = prh.incl_len;
> >     if (len > 0xffff) {
> > -        uint32_t swapped_len = (((len & 0xff000000) >> 24) |
> > -                                ((len & 0x00ff0000) >>  8) |
> > -                                ((len & 0x0000ff00) <<  8) |
> > -                                ((len & 0x000000ff) << 24));
> > +        uint32_t swapped_len = uint32_byteswap(len);
> >         if (swapped_len > 0xffff) {
> >             VLOG_WARN("bad packet length %zu or %"PRIu32" "
> >                       "reading pcap file",
> > -- 
> > 1.7.10.4
> > 
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> 



More information about the dev mailing list