mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-31 14:13:39 +00:00

It is currently impossible to enable ipv6 forwarding on a per-interface basis like in ipv4. To enable forwarding on an ipv6 interface we need to enable it on all interfaces and disable it on the other interfaces using a netfilter rule. This is especially cumbersome if you have lots of interfaces and only want to enable forwarding on a few. According to the sysctl docs [0] the `net.ipv6.conf.all.forwarding` enables forwarding for all interfaces, while the interface-specific `net.ipv6.conf.<interface>.forwarding` configures the interface Host/Router configuration. Introduce a new sysctl flag `force_forwarding`, which can be set on every interface. The ip6_forwarding function will then check if the global forwarding flag OR the force_forwarding flag is active and forward the packet. To preserve backwards-compatibility reset the flag (on all interfaces) to 0 if the net.ipv6.conf.all.forwarding flag is set to 0. Add a short selftest that checks if a packet gets forwarded with and without `force_forwarding`. [0]: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: Gabriel Goller <g.goller@proxmox.com> Link: https://patch.msgid.link/20250722081847.132632-1-g.goller@proxmox.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
32 lines
657 B
C
32 lines
657 B
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
#ifndef _UAPI_LINUX_NETCONF_H_
|
|
#define _UAPI_LINUX_NETCONF_H_
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/netlink.h>
|
|
|
|
struct netconfmsg {
|
|
__u8 ncm_family;
|
|
};
|
|
|
|
enum {
|
|
NETCONFA_UNSPEC,
|
|
NETCONFA_IFINDEX,
|
|
NETCONFA_FORWARDING,
|
|
NETCONFA_RP_FILTER,
|
|
NETCONFA_MC_FORWARDING,
|
|
NETCONFA_PROXY_NEIGH,
|
|
NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
|
|
NETCONFA_INPUT,
|
|
NETCONFA_BC_FORWARDING,
|
|
NETCONFA_FORCE_FORWARDING,
|
|
__NETCONFA_MAX
|
|
};
|
|
#define NETCONFA_MAX (__NETCONFA_MAX - 1)
|
|
#define NETCONFA_ALL -1
|
|
|
|
#define NETCONFA_IFINDEX_ALL -1
|
|
#define NETCONFA_IFINDEX_DEFAULT -2
|
|
|
|
#endif /* _UAPI_LINUX_NETCONF_H_ */
|