On Mon, Jul 11, 2016 at 11:56:47PM -0700, Justin Pettit wrote:
> These will have callers later.
>
> Signed-off-by: Justin Pettit <[email protected]>
> lib/packets.c | 38 ++++++++++++++++++++++++++++++++++++++
> lib/packets.h | 3 +++
> 2 files changed, 41 insertions(+)
>
> diff --git a/lib/packets.c b/lib/packets.c
> index 9e4d0e7..9b34961 100644
> --- a/lib/packets.c
> +++ b/lib/packets.c
> @@ -693,6 +693,44 @@ struct in6_addr ipv6_addr_bitand(const struct in6_addr
> *a,
> return dst;
> }
>
We usually put the return type on a separate line (here and a second
time later);
> +struct in6_addr ipv6_addr_bitxor(const struct in6_addr *a,
> + const struct in6_addr *b)
> +{
I tend to declare loop variables inside the loop these days:
> + int i;
> + struct in6_addr dst;
> +
> +#ifdef s6_addr32
> + for (i=0; i<4; i++) {
> + dst.s6_addr32[i] = a->s6_addr32[i] ^ b->s6_addr32[i];
> + }
> +#else
> + for (i=0; i<16; i++) {
> + dst.s6_addr[i] = a->s6_addr[i] ^ b->s6_addr[i];
> + }
> +#endif
> +
> + return dst;
> +}
> +
> +bool ipv6_is_zero(const struct in6_addr *a)
> +{
> +#ifdef s6_addr32
> + for (int i = 0; i < 4; i++) {
> + if (a->s6_addr32[i]) {
> + return false;
> + }
> + }
> +#else
> + for (int i = 0; i < 16; i++) {
> + if (a->s6_addr[i]) {
> + return false;
> + }
> + }
> +#endif
> +
> + return true;
> +}
But what if we do the whole thing this way?
#ifdef s6_addr32
#define s6_addrX s6_addr32
#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
#else
#define s6_addrX s6_addr
#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 16; VAR++)
#endif
struct in6_addr
ipv6_addr_bitand(const struct in6_addr *a, const struct in6_addr *b)
{
struct in6_addr dst;
IPV6_FOR_EACH (i) {
dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
}
return dst;
}
struct in6_addr
ipv6_addr_bitxor(const struct in6_addr *a, const struct in6_addr *b)
{
struct in6_addr dst;
IPV6_FOR_EACH (i) {
dst.s6_addrX[i] = a->s6_addrX[i] ^ b->s6_addrX[i];
}
return dst;
}
bool
ipv6_is_zero(const struct in6_addr *a)
{
IPV6_FOR_EACH (i) {
if (a->s6_addrX[i]) {
return false;
}
}
return true;
}
or
#ifdef s6_addr32
#define s6_addrX s6_addr32
#define s6_n_addrX 4
#else
#define s6_addrX s6_addr
#define s6_n_addrX 16
#endif
struct in6_addr
ipv6_addr_bitand(const struct in6_addr *a, const struct in6_addr *b)
{
struct in6_addr dst;
for (int i = 0; i < s6_n_addrX; i++) {
dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
}
return dst;
}
struct in6_addr
ipv6_addr_bitxor(const struct in6_addr *a, const struct in6_addr *b)
{
struct in6_addr dst;
for (int i = 0; i < s6_n_addrX; i++) {
dst.s6_addrX[i] = a->s6_addrX[i] ^ b->s6_addrX[i];
}
return dst;
}
bool
ipv6_is_zero(const struct in6_addr *a)
{
for (int i = 0; i < s6_n_addrX; i++) {
if (a->s6_addrX[i]) {
return false;
}
}
return true;
}
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev