[IFLA_VXLAN_L3MISS] = { .type = NLA_U8 },
};
+static const NLType rtnl_bond_arp_target_types[BOND_ARP_TARGETS_MAX + 1] = {
+ [BOND_ARP_TARGETS_0] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_1] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_2] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_3] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_4] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_5] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_6] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_7] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_8] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_9] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_10] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_11] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_12] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_13] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_14] = { .type = NLA_U32 },
+ [BOND_ARP_TARGETS_MAX] = { .type = NLA_U32 },
+};
+
+static const NLTypeSystem rtnl_bond_arp_type_system = {
+ .max = ELEMENTSOF(rtnl_bond_arp_target_types) - 1,
+ .types = rtnl_bond_arp_target_types,
+};
+
static const NLType rtnl_link_info_data_bond_types[IFLA_BOND_MAX + 1] = {
[IFLA_BOND_MODE] = { .type = NLA_U8 },
[IFLA_BOND_ACTIVE_SLAVE] = { .type = NLA_U32 },
[IFLA_BOND_DOWNDELAY] = { .type = NLA_U32 },
[IFLA_BOND_USE_CARRIER] = { .type = NLA_U8 },
[IFLA_BOND_ARP_INTERVAL] = { .type = NLA_U32 },
- [IFLA_BOND_ARP_IP_TARGET] = { .type = NLA_NESTED },
+ [IFLA_BOND_ARP_IP_TARGET] = { .type = NLA_NESTED, .type_system = &rtnl_bond_arp_type_system },
[IFLA_BOND_ARP_VALIDATE] = { .type = NLA_U32 },
[IFLA_BOND_ARP_ALL_TARGETS] = { .type = NLA_U32 },
[IFLA_BOND_PRIMARY] = { .type = NLA_U32 },
[NL_UNION_LINK_INFO_DATA_IP6GRETAP_TUNNEL] = "ip6gretap",
[NL_UNION_LINK_INFO_DATA_SIT_TUNNEL] = "sit",
[NL_UNION_LINK_INFO_DATA_VTI_TUNNEL] = "vti",
+ [NL_UNION_LINK_INFO_DATA_VTI6_TUNNEL] = "vti6",
[NL_UNION_LINK_INFO_DATA_IP6TNL_TUNNEL] = "ip6tnl",
};
.types = rtnl_link_info_data_iptun_types },
[NL_UNION_LINK_INFO_DATA_VTI_TUNNEL] = { .max = ELEMENTSOF(rtnl_link_info_data_ipvti_types) - 1,
.types = rtnl_link_info_data_ipvti_types },
+ [NL_UNION_LINK_INFO_DATA_VTI6_TUNNEL] = { .max = ELEMENTSOF(rtnl_link_info_data_ipvti_types) - 1,
+ .types = rtnl_link_info_data_ipvti_types },
[NL_UNION_LINK_INFO_DATA_IP6TNL_TUNNEL] = { .max = ELEMENTSOF(rtnl_link_info_data_ip6tnl_types) - 1,
.types = rtnl_link_info_data_ip6tnl_types },
.types = rtnl_link_types,
};
-static const NLType rtnl_address_types[IFA_MAX + 1] = {
+/* IFA_FLAGS was defined in kernel 3.14, but we still support older
+ * kernels where IFA_MAX is lower. */
+static const NLType rtnl_address_types[CONST_MAX(IFA_MAX, IFA_FLAGS) + 1] = {
[IFA_ADDRESS] = { .type = NLA_IN_ADDR },
[IFA_LOCAL] = { .type = NLA_IN_ADDR },
[IFA_LABEL] = { .type = NLA_STRING, .size = IFNAMSIZ - 1 },