From 55bc98d6cb340626eab68fa91eeffafe5e5a2339 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 16 Jan 2014 17:21:55 -0800 Subject: [PATCH] netdev-linux: Fix build break on RHEL 6.1. Commit 73c85181d (netdev-linux: Read packet auxdata to obtain vlan_tid) added #include to this file, to get the definition of PACKET_AUXDATA and some other definitions, but on RHEL 6.1 this provoked compiler errors: In file included from /usr/include/linux/rtnetlink.h:5, from lib/netdev-linux.c:34: /usr/include/linux/netlink.h:34: error: expected specifier-qualifier-list before 'sa_family_t' Since the old #includes worked everywhere, and this file already defined its own versions of most of the new macros that it needed, this commit just reverts the old #includes and adds the one macro definition it didn't already have. (RHEL 6.1 isn't necessarily the only platform where this is a problem, but it's the first one for which we noticed the problem.) This switches the definition of sockaddr_ll used from the Linux one, which uses __be16 for sll_protocol, to the glibc one, which uses plain "unsigned short int". This makes sparse complain (rightly), so this commit also adds a sparse-specific header that uses ovs_be16 to prevent the warning. Signed-off-by: Ben Pfaff --- include/sparse/automake.mk | 1 + include/sparse/netpacket/packet.h | 37 +++++++++++++++++++++++++++++++ lib/netdev-linux.c | 9 ++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 include/sparse/netpacket/packet.h diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk index 45ae1f506..572c7c2c7 100644 --- a/include/sparse/automake.mk +++ b/include/sparse/automake.mk @@ -4,6 +4,7 @@ noinst_HEADERS += \ include/sparse/math.h \ include/sparse/netinet/in.h \ include/sparse/netinet/ip6.h \ + include/sparse/netpacket/packet.h \ include/sparse/pthread.h \ include/sparse/sys/socket.h \ include/sparse/sys/wait.h diff --git a/include/sparse/netpacket/packet.h b/include/sparse/netpacket/packet.h new file mode 100644 index 000000000..21bdd2ea7 --- /dev/null +++ b/include/sparse/netpacket/packet.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014 Nicira, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CHECKER__ +#error "Use this header only with sparse. It is not a correct implementation." +#endif + +#ifndef __NETPACKET_PACKET_SPARSE +#define __NETPACKET_PACKET_SPARSE 1 + +#include "openvswitch/types.h" + +struct sockaddr_ll + { + unsigned short int sll_family; + ovs_be16 sll_protocol; + int sll_ifindex; + unsigned short int sll_hatype; + unsigned char sll_pkttype; + unsigned char sll_halen; + unsigned char sll_addr[8]; + }; + +#endif /* sparse */ diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 9c1a36db1..e756d88a9 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. + * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,11 +20,11 @@ #include #include +#include #include #include #include #include -#include #include #include #include @@ -37,8 +37,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -116,6 +118,9 @@ COVERAGE_DEFINE(netdev_set_ethtool); * With all this churn it's easiest to unconditionally define a replacement * structure that has everything we want. */ +#ifndef PACKET_AUXDATA +#define PACKET_AUXDATA 8 +#endif #ifndef TP_STATUS_VLAN_VALID #define TP_STATUS_VLAN_VALID (1 << 4) #endif -- 2.43.0