Skip to content

Commit 5b28358

Browse files
committed
compat-suse: use iftype for specific sysctl handling
* Inherit all,default,interface sysctl settings also for loopback, except for `use_tempaddr` and `accept_dad` sysctl's. * Consider only interface specific `accept_redirects` sysctl settings.
1 parent e5f57f0 commit 5b28358

File tree

1 file changed

+38
-31
lines changed

1 file changed

+38
-31
lines changed

client/suse/compat-suse.c

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6471,45 +6471,52 @@ ni_suse_ifcfg_parse_firewall(ni_suse_ifcfg_array_t *ifcfgs, ni_suse_ifcfg_t *ifc
64716471
return TRUE;
64726472
}
64736473

6474-
/*
6475-
* Read ifsysctl file
6476-
*/
64776474
static const ni_var_t *
6478-
__ifsysctl_get_var(ni_var_array_t *vars, const char *path, const char *ifname, const char *attr)
6475+
ni_suse_ifsysctl_get_var(ni_var_array_t *vars, const char *path, ni_netdev_t *dev,
6476+
const char *attr)
64796477
{
6480-
const char *def_names[] = { "all", "default", ifname, NULL };
6481-
const char *lo_names[] = { ifname, NULL };
6482-
const char **names = ni_string_eq(ifname, "lo") ? lo_names : def_names;
6483-
const char **name;
6484-
const ni_var_t *ret = NULL;
6478+
const char *all[] = { dev->name, "default", "all", NULL };
6479+
const char *ifc_only[] = { dev->name, NULL };
6480+
const char **names = all;
6481+
const char **name = NULL;
64856482
const ni_var_t *var;
64866483

6484+
if (ni_string_eq(attr, "accept_redirects") ||
6485+
ni_string_eq(attr, "use_tempaddr")) {
6486+
if (dev->link.type == NI_IFTYPE_LOOPBACK)
6487+
return NULL;
6488+
}
6489+
6490+
if (ni_string_eq(attr, "accept_redirects"))
6491+
names = ifc_only;
6492+
64876493
for (name = names; *name; name++) {
64886494
var = ni_ifsysctl_vars_get(vars, "%s/%s/%s", path, *name, attr);
64896495
if (!var || ni_string_empty(var->value))
64906496
continue;
6491-
ret = var;
6497+
return var;
64926498
}
6493-
return ret;
6499+
6500+
return NULL;
64946501
}
64956502

64966503
static const char *
6497-
__ifsysctl_get_str(ni_var_array_t *vars, const char *path, const char *ifname, const char *attr)
6504+
ni_suse_ifsysctl_get_str(ni_var_array_t *vars, const char *path, ni_netdev_t *dev, const char *attr)
64986505
{
64996506
const ni_var_t *var;
65006507

6501-
if ((var = __ifsysctl_get_var(vars, path, ifname, attr)))
6508+
if ((var = ni_suse_ifsysctl_get_var(vars, path, dev, attr)))
65026509
return var->value;
65036510
return NULL;
65046511
}
65056512

