platform: configure HSR protocol version from property

Uses the `hsr.protocol-version` property defined in the previous
commit to configure the property in the kernel.
This commit is contained in:
Jan Vaclav 2025-09-09 01:20:19 +02:00
parent 9a2395c779
commit 0b99629278
4 changed files with 19 additions and 5 deletions

View file

@ -128,9 +128,13 @@ create_and_realize(NMDevice *device,
lnk.port1 = nm_platform_link_get_ifindex(NM_PLATFORM_GET, nm_setting_hsr_get_port1(s_hsr));
if (nm_setting_hsr_get_port2(s_hsr) != NULL)
lnk.port2 = nm_platform_link_get_ifindex(NM_PLATFORM_GET, nm_setting_hsr_get_port2(s_hsr));
lnk.multicast_spec = nm_setting_hsr_get_multicast_spec(s_hsr);
lnk.prp = nm_setting_hsr_get_prp(s_hsr);
lnk.multicast_spec = nm_setting_hsr_get_multicast_spec(s_hsr);
lnk.prp = nm_setting_hsr_get_prp(s_hsr);
lnk.protocol_version = nm_setting_hsr_get_protocol_version(s_hsr);
r = nm_platform_link_hsr_add(nm_device_get_platform(device), iface, &lnk, out_plink);
if (r < 0) {
g_set_error(error,
NM_DEVICE_ERROR,

View file

@ -5220,6 +5220,11 @@ _nl_msg_new_link_set_linkinfo(struct nl_msg *msg, NMLinkType link_type, gconstpo
NLA_PUT_U8(msg, IFLA_HSR_MULTICAST_SPEC, props->multicast_spec);
NLA_PUT_U8(msg, IFLA_HSR_PROTOCOL, props->prp);
if (!props->prp && props->protocol_version >= 0) {
NLA_PUT_U8(msg, IFLA_HSR_VERSION, props->protocol_version);
}
break;
}
case NM_LINK_TYPE_SIT:

View file

@ -6569,12 +6569,14 @@ nm_platform_lnk_hsr_to_string(const NMPlatformLnkHsr *lnk, char *buf, gsize len)
"port1 %d "
"port2 %d "
"supervision_address " NM_ETHER_ADDR_FORMAT_STR " multicast_spec %u "
"prp %s",
"prp %s "
"protocol_version %d",
lnk->port1,
lnk->port2,
NM_ETHER_ADDR_FORMAT_VAL(&lnk->supervision_address),
lnk->multicast_spec,
lnk->prp ? "on" : "off");
lnk->prp ? "on" : "off",
lnk->protocol_version);
return buf;
}
@ -8491,7 +8493,8 @@ nm_platform_lnk_hsr_hash_update(const NMPlatformLnkHsr *obj, NMHashState *h)
obj->port2,
obj->supervision_address,
obj->multicast_spec,
NM_HASH_COMBINE_BOOLS(guint8, obj->prp));
NM_HASH_COMBINE_BOOLS(guint8, obj->prp),
obj->protocol_version);
}
int
@ -8503,6 +8506,7 @@ nm_platform_lnk_hsr_cmp(const NMPlatformLnkHsr *a, const NMPlatformLnkHsr *b)
NM_CMP_FIELD_MEMCMP(a, b, supervision_address);
NM_CMP_FIELD(a, b, multicast_spec);
NM_CMP_FIELD_BOOL(a, b, prp);
NM_CMP_FIELD(a, b, protocol_version);
return 0;
}

View file

@ -852,6 +852,7 @@ typedef struct {
int port1;
int port2;
NMEtherAddr supervision_address;
gint8 protocol_version;
guint8 multicast_spec;
bool prp : 1;
} _nm_alignas(NMPlatformObject) NMPlatformLnkHsr;