From nobody Fri Dec 27 02:39:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1732891239; cv=none; d=zohomail.com; s=zohoarc; b=V8dRVvnO441ZaLCIRQMREqUNpOzmkwG4dRvbZmdrzINs07EPsfVtxyXjZYHoSIBiuvYkx2ZKiyQC+JJEzzhi21H3RqsZG6D4tVZ0pl2Z0MTh0ezyBQrLCjZj8LDiXbGbDrmIxIMd8qH8Q6yHOLEeol2StZy0H8yo8yePR/goBw0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1732891239; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=u3vT2NGqWF2ZNSLPFiGwb6GgN/ula2L8yU0p6681lmo=; b=LEx+rRUSAab/IWX7OO9pHPSCVyVvldrpAMNlcsU/imlWQ07S8rNkosF5OGxLpdOUtCwTQnBnPrVaLVyQ4Jl3nU/z4jraj9Eyh2qSpIFnOi91bwJdkakpE6xcQ6K7HjS1nS86DWuGTzJeIAXECMisWuTbssfD5L41Zr0n2IkH7fI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1732891239907610.6692024895883; Fri, 29 Nov 2024 06:40:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tH29Q-0003Kn-NX; Fri, 29 Nov 2024 09:39:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tH29N-0003Jg-Ke for qemu-devel@nongnu.org; Fri, 29 Nov 2024 09:39:17 -0500 Received: from nyc.source.kernel.org ([147.75.193.91]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tH29M-00060Y-1L for qemu-devel@nongnu.org; Fri, 29 Nov 2024 09:39:17 -0500 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id B7B07A43F24; Fri, 29 Nov 2024 14:37:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3F91BC4CED2; Fri, 29 Nov 2024 14:39:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1732891151; bh=MgRTP22t4SKUiYqLZ8THhSKfE5EfZJjrqXomHG893eg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JKgjA/k5itQ13Wri+f7RcHaRMVosbHW1wQaFgcugcZ/m6x4nlVvactFaLm5r0/8o1 iTEDq5K8DM3Z44+J/Bx+J99HKvvgEdDCPPTsr3W5DAXMqhh/1uhIOzV3sa7v2r/3zp P/7BAKKUj3Zu5KHlzzpvLY3B9vYXt6kXLT4c7h+v6qlZLcE5w6BnDeoSCem4gpABEu FPfuAef/ThqGU/u49Y6nRWxShyKsB8ZxTqxCLH77gSAUiqslj3ZhzZ2HAg7ZK900nB UPfInVvFx6i+7xL3Ioz87l8o8KMUBjBzC25GhWi3gNLvKO9HdgdibEca6qOYdGEgt3 qlPKFjMU2CCAQ== From: deller@kernel.org To: Laurent Vivier , qemu-devel@nongnu.org Cc: deller@gmx.de Subject: [PATCH 5/6] linux-user: netlink: add netlink neighbour emulation Date: Fri, 29 Nov 2024 15:39:00 +0100 Message-ID: <20241129143901.11291-6-deller@kernel.org> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241129143901.11291-1-deller@kernel.org> References: <20241129143901.11291-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=147.75.193.91; envelope-from=deller@kernel.org; helo=nyc.source.kernel.org X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1732891241520019100 Content-Type: text/plain; charset="utf-8" From: Helge Deller Fixes various warnings in the testsuite while building gupnp: gssdp-net-DEBUG: Failed to send netlink message: Operation not supported gupnp-context-DEBUG: Mismatch between host header and host IP (example.com= , expected: 127.0.0.1) gupnp-context-DEBUG: Mismatch between host header and host port (80, expec= ted 4711) gupnp-context-DEBUG: Mismatch between host header and host IP (192.168.1.2= , expected: 127.0.0.1) gupnp-context-DEBUG: Mismatch between host header and host IP (fe80::01, e= xpected: 127.0.0.1) gupnp-context-DEBUG: Mismatch between host header and host port (80, expec= ted 4711) gupnp-context-DEBUG: Failed to parse HOST header from request: Invalid IPv= 6 address ?[fe80::01%1]? in URI gupnp-context-DEBUG: Failed to parse HOST header from request: Invalid IPv= 6 address ?[fe80::01%eth0]? in URI gupnp-context-DEBUG: Failed to parse HOST header from request: Could not p= arse port ?:1? in URI gupnp-context-DEBUG: Mismatch between host header and host IP (example.com= , expected: ::1) gupnp-context-DEBUG: Mismatch between host header and host port (80, expec= ted 4711) gupnp-context-DEBUG: Mismatch between host header and host IP (example.com= , expected: ::1) gupnp-context-DEBUG: Mismatch between host header and host port (80, expec= ted 4711) gupnp-context-DEBUG: Mismatch between host header and host IP (example.com= , expected: ::1) Signed-off-by: Helge Deller --- linux-user/fd-trans.c | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c index 6191e3115b..e861572a35 100644 --- a/linux-user/fd-trans.c +++ b/linux-user/fd-trans.c @@ -25,12 +25,16 @@ #ifdef CONFIG_RTNETLINK #include #include +#include #endif #include "qemu.h" #include "user-internals.h" #include "fd-trans.h" #include "signal-common.h" =20 +#define NDM_RTA(r) ((struct rtattr*)(((char*)(r)) + \ + NLMSG_ALIGN(sizeof(struct ndmsg)))) + enum { QEMU_IFLA_BR_UNSPEC, QEMU_IFLA_BR_FORWARD_DELAY, @@ -1210,6 +1214,35 @@ static abi_long host_to_target_data_route_rtattr(str= uct rtattr *rtattr) return 0; } =20 +static abi_long host_to_target_data_neigh_rtattr(struct rtattr *rtattr) +{ + struct nda_cacheinfo *ndac; + uint32_t *u32; + + switch (rtattr->rta_type) { + case NDA_UNSPEC: + case NDA_DST: + case NDA_LLADDR: + break; + case NDA_PROBES: + u32 =3D RTA_DATA(rtattr); + *u32 =3D tswap32(*u32); + break; + case NDA_CACHEINFO: + ndac =3D RTA_DATA(rtattr); + ndac->ndm_confirmed =3D tswap32(ndac->ndm_confirmed); + ndac->ndm_used =3D tswap32(ndac->ndm_used); + ndac->ndm_updated =3D tswap32(ndac->ndm_updated); + ndac->ndm_refcnt =3D tswap32(ndac->ndm_refcnt); + break; + default: + qemu_log_mask(LOG_UNIMP, "Unknown host to target NEIGH type: %d\n", + rtattr->rta_type); + break; + } + return 0; +} + static abi_long host_to_target_link_rtattr(struct rtattr *rtattr, uint32_t rtattr_len) { @@ -1231,12 +1264,20 @@ static abi_long host_to_target_route_rtattr(struct = rtattr *rtattr, host_to_target_data_route_rtattr= ); } =20 +static abi_long host_to_target_neigh_rtattr(struct rtattr *rtattr, + uint32_t rtattr_len) +{ + return host_to_target_for_each_rtattr(rtattr, rtattr_len, + host_to_target_data_neigh_rtattr= ); +} + static abi_long host_to_target_data_route(struct nlmsghdr *nlh) { uint32_t nlmsg_len; struct ifinfomsg *ifi; struct ifaddrmsg *ifa; struct rtmsg *rtm; + struct ndmsg *ndm; =20 nlmsg_len =3D nlh->nlmsg_len; switch (nlh->nlmsg_type) { @@ -1263,6 +1304,17 @@ static abi_long host_to_target_data_route(struct nlm= sghdr *nlh) nlmsg_len - NLMSG_LENGTH(sizeof(*if= a))); } break; + case RTM_NEWNEIGH: + case RTM_DELNEIGH: + case RTM_GETNEIGH: + if (nlh->nlmsg_len >=3D NLMSG_LENGTH(sizeof(*ndm))) { + ndm =3D NLMSG_DATA(nlh); + ndm->ndm_ifindex =3D tswap32(ndm->ndm_ifindex); + ndm->ndm_state =3D tswap16(ndm->ndm_state); + host_to_target_neigh_rtattr(NDM_RTA(ndm), + nlmsg_len - NLMSG_LENGTH(sizeof(*ndm))= ); + } + break; case RTM_NEWROUTE: case RTM_DELROUTE: case RTM_GETROUTE: @@ -1410,6 +1462,35 @@ static abi_long target_to_host_data_addr_rtattr(stru= ct rtattr *rtattr) return 0; } =20 +static abi_long target_to_host_data_neigh_rtattr(struct rtattr *rtattr) +{ + struct nda_cacheinfo *ndac; + uint32_t *u32; + + switch (rtattr->rta_type) { + case NDA_UNSPEC: + case NDA_DST: + case NDA_LLADDR: + break; + case NDA_PROBES: + u32 =3D RTA_DATA(rtattr); + *u32 =3D tswap32(*u32); + break; + case NDA_CACHEINFO: + ndac =3D RTA_DATA(rtattr); + ndac->ndm_confirmed =3D tswap32(ndac->ndm_confirmed); + ndac->ndm_used =3D tswap32(ndac->ndm_used); + ndac->ndm_updated =3D tswap32(ndac->ndm_updated); + ndac->ndm_refcnt =3D tswap32(ndac->ndm_refcnt); + break; + default: + qemu_log_mask(LOG_UNIMP, "Unknown target NEIGH type: %d\n", + rtattr->rta_type); + break; + } + return 0; +} + static abi_long target_to_host_data_route_rtattr(struct rtattr *rtattr) { uint32_t *u32; @@ -1448,6 +1529,13 @@ static void target_to_host_addr_rtattr(struct rtattr= *rtattr, target_to_host_data_addr_rtattr); } =20 +static void target_to_host_neigh_rtattr(struct rtattr *rtattr, + uint32_t rtattr_len) +{ + target_to_host_for_each_rtattr(rtattr, rtattr_len, + target_to_host_data_neigh_rtattr); +} + static void target_to_host_route_rtattr(struct rtattr *rtattr, uint32_t rtattr_len) { @@ -1460,6 +1548,7 @@ static abi_long target_to_host_data_route(struct nlms= ghdr *nlh) struct ifinfomsg *ifi; struct ifaddrmsg *ifa; struct rtmsg *rtm; + struct ndmsg *ndm; =20 switch (nlh->nlmsg_type) { case RTM_NEWLINK: @@ -1486,6 +1575,17 @@ static abi_long target_to_host_data_route(struct nlm= sghdr *nlh) NLMSG_LENGTH(sizeof(*ifa))); } break; + case RTM_NEWNEIGH: + case RTM_DELNEIGH: + case RTM_GETNEIGH: + if (nlh->nlmsg_len >=3D NLMSG_LENGTH(sizeof(*ndm))) { + ndm =3D NLMSG_DATA(nlh); + ndm->ndm_ifindex =3D tswap32(ndm->ndm_ifindex); + ndm->ndm_state =3D tswap16(ndm->ndm_state); + target_to_host_neigh_rtattr(NDM_RTA(ndm), nlh->nlmsg_len - + NLMSG_LENGTH(sizeof(*ndm))); + } + break; case RTM_NEWROUTE: case RTM_DELROUTE: case RTM_GETROUTE: --=20 2.47.0