Explorar o código

[IPV6]: Add ifindex field to ND user option messages.

Userland neighbor discovery options are typically heavily involved with
the interface on which thay are received: add a missing ifindex field to
the original struct. Thanks to Rmi Denis-Courmont.

Signed-off-by: Pierre Ynard <linkfanel@yahoo.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
Pierre Ynard %!s(int64=17) %!d(string=hai) anos
pai
achega
dbb2ed2485
Modificáronse 2 ficheiros con 3 adicións e 0 borrados
  1. 2 0
      include/linux/rtnetlink.h
  2. 1 0
      net/ipv6/ndisc.c

+ 2 - 0
include/linux/rtnetlink.h

@@ -491,9 +491,11 @@ struct nduseroptmsg
 	unsigned char	nduseropt_family;
 	unsigned char	nduseropt_family;
 	unsigned char	nduseropt_pad1;
 	unsigned char	nduseropt_pad1;
 	unsigned short	nduseropt_opts_len;	/* Total length of options */
 	unsigned short	nduseropt_opts_len;	/* Total length of options */
+	int		nduseropt_ifindex;
 	__u8		nduseropt_icmp_type;
 	__u8		nduseropt_icmp_type;
 	__u8		nduseropt_icmp_code;
 	__u8		nduseropt_icmp_code;
 	unsigned short	nduseropt_pad2;
 	unsigned short	nduseropt_pad2;
+	unsigned int	nduseropt_pad3;
 	/* Followed by one or more ND options */
 	/* Followed by one or more ND options */
 };
 };
 
 

+ 1 - 0
net/ipv6/ndisc.c

@@ -1037,6 +1037,7 @@ static void ndisc_ra_useropt(struct sk_buff *ra, struct nd_opt_hdr *opt)
 
 
 	ndmsg = nlmsg_data(nlh);
 	ndmsg = nlmsg_data(nlh);
 	ndmsg->nduseropt_family = AF_INET6;
 	ndmsg->nduseropt_family = AF_INET6;
+	ndmsg->nduseropt_ifindex = ra->dev->ifindex;
 	ndmsg->nduseropt_icmp_type = icmp6h->icmp6_type;
 	ndmsg->nduseropt_icmp_type = icmp6h->icmp6_type;
 	ndmsg->nduseropt_icmp_code = icmp6h->icmp6_code;
 	ndmsg->nduseropt_icmp_code = icmp6h->icmp6_code;
 	ndmsg->nduseropt_opts_len = opt->nd_opt_len << 3;
 	ndmsg->nduseropt_opts_len = opt->nd_opt_len << 3;