65066513
static ni_bool_t
6507-
__ifsysctl_get_int(ni_var_array_t *vars, const char *path, const char *ifname,
6514+
ni_suse_ifsysctl_get_int(ni_var_array_t *vars, const char *path, ni_netdev_t *dev,
65086515
const char *attr, int *value, int base)
65096516
{
65106517
const ni_var_t *var;
65116518

6512-
if (!(var = __ifsysctl_get_var(vars, path, ifname, attr)))
6519+
if (!(var = ni_suse_ifsysctl_get_var(vars, path, dev, attr)))
65136520
return FALSE;
65146521

65156522
if (ni_parse_int(var->value, value, base) < 0) {
@@ -6524,13 +6531,13 @@ __ifsysctl_get_int(ni_var_array_t *vars, const char *path, const char *ifname,
65246531
}
65256532

65266533
static ni_bool_t
6527-
__ifsysctl_get_ipv6(ni_var_array_t *vars, const char *path, const char *ifname,
6534+
ni_suse_ifsysctl_get_ipv6(ni_var_array_t *vars, const char *path, ni_netdev_t *dev,
65286535
const char *attr, struct in6_addr *ipv6)
65296536
{
65306537
ni_sockaddr_t addr;
65316538
const char *str;
65326539

6533-
str = __ifsysctl_get_str(vars, path, ifname, attr);
6540+
str = ni_suse_ifsysctl_get_str(vars, path, dev, attr);
65346541
if (!str || ni_sockaddr_parse(&addr, str, AF_INET6) < 0)
65356542
return FALSE;
65366543

@@ -6539,12 +6546,12 @@ __ifsysctl_get_ipv6(ni_var_array_t *vars, const char *path, const char *ifname,
65396546
}
65406547

65416548
static void
6542-
__ifsysctl_get_tristate(ni_var_array_t *vars, const char *path, const char *ifname,
6549+
ni_suse_ifsysctl_get_tristate(ni_var_array_t *vars, const char *path, ni_netdev_t *dev,
65436550
const char *attr, ni_tristate_t *tristate)
65446551
{
65456552
int value = NI_TRISTATE_DEFAULT;
65466553

6547-
__ifsysctl_get_int(vars, path, ifname, attr, &value, 10);
6554+
ni_suse_ifsysctl_get_int(vars, path, dev, attr, &value, 10);
65486555
if (ni_tristate_is_set(value))
65496556
ni_tristate_set(tristate, value);
65506557
}
@@ -6570,12 +6577,12 @@ ni_suse_ifcfg_parse_ifsysctl_ipv4(ni_suse_ifcfg_t *ifcfg, ni_var_array_t *ifsysc
65706577

65716578
/* Note: No conf.arp-verify in sysctl, can be set with CHECK_DUPLICATE_IP */
65726579

6573-
__ifsysctl_get_tristate(ifsysctl, "net/ipv4/conf", dev->name,
6580+
ni_suse_ifsysctl_get_tristate(ifsysctl, "net/ipv4/conf", dev,
65746581
"forwarding", &ipv4->conf.forwarding);
65756582
/* Note: arp_notify is also set with SEND_GRATUITOUS_ARP */
6576-
__ifsysctl_get_tristate(ifsysctl, "net/ipv4/conf", dev->name,
6583+
ni_suse_ifsysctl_get_tristate(ifsysctl, "net/ipv4/conf", dev,
65776584
"arp_notify", &ipv4->conf.arp_notify);
6578-
__ifsysctl_get_tristate(ifsysctl, "net/ipv4/conf", dev->name,
6585+
ni_suse_ifsysctl_get_tristate(ifsysctl, "net/ipv4/conf", dev,
65796586
"accept_redirects", &ipv4->conf.accept_redirects);
65806587

65816588
return TRUE;
@@ -6595,10 +6602,10 @@ ni_suse_ifcfg_parse_ifsysctl_ipv6(ni_suse_ifcfg_t *ifcfg, ni_var_array_t *ifsysc
65956602
* First, get sysctl's affecting also "IPv6 L2" aka
65966603
* stable secret for the fe80 link-address assignment.
65976604
*/
6598-
__ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev->name,
6605+
ni_suse_ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev,
65996606
"addr_gen_mode", &ipv6->conf.addr_gen_mode, 10);
66006607

6601-
__ifsysctl_get_ipv6(ifsysctl, "net/ipv6/conf", dev->name,
6608+
ni_suse_ifsysctl_get_ipv6(ifsysctl, "net/ipv6/conf", dev,
66026609
"stable_secret", &ipv6->conf.stable_secret);
66036610

66046611
/*
@@ -6627,43 +6634,43 @@ ni_suse_ifcfg_parse_ifsysctl_ipv6(ni_suse_ifcfg_t *ifcfg, ni_var_array_t *ifsysc
66276634
/*
66286635
* When IPv6 is disabled via sysctl, we're done
66296636
*/
6630-
__ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev->name,
6637+
ni_suse_ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev,
66316638
"disable_ipv6", &disable_ipv6);
66326639
if (ni_tristate_is_set(disable_ipv6))
66336640
ni_tristate_set(&ipv6->conf.enabled, !disable_ipv6);
66346641
if (ni_tristate_is_disabled(ipv6->conf.enabled))
66356642
return TRUE;
66366643

6637-
__ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev->name,
6644+
ni_suse_ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev,
66386645
"forwarding", &ipv6->conf.forwarding);
66396646

6640-
__ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev->name,
6647+
ni_suse_ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev,
66416648
"accept_ra", &ipv6->conf.accept_ra, 10);
66426649
if (ipv6->conf.accept_ra > NI_IPV6_ACCEPT_RA_ROUTER)
66436650
ipv6->conf.accept_ra = NI_IPV6_ACCEPT_RA_ROUTER;
66446651
else
66456652
if (ipv6->conf.accept_ra < NI_IPV6_ACCEPT_RA_DEFAULT)
66466653
ipv6->conf.accept_ra = NI_IPV6_ACCEPT_RA_DEFAULT;
66476654

6648-
__ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev->name,
6655+
ni_suse_ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev,
66496656
"accept_dad", &ipv6->conf.accept_dad, 10);
66506657
if (ipv6->conf.accept_dad > NI_IPV6_ACCEPT_DAD_FAIL_PROTOCOL)
66516658
ipv6->conf.accept_dad = NI_IPV6_ACCEPT_DAD_FAIL_PROTOCOL;
66526659
else
66536660
if (ipv6->conf.accept_dad < NI_IPV6_ACCEPT_DAD_DEFAULT)
66546661
ipv6->conf.accept_dad = NI_IPV6_ACCEPT_DAD_DEFAULT;
66556662

6656-
__ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev->name,
6663+
ni_suse_ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev,
66576664
"autoconf", &ipv6->conf.autoconf);
66586665

6659-
__ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev->name,
6666+
ni_suse_ifsysctl_get_int(ifsysctl, "net/ipv6/conf", dev,
66606667
"use_tempaddr", &ipv6->conf.privacy, 10);
66616668
if (ipv6->conf.privacy > NI_IPV6_PRIVACY_PREFER_TEMPORARY)
66626669
ipv6->conf.privacy = NI_IPV6_PRIVACY_PREFER_TEMPORARY;
66636670
else if (ipv6->conf.privacy < NI_IPV6_PRIVACY_DEFAULT)
66646671
ipv6->conf.privacy = NI_IPV6_PRIVACY_DISABLED;
66656672

6666-
__ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev->name,
6673+
ni_suse_ifsysctl_get_tristate(ifsysctl, "net/ipv6/conf", dev,
66676674
"accept_redirects", &ipv6->conf.accept_redirects);
66686675

66696676
return TRUE;

0 commit comments

Comments
 (0)