linux-user: handle netlink flag NLA_F_NESTED
Newer kernel versions require this flag to be present contrary to older ones. Depending on the libnl version it is added or not. Typically when using rtnl_link_inet6_set_addr_gen_mode, the netlink packet generated may contain the following attribute: with libnl 3.4 {nla_len=16, nla_type=IFLA_AF_SPEC}, [ {nla_len=12, nla_type=AF_INET6}, [{nla_len=5, nla_type=IFLA_INET6_ADDR_GEN_MODE}, IN6_ADDR_GEN_MODE_NONE] ] with libnl 3.7 {nla_len=16, nla_type=NLA_F_NESTED|IFLA_AF_SPEC}, [ {nla_len=12, nla_type=NLA_F_NESTED|AF_INET6}, [{nla_len=5, nla_type=IFLA_INET6_ADDR_GEN_MODE}, IN6_ADDR_GEN_MODE_NONE]] ] Masking the type is likely needed in other places. Only the above cases are implemented in this patch. Signed-off-by: Mathis Marion <mathis.marion@silabs.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20230307154256.101528-3-Mathis.Marion@silabs.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
44cf6731d6
commit
2fe8ed6fe9
@ -1359,7 +1359,7 @@ static abi_long target_to_host_for_each_rtattr(struct rtattr *rtattr,
|
||||
|
||||
static abi_long target_to_host_data_spec_nlattr(struct nlattr *nlattr)
|
||||
{
|
||||
switch (nlattr->nla_type) {
|
||||
switch (nlattr->nla_type & NLA_TYPE_MASK) {
|
||||
case AF_INET6:
|
||||
return target_to_host_for_each_nlattr(NLA_DATA(nlattr), nlattr->nla_len,
|
||||
target_to_host_data_inet6_nlattr);
|
||||
@ -1375,7 +1375,7 @@ static abi_long target_to_host_data_link_rtattr(struct rtattr *rtattr)
|
||||
{
|
||||
uint32_t *u32;
|
||||
|
||||
switch (rtattr->rta_type) {
|
||||
switch (rtattr->rta_type & NLA_TYPE_MASK) {
|
||||
/* uint32_t */
|
||||
case QEMU_IFLA_MTU:
|
||||
case QEMU_IFLA_TXQLEN:
|
||||
|
Loading…
Reference in New Issue
Block a user