mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-29 20:23:01 +02:00
confd: use force_forwarding sysctl for IPv6
Introduced in Linux 6.17, the force_forwding flag corresponds to the ipv4 forwarding flag, which maps perfectly to the ietf-ip.yang model. Fixes #515 Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
@@ -337,7 +337,7 @@ static int netdag_gen_sysctl(struct dagger *net,
|
|||||||
|
|
||||||
node = lydx_get_descendant(lyd_child(dif), "ipv6", "forwarding", NULL);
|
node = lydx_get_descendant(lyd_child(dif), "ipv6", "forwarding", NULL);
|
||||||
err = err ? : netdag_gen_sysctl_setting(net, ifname, &sysctl, 1, "0", node,
|
err = err ? : netdag_gen_sysctl_setting(net, ifname, &sysctl, 1, "0", node,
|
||||||
"net.ipv6.conf.%s.forwarding", ifname);
|
"net.ipv6.conf.%s.force_forwarding", ifname);
|
||||||
|
|
||||||
if (!strcmp(ifname, "lo")) /* skip for now */
|
if (!strcmp(ifname, "lo")) /* skip for now */
|
||||||
goto skip_mtu;
|
goto skip_mtu;
|
||||||
@@ -353,39 +353,6 @@ skip_mtu:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* The global IPv6 forwarding lever is off by default, enabled when any
|
|
||||||
* interface has IPv6 forwarding enabled.
|
|
||||||
*/
|
|
||||||
static int netdag_ipv6_forwarding(struct lyd_node *cifs, struct dagger *net)
|
|
||||||
{
|
|
||||||
struct lyd_node *cif;
|
|
||||||
FILE *sysctl = NULL;
|
|
||||||
int ena = 0;
|
|
||||||
|
|
||||||
LYX_LIST_FOR_EACH(cifs, cif, "interface")
|
|
||||||
ena |= lydx_is_enabled(lydx_get_child(cif, "ipv6"), "forwarding");
|
|
||||||
|
|
||||||
if (ena)
|
|
||||||
sysctl = dagger_fopen_next(net, "init", "@post", NETDAG_INIT_POST, "ipv6.sysctl");
|
|
||||||
else
|
|
||||||
sysctl = dagger_fopen_current(net, "exit", "@pre", NETDAG_EXIT_PRE, "ipv6.sysctl");
|
|
||||||
if (!sysctl) {
|
|
||||||
/*
|
|
||||||
* Cannot create exit code in gen: -1. Safe to ignore
|
|
||||||
* since ipv6 forwarding is disabled by default.
|
|
||||||
*/
|
|
||||||
if (dagger_is_bootstrap(net) && !ena)
|
|
||||||
return 0;
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(sysctl, "net.ipv6.conf.all.forwarding = %d\n", ena);
|
|
||||||
fclose(sysctl);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int dummy_gen(struct lyd_node *dif, struct lyd_node *cif, FILE *ip)
|
static int dummy_gen(struct lyd_node *dif, struct lyd_node *cif, FILE *ip)
|
||||||
{
|
{
|
||||||
const char *ifname = lydx_get_cattr(cif, "name");
|
const char *ifname = lydx_get_cattr(cif, "name");
|
||||||
@@ -782,9 +749,6 @@ static sr_error_t ifchange_post(sr_session_ctx_t *session, struct dagger *net,
|
|||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
/* Figure out value of global IPv6 forwarding flag. Issue #785 */
|
|
||||||
err |= netdag_ipv6_forwarding(cifs, net);
|
|
||||||
|
|
||||||
/* For each configured bridge, the corresponding multicast
|
/* For each configured bridge, the corresponding multicast
|
||||||
* querier settings depend on both the bridge config and on
|
* querier settings depend on both the bridge config and on
|
||||||
* the presence of matching VLAN uppers. Since these can be
|
* the presence of matching VLAN uppers. Since these can be
|
||||||
|
|||||||
Reference in New Issue
Block a user