diff mbox series

[iproute2] ip fou: Pass family attribute as u8

Message ID 20180107142813.s6k6h2s6u75bdut5@moc6.cz
State Accepted, archived
Delegated to: stephen hemminger
Headers show
Series [iproute2] ip fou: Pass family attribute as u8 | expand

Commit Message

Filip Moc Jan. 7, 2018, 2:28 p.m. UTC
This fixes fou on big-endian systems.

Signed-off-by: Filip Moc <dev@moc6.cz>
---
 ip/ipfou.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Stephen Hemminger Jan. 7, 2018, 8:28 p.m. UTC | #1
On Sun, 7 Jan 2018 15:28:13 +0100
Filip Moc <dev@moc6.cz> wrote:

> This fixes fou on big-endian systems.
> 
> Signed-off-by: Filip Moc <dev@moc6.cz>
> ---
>  ip/ipfou.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/ip/ipfou.c b/ip/ipfou.c
> index febc2c8c..1f392ade 100644
> --- a/ip/ipfou.c
> +++ b/ip/ipfou.c
> @@ -52,7 +52,7 @@ static int fou_parse_opt(int argc, char **argv, struct nlmsghdr *n,
>  	__u8 ipproto, type;
>  	bool gue_set = false;
>  	int ipproto_set = 0;
> -	unsigned short family = AF_INET;
> +	__u8 family = AF_INET;
>  
>  	while (argc > 0) {
>  		if (!matches(*argv, "port")) {
> @@ -103,7 +103,7 @@ static int fou_parse_opt(int argc, char **argv, struct nlmsghdr *n,
>  
>  	addattr16(n, 1024, FOU_ATTR_PORT, port);
>  	addattr8(n, 1024, FOU_ATTR_TYPE, type);
> -	addattr16(n, 1024, FOU_ATTR_AF, family);
> +	addattr8(n, 1024, FOU_ATTR_AF, family);
>  
>  	if (ipproto_set)
>  		addattr8(n, 1024, FOU_ATTR_IPPROTO, ipproto);

How is this binary compatiable with older versions.
Filip Moc Jan. 7, 2018, 9:25 p.m. UTC | #2
Hi Stephen,

> How is this binary compatiable with older versions.
I'm not sure what you mean. Kernel expects family attribute to be passed as u8
(and it always did). But current ip passes family attribute as u16. It works
now only on little endian systems because the relevant byte happens to be on
the same position. It is the current version of ip which is incompatible.

Filip
Stephen Hemminger Jan. 9, 2018, 4:01 p.m. UTC | #3
On Sun, 7 Jan 2018 15:28:13 +0100
Filip Moc <dev@moc6.cz> wrote:

> This fixes fou on big-endian systems.
> 
> Signed-off-by: Filip Moc <dev@moc6.cz>

Applied
diff mbox series

Patch

diff --git a/ip/ipfou.c b/ip/ipfou.c
index febc2c8c..1f392ade 100644
--- a/ip/ipfou.c
+++ b/ip/ipfou.c
@@ -52,7 +52,7 @@  static int fou_parse_opt(int argc, char **argv, struct nlmsghdr *n,
 	__u8 ipproto, type;
 	bool gue_set = false;
 	int ipproto_set = 0;
-	unsigned short family = AF_INET;
+	__u8 family = AF_INET;
 
 	while (argc > 0) {
 		if (!matches(*argv, "port")) {
@@ -103,7 +103,7 @@  static int fou_parse_opt(int argc, char **argv, struct nlmsghdr *n,
 
 	addattr16(n, 1024, FOU_ATTR_PORT, port);
 	addattr8(n, 1024, FOU_ATTR_TYPE, type);
-	addattr16(n, 1024, FOU_ATTR_AF, family);
+	addattr8(n, 1024, FOU_ATTR_AF, family);
 
 	if (ipproto_set)
 		addattr8(n, 1024, FOU_ATTR_IPPROTO, ipproto);