qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 2/2] linux-user: handle netlink flag NLA_F_NESTED


From: Laurent Vivier
Subject: Re: [PATCH v3 2/2] linux-user: handle netlink flag NLA_F_NESTED
Date: Tue, 7 Mar 2023 17:00:09 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0

Le 07/03/2023 à 16:42, Mathis Marion a écrit :
From: Mathis Marion <mathis.marion@silabs.com>

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>
---
  linux-user/fd-trans.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c
index 4852a75d9d..c04a97c73a 100644
--- a/linux-user/fd-trans.c
+++ b/linux-user/fd-trans.c
@@ -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:

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]