From: Stephen Hemminger <shemminger@vyatta.com>
To: David Miller <davem@davemloft.net>,
Saurabh Mohan <saurabh.mohan@vyatta.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC] ip tunnel flag byte order issue
Date: Wed, 10 Oct 2012 12:06:30 -0700 [thread overview]
Message-ID: <20121010120630.5e9f2c2c@nehalam.linuxnetplumber.net> (raw)
Sparse found a real problem with the ABI for tunnelling.
The SIT and VTI tunnel ioctl's both overload the i_flags field in the
ip_tunnel parameters structure. This field is defined as big endian
(be16) and the various GRE_XXX macros do the necessary byte swapping.
The problem is that both SIT and VTI are using an additional flag bit
that is defined in host byte order, and is then or'd in. It happens to
work because both possible locations hit holes in the current usage of
GRE. For big endian cpu's it overlaps the GRE_VERSION which is always
zero, and for little endian it overlaps the GRE recursion field also
always zero.
Having the field in different places on different CPU architectures
was a mistake. The problem is fixing it will break the ABI on one or
the other architecture. I choose to break big endian since it the
minority.
Also both VTI and SIT are overloading the same bit which is an
accident waiting to happen. Since VTI is newer, I propose giving a
different bit to VTI.
The other alternative is keeping the same ABI, but putting a big note
as to why it works in spite of our stupidity.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
--- a/include/linux/if_tunnel.h 2012-10-10 11:37:22.444050762 -0700
+++ b/include/linux/if_tunnel.h 2012-10-10 11:50:34.692168074 -0700
@@ -42,7 +42,7 @@ struct ip_tunnel_parm {
};
/* SIT-mode i_flags */
-#define SIT_ISATAP 0x0001
+#define SIT_ISATAP __cpu_to_be16(0x0100)
struct ip_tunnel_prl {
__be32 addr;
@@ -84,7 +84,7 @@ enum {
#define IFLA_GRE_MAX (__IFLA_GRE_MAX - 1)
/* VTI-mode i_flags */
-#define VTI_ISVTI 0x0001
+#define VTI_ISVTI __cpu_to_be16(0x0200)
enum {
IFLA_VTI_UNSPEC,
next reply other threads:[~2012-10-10 19:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-10 19:06 Stephen Hemminger [this message]
2012-10-10 20:26 ` [RFC] ip tunnel flag byte order issue Ben Hutchings
2012-10-10 20:34 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121010120630.5e9f2c2c@nehalam.linuxnetplumber.net \
--to=shemminger@vyatta.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=saurabh.mohan@vyatta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox