summaryrefslogtreecommitdiff
path: root/src/core/devices/nm-device-bond.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/devices/nm-device-bond.c')
-rw-r--r--src/core/devices/nm-device-bond.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/core/devices/nm-device-bond.c b/src/core/devices/nm-device-bond.c
index 853e1b6c1b..cb32331921 100644
--- a/src/core/devices/nm-device-bond.c
+++ b/src/core/devices/nm-device-bond.c
@@ -57,7 +57,7 @@
#define OPTIONS_REAPPLY_FULL \
OPTIONS_REAPPLY_SUBSET, NM_SETTING_BOND_OPTION_ACTIVE_SLAVE, \
- NM_SETTING_BOND_OPTION_ARP_IP_TARGET
+ NM_SETTING_BOND_OPTION_ARP_IP_TARGET, NM_SETTING_BOND_OPTION_NS_IP6_TARGET
/*****************************************************************************/
@@ -270,7 +270,7 @@ set_arp_targets(NMDevice *device, const char *cur_arp_ip_target, const char *new
cur_strv =
nm_strsplit_set_full(cur_arp_ip_target, NM_ASCII_SPACES, NM_STRSPLIT_SET_FLAGS_STRSTRIP);
- new_strv = nm_utils_bond_option_arp_ip_targets_split(new_arp_ip_target);
+ new_strv = nm_utils_bond_option_ip_split(new_arp_ip_target);
cur_len = NM_PTRARRAY_LEN(cur_strv);
new_len = NM_PTRARRAY_LEN(new_strv);
@@ -367,7 +367,7 @@ _bond_arp_ip_target_to_platform(const char *value, in_addr_t out[static NM_BOND_
int i;
int added = 0;
- ip = nm_utils_bond_option_arp_ip_targets_split(value);
+ ip = nm_utils_bond_option_ip_split(value);
if (!ip)
return added;
@@ -383,6 +383,31 @@ _bond_arp_ip_target_to_platform(const char *value, in_addr_t out[static NM_BOND_
return added;
}
+static guint8
+_bond_ns_ip6_target_to_platform(const char *value,
+ struct in6_addr out[static NM_BOND_MAX_ARP_TARGETS])
+{
+ gs_free const char **ip = NULL;
+ struct in6_addr in6_a;
+ int i;
+ int added = 0;
+
+ ip = nm_utils_bond_option_ip_split(value);
+
+ if (!ip)
+ return added;
+
+ for (i = 0; ip[i]; i++) {
+ if (added > NM_BOND_MAX_ARP_TARGETS - 1)
+ break;
+ if (!nm_inet_parse_bin(AF_INET6, ip[i], NULL, &in6_a))
+ nm_assert_not_reached(); /* verify() already validated the IP addresses */
+
+ out[added++] = in6_a;
+ }
+ return added;
+}
+
static int
_setting_bond_primary_opt_as_ifindex(NMSettingBond *s_bond)
{
@@ -462,6 +487,11 @@ _platform_lnk_bond_init_from_setting(NMSettingBond *s_bond, NMPlatformLnkBond *p
props->arp_ip_targets_num =
_bond_arp_ip_target_to_platform(opt_value, props->arp_ip_target);
+ opt_value = nm_setting_bond_get_option_normalized(s_bond, NM_SETTING_BOND_OPTION_NS_IP6_TARGET);
+ if (opt_value != NULL)
+ props->ns_ip6_targets_num =
+ _bond_ns_ip6_target_to_platform(opt_value, props->ns_ip6_target);
+
props->miimon_has = !props->arp_interval && !props->arp_validate;
props->updelay_has = props->miimon_has && props->miimon;
props->downdelay_has = props->miimon_has && props->miimon;