Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbea49e1 authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by David S. Miller
Browse files

[IPV6] NDISC: Add proxy_ndp sysctl.



We do not always need proxy NDP functionality even we
enable forwarding.

Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 62dd9318
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -765,6 +765,9 @@ conf/all/forwarding - BOOLEAN

	This referred to as global forwarding.

proxy_ndp - BOOLEAN
	Do proxy ndp.

conf/interface/*:
	Change special settings per interface.

+2 −0
Original line number Diff line number Diff line
@@ -176,6 +176,7 @@ struct ipv6_devconf {
	__s32		accept_ra_rt_info_max_plen;
#endif
#endif
	__s32		proxy_ndp;
	void		*sysctl;
};

@@ -203,6 +204,7 @@ enum {
	DEVCONF_ACCEPT_RA_RTR_PREF,
	DEVCONF_RTR_PROBE_INTERVAL,
	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
	DEVCONF_PROXY_NDP,
	DEVCONF_MAX
};

+1 −0
Original line number Diff line number Diff line
@@ -556,6 +556,7 @@ enum {
	NET_IPV6_ACCEPT_RA_RTR_PREF=20,
	NET_IPV6_RTR_PROBE_INTERVAL=21,
	NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22,
	NET_IPV6_PROXY_NDP=23,
	__NET_IPV6_MAX
};

+11 −0
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ struct ipv6_devconf ipv6_devconf __read_mostly = {
	.accept_ra_rt_info_max_plen = 0,
#endif
#endif
	.proxy_ndp		= 0,
};

static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
@@ -205,6 +206,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
	.accept_ra_rt_info_max_plen = 0,
#endif
#endif
	.proxy_ndp		= 0,
};

/* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */
@@ -3337,6 +3339,7 @@ static void inline ipv6_store_devconf(struct ipv6_devconf *cnf,
	array[DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] = cnf->accept_ra_rt_info_max_plen;
#endif
#endif
	array[DEVCONF_PROXY_NDP] = cnf->proxy_ndp;
}

/* Maximum length of ifinfomsg attributes */
@@ -3859,6 +3862,14 @@ static struct addrconf_sysctl_table
		},
#endif
#endif
		{
			.ctl_name	=	NET_IPV6_PROXY_NDP,
			.procname	=	"proxy_ndp",
			.data		=	&ipv6_devconf.proxy_ndp,
			.maxlen		=	sizeof(int),
			.mode		=	0644,
			.proc_handler	=	&proc_dointvec,
		},
		{
			.ctl_name	=	0,	/* sentinel */
		}
+3 −1
Original line number Diff line number Diff line
@@ -412,7 +412,9 @@ int ip6_forward(struct sk_buff *skb)
		return -ETIMEDOUT;
	}

	if (pneigh_lookup(&nd_tbl, &hdr->daddr, skb->dev, 0)) {
	/* XXX: idev->cnf.proxy_ndp? */
	if (ipv6_devconf.proxy_ndp &&
	    pneigh_lookup(&nd_tbl, &hdr->daddr, skb->dev, 0)) {
		int proxied = ip6_forward_proxy_check(skb);
		if (proxied > 0)
			return ip6_input(skb);
Loading