]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Extend and fix parsing of vxlan attributes
authorIgor Putovny <igor.putovny@nic.cz>
Fri, 1 Aug 2025 11:50:51 +0000 (13:50 +0200)
committerIgor Putovny <igor.putovny@nic.cz>
Fri, 1 Aug 2025 13:23:28 +0000 (15:23 +0200)
sysdep/linux/netlink.c
sysdep/unix/krt.h

index 251841be8b55ba440142110717e7da49d0be98ba..d649fe600bf1b7e850f8730821092a39cf492553 100644 (file)
@@ -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));
       }
     }
   }
index 2f2a486c7b2a8786f4aed3c8a0a5f6b7c4ef2da4..7c5ea3f1b10d60a30def34fd10d4f93258fe62ae 100644 (file)
@@ -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 */