From 7f25c7f2efa2189463f18b028de40d2c92cfdd6d Mon Sep 17 00:00:00 2001 From: Igor Putovny Date: Fri, 1 Aug 2025 13:50:51 +0200 Subject: [PATCH] Extend and fix parsing of vxlan attributes --- sysdep/linux/netlink.c | 9 ++++++--- sysdep/unix/krt.h | 8 ++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c index 251841be8..d649fe600 100644 --- a/sysdep/linux/netlink.c +++ b/sysdep/linux/netlink.c @@ -1006,23 +1006,26 @@ nl_parse_link(struct nlmsghdr *h, int scan) nl_attr_len = RTA_PAYLOAD(li[IFLA_INFO_DATA]); nl_parse_attrs(RTA_DATA(li[IFLA_INFO_DATA]), ifla_vxlan_attr_want, data, sizeof(data)); + /* Save device type (vxlan) into attributes */ + ea_set_attr_u32(&f.attrs->eattrs, tmp_linpool, EA_IFACE_VXLAN_TYPE, 0, EAF_TYPE_INT, IFACE_TYPE_VXLAN); + if (data[IFLA_VXLAN_ID]) { u32 id = rta_get_u32(data[IFLA_VXLAN_ID]); - ea_set_attr(&f.attrs->eattrs, tmp_linpool, EA_DEVICE_IF_VXLAN_ID, 0, EAF_TYPE_INT, id); + ea_set_attr_u32(&f.attrs->eattrs, tmp_linpool, EA_IFACE_VXLAN_ID, 0, EAF_TYPE_INT, id); } if (data[IFLA_VXLAN_LEARNING]) { u8 learning = rta_get_u8(data[IFLA_VXLAN_LEARNING]); - ea_set_attr(&f.attrs->eattrs, tmp_linpool, EA_DEVICE_IF_VXLAN_LEARNING, 0, EAF_TYPE_INT, learning); + ea_set_attr_u32(&f.attrs->eattrs, tmp_linpool, EA_IFACE_VXLAN_LEARNING, 0, EAF_TYPE_INT, learning); } if (data[IFLA_VXLAN_LOCAL] || data[IFLA_VXLAN_LOCAL6]) { struct rtattr *attr = data[IFLA_VXLAN_LOCAL] ? data[IFLA_VXLAN_LOCAL] : data[IFLA_VXLAN_LOCAL6]; ip_addr addr = rta_get_ipa(attr); - ea_set_attr_data(&f.attrs->eattrs, tmp_linpool, EA_DEVICE_IF_VXLAN_IP_ADDR, 0, EAF_TYPE_IP_ADDRESS, &addr, sizeof(addr)); + ea_set_attr_data(&f.attrs->eattrs, tmp_linpool, EA_IFACE_VXLAN_IP_ADDR, 0, EAF_TYPE_IP_ADDRESS, &addr, sizeof(addr)); } } } diff --git a/sysdep/unix/krt.h b/sysdep/unix/krt.h index 2f2a486c7..7c5ea3f1b 100644 --- a/sysdep/unix/krt.h +++ b/sysdep/unix/krt.h @@ -32,10 +32,10 @@ struct kif_proto; #define KRT_LEARN_ALL 2 /* Learn both KRT_SRC_ALIEN and KRT_SRC_KERNEL routes */ -#define EA_DEVICE_IF_VXLAN_ID EA_CODE(PROTOCOL_DEVICE, 0) -#define EA_DEVICE_IF_VXLAN_LEARNING EA_CODE(PROTOCOL_DEVICE, 1) -#define EA_DEVICE_IF_VXLAN_IP_ADDR EA_CODE(PROTOCOL_DEVICE, 2) - +#define EA_IFACE_VXLAN_TYPE EA_CODE(PROTOCOL_DEVICE, 0) +#define EA_IFACE_VXLAN_ID EA_CODE(PROTOCOL_DEVICE, 1) +#define EA_IFACE_VXLAN_LEARNING EA_CODE(PROTOCOL_DEVICE, 2) +#define EA_IFACE_VXLAN_IP_ADDR EA_CODE(PROTOCOL_DEVICE, 3) /* Whenever we recognize our own routes, we allow learing of foreign routes */ -- 2.47.2