From patchwork Mon Feb 10 13:29:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Liang X-Patchwork-Id: 863994 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 360972236FF; Mon, 10 Feb 2025 13:30:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194228; cv=none; b=b4ic+a37SpcRVOrBkVKEOvGEAgwot0PtYhh5Tf9wma4NYgKVIgY3bbIjLFSLy1A1NAoHo2G8VtMFtTbIvwGTynlQUCruy2y26nA0XD0R/n4wJE8fTMz86vSFOR9dfVb2A1U//bE2RxnZhNRKFkjejoOD7HLYZyB9aUJZn5l33NM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194228; c=relaxed/simple; bh=GjfoXCki/WJvjmnx4S+xzsgMh0oaUaBRvXwm00gIc9Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bbWboGAKTm32NyAdgrzwDkZqBupbAWBILZiApFkRbiPdwER/o/whP/37wXVALu1bkvZWzJl8gY8rY8VZMEQcBh6xyF0dfOp0a5wsFRNrQX/4Ga5XN43DcNfCRyE/YBFrAL0dhjWu3myLNYJAKFHiB0Pdk/CJLNFOZw1I96TIog0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=l7zhZWie; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="l7zhZWie" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-21f7f03d7c0so28828615ad.3; Mon, 10 Feb 2025 05:30:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739194226; x=1739799026; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1pf9SNTQbR6dSoBCEAV6dPuN8Gz1/YecnHQoz2AJqpo=; b=l7zhZWiegsCqo2a522+QRmFU8ReWGBta6pQekMDMWL3DQ4cUeiYw0+j0nh0v5eV4Bw 53ERdwNr+ARI1Cikr1M6dXNCBfZNkXFOuE871vFEkbn8DICWoBJrlSG8XdVdr40P/bxr oqaEdXLZzJFBdiVG9XCAPQ/b9VnX2Ss0keS2BHRyPivrYaYZriZlDW8nrZk2M6TAR9bs UoH7MXzFO9RF/0vp7+vINXF/VdFXKyW4XjSEmjBOUZ8NXTHcgusQa+VPCSZ9yfVksDU4 21CRFZ4owtNApzS542JuJf/ViK2CEY+hM79gVThdZpfg0voTg5Mm3kcpyQAOnuoLGhMJ 4AlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739194226; x=1739799026; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1pf9SNTQbR6dSoBCEAV6dPuN8Gz1/YecnHQoz2AJqpo=; b=fUAhSICIBAfuTKQq7gWc6Vpv/bJW8eJm/7vhCxBNjIyOFT4AjDZ2WDUt0hCkvNHhNX ZqbNO63sUWM9YM0UtjW6SnAdrnaKihrtzHd/qHyySkAb2mCODAF/EkI8+gYLk4/ihWqJ rWe6y0naoDwcSYJw6U7RupgR8jT145KGW+ylxA7pFY3+xybNLsyslNGU9w1FCeSC2DqS 86Cl/EK4vG9xFqs/AnbgC75qFasBGFveO453Q+BRxVI/S2Rz7StsrSuMd9IuAe0emlkU wdWTa/DxDs8kX8rJaBAMNbSntOqmhSCe9yYmwuu3HSoiPy8ln+/o5BuTeAySxU7yVUdX KHfg== X-Forwarded-Encrypted: i=1; AJvYcCUP5+V/YZgf6zpIk8dkrAx+nAD9gJepSbCzmNMDgQ8vQKvuQ+Fgux6jbJMMHH/OoK2CC5jX63JcTm8o@vger.kernel.org, AJvYcCUYz4CwpzuFAGa3m5qyd0xg5eg9x2GQKvuXNXTeKx+89U55xbcT8u9qq3j5GpcDq0UUPk8=@vger.kernel.org, AJvYcCVasPHnN4+fiiluianPgNM7BJuEk+Y+jebKu11olccxxvnQuzJKw49URKYr9VUgNM6kBhNdKE/8luK5og==@vger.kernel.org, AJvYcCVziuYSNeYPDJ3NRugiFtrjS087p9qvpx5hy3PeNC5BwFFz2cd3uVPMyvoT1XPL0woThuyZ+9IaCv43pUs2@vger.kernel.org, AJvYcCWEXo+Lp4idfsjgOi7h3iM0rVNed28M7PJZ+6mpv0saAgfiAQjoOblztN88Y6LJ0p9/D3PaB4r+1Bn4SNJDAb4=@vger.kernel.org, AJvYcCX2gOsID7FCs+646zeG2l441GzDdcb9sgjUUtslEdB4qecAD9vh1ESJI4nBSfwC6Z7ypmXlR61qavORqXE/MOuu@vger.kernel.org, AJvYcCX6jrnIqV46jJg1w8KrQd5Whm96gjrITzeLYgiSDTPgGsdReQhDeWxYIEkfkYmJs/RPsf5O2Qu40bPZ8g==@vger.kernel.org, AJvYcCXlfROk2co/7Vlc4VFGPXPvBMmrtwjU5MNCN8eOV8G5Pw4OZ9+MkNqg7C9opjZAcHqh37oL5C5zwAYe@vger.kernel.org X-Gm-Message-State: AOJu0Yy/GXkBkAAl4g+10af0QyUDX7GQlYjGkhPmZNLJD/elA5BnVC85 /P+LqFxCAGQKv8/PXSLH2z8eVBGOPdDfQr0q7aCQiKdZVmZhrQ5OZVBt2Dna X-Gm-Gg: ASbGncu6qGMhy53Ri/FY2ifSrIwYAxzbvN6Q1T5u5qv47QWFJ1Zhb/wpvzyNeRI3RFw sdSKWr7JBa8S2YuhgG6IvtIfXX5YVHHhBGT+o/hlHTEADfyjD8wemDBtruXaCAezsTMGv2lT8G6 sA8dkrybBLNP7KVo3eayxeTS2pfURqg8urGNnr0Sqy9s0CQKSzODqk1h29Lp6v0AzqdVxp/e0db goA/nuxxJbp0zRErLc8vnIN3Uj474ojhuveSeqCETZ79EkwtrXLgXceoO6eNlPW8M4sRtYZby5n IxrPeg== X-Google-Smtp-Source: AGHT+IHnIbIec9duqjv7lrtmGReNVQPeBtoczKplB0CDd7UUW+fM90Yj1MwAFqvvYB9Zquhv6onO5g== X-Received: by 2002:a17:903:240f:b0:216:7cde:523 with SMTP id d9443c01a7336-21f4e739f99mr242405235ad.32.1739194225944; Mon, 10 Feb 2025 05:30:25 -0800 (PST) Received: from ws.. ([103.167.140.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af3bsm78799445ad.57.2025.02.10.05.30.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 05:30:25 -0800 (PST) From: Xiao Liang To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, Kuniyuki Iwashima , Jakub Kicinski Cc: "David S. Miller" , David Ahern , Eric Dumazet , Paolo Abeni , Andrew Lunn , Simon Horman , Shuah Khan , Donald Hunter , Alexander Aring , Stefan Schmidt , Miquel Raynal , Steffen Klassert , Herbert Xu , linux-rdma@vger.kernel.org, linux-can@vger.kernel.org, osmocom-net-gprs@lists.osmocom.org, bpf@vger.kernel.org, linux-ppp@vger.kernel.org, wireguard@lists.zx2c4.com, linux-wireless@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org, bridge@lists.linux.dev, linux-wpan@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v9 01/11] rtnetlink: Lookup device in target netns when creating link Date: Mon, 10 Feb 2025 21:29:52 +0800 Message-ID: <20250210133002.883422-2-shaw.leon@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210133002.883422-1-shaw.leon@gmail.com> References: <20250210133002.883422-1-shaw.leon@gmail.com> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 When creating link, lookup for existing device in target net namespace instead of current one. For example, two links created by: # ip link add dummy1 type dummy # ip link add netns ns1 dummy1 type dummy should have no conflict since they are in different namespaces. Signed-off-by: Xiao Liang Reviewed-by: Kuniyuki Iwashima --- net/core/rtnetlink.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index cb7fad8d1f95..3b3398283a8f 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -3866,20 +3866,26 @@ static int __rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, { struct nlattr ** const tb = tbs->tb; struct net *net = sock_net(skb->sk); + struct net *device_net; struct net_device *dev; struct ifinfomsg *ifm; bool link_specified; + /* When creating, lookup for existing device in target net namespace */ + device_net = (nlh->nlmsg_flags & NLM_F_CREATE) && + (nlh->nlmsg_flags & NLM_F_EXCL) ? + tgt_net : net; + ifm = nlmsg_data(nlh); if (ifm->ifi_index > 0) { link_specified = true; - dev = __dev_get_by_index(net, ifm->ifi_index); + dev = __dev_get_by_index(device_net, ifm->ifi_index); } else if (ifm->ifi_index < 0) { NL_SET_ERR_MSG(extack, "ifindex can't be negative"); return -EINVAL; } else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME]) { link_specified = true; - dev = rtnl_dev_get(net, tb); + dev = rtnl_dev_get(device_net, tb); } else { link_specified = false; dev = NULL; From patchwork Mon Feb 10 13:29:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Liang X-Patchwork-Id: 863993 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1393622F39D; Mon, 10 Feb 2025 13:30:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194248; cv=none; b=XN4mgBOPe78jUP6e9tCSP/VOTV5B5qe0KXYH56nRUeqb6oylBj3F0d1ybWIApTQ8PpV55emmtbRuxO2nHMKK32+1vel1bwzu/KF6uyvVuGxWbfh8cXFjpGlA9m58UoHu8O01deGCVvxLaMNmUZ1mPsAxAo3EaalTZloUCHQL52Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194248; c=relaxed/simple; bh=H9aqFbCIkSAsSC/hjNbBRr8DDSLoMWyn0iRqmlBX9UQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hdPFcT2mfvTZgcXUUQXgOQhuIGXHdq20K05EO4Fwq1v3uH/uHaFioKy2LcmHrw8ENui9LCO15j8pb4Y18/kCD/99615y+lxo/6gizqwrpsPUhwGMtIh9KvMnlEaIsRwnGTTr1v92UBUINCiDx8BFkCuU7lo4vgo6RFFO5qPrukY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dgMUKhhb; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dgMUKhhb" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2f9d3d0f55dso6682650a91.1; Mon, 10 Feb 2025 05:30:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739194245; x=1739799045; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VTQz3HLN7vA7nTVNOajknIYqczbUXIKdhUj1noP9mOY=; b=dgMUKhhbXmhHV2hhdwUoYb7ueopLiBa/KuW/6tO87/41OfiCD0i3xKoWHGdXe56mKy G6I2x1x2sF6mmry3Yz0YySHAJUEY2Xlcc5Ga6h7phKyg/M+keeSS677MaRbOB+JVG7Yr eWmi75uZ4/4SWGk13g/h3OsMcb6B+XN5RGr8C3x15x2NDp10trjXC2SX4pV9VSinsNLi W7iQKWBAvbVj7b5I3vkoCTpOk/oDr1VCXB3m2/7KhNBOOWY5tWiEsZ+E02VtolAgF4IF nvRzA3Gp98CS5R+2in5fMRErnf1noXTE/HhV5m1lIr9Bkut+HI1DBNCRZUsGn+pAWmEI ow3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739194245; x=1739799045; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VTQz3HLN7vA7nTVNOajknIYqczbUXIKdhUj1noP9mOY=; b=dxDBYqK3vYS1w55WVMVHkIHFIMC5S1Yl1CTlwlkP0EIQWVx5hrKvF/B53zyeRwv1od QvRo/Z80PHK486FBBa7hvUfWeXCn52tTF5agloPCNMidMmilB+6Tmxw5Tktz8ZjdDp4J bHvt8UNdbIAsJeBy/cx2eNey8SnArILXbnmDDpqYCHbY8WfB+kqnR0MAhflZTbbh3VKx SDs4mVAIN4sKUPmAGFs5CvA0GRYbmTs9FCQIUHqD3DGolZOP8XCaAiO6l/14LVGzJVbx 16DArZLTC8t+svrDQgI/pwUriOJ5Ulp5Qz4fJsDUQt883W6CanFw16TU1Kptw6nBdNT6 1jVw== X-Forwarded-Encrypted: i=1; AJvYcCUEQVNHfPjbh8cIp0wBJn3fZwV0EdCeg2Pu9857TLRcmpeON6Z8K2IzXblbMnbQGQhLWEXMxz4bk+bKPw==@vger.kernel.org, AJvYcCVS3VUboNlQ/OH4whF5sXIPZp4UoL8MJmEu1ccsjY1+u7eCHqJIzAhoggtE2ArFt14F22Mo7AyADcS4sEpHVmIZ@vger.kernel.org, AJvYcCVlXhzDZwuLXvZ01enqwNVi6a5YBN+vUrCEj6PPgFPbcqMxfM20nWjD72Fp7c69PJDgvAq8Afppwz6x@vger.kernel.org, AJvYcCWD7vdza0/2pB0qV2uFjbxark9lHqiJc4fXjlvNr221+Krj+H05NHhHUgpzulOu0DwSTqxkMZdrvmny@vger.kernel.org, AJvYcCWEJ3yvSBdcX68EQFffL5Hu/CDrM6zBCHb7xDe/wm1GYxUSadnt9jaicIwq9SeeqJaxWhwwcsXV8mqWNbnQYl0=@vger.kernel.org, AJvYcCWLNTqHfzfvFSQg+Hq7c4rTyMOyBJlI3mKIi/yVny9CjGwp+/woM8Zka7C2aIgrJPfs2kjaDzG4w7UaKiW7@vger.kernel.org, AJvYcCWXvIGZoPQ/LbchrSVndipSdFuirB/KHBwDY7MR+6g0NJ9r62F1FD4RfUmilQArev/aRpp8IR/4Nxstzw==@vger.kernel.org, AJvYcCXpATZEAdIr2KrX3YGJWQbUaeZI/4WODsjvI77516kwVyijyV3N+5Nh9FLcW4XFspuHDOo=@vger.kernel.org X-Gm-Message-State: AOJu0YwlL6h99e0qBmdoGBkH1iVLCBmDelStd07cHXc5hMMUycDT/WKD YSWa+U705RJekwPhY3gx7wrc0PHAv5liEuJgSpdxjONPOhlb37fpsNjTM1Cmw88= X-Gm-Gg: ASbGncurkBDXpoC1uz+EwO1SUXqcVO1zHbaRHpzlWzsK0DFA3NSunfphWjTrNP5N9p9 1xI7zFV7Qb4lKgEvm5dZlIW1WadOCsMV47FjMww0xG+TtjmgbXOBe5BLV/SaiiyXiN5MAkro6vX skbl1yIUkIltGLYNdxcd0C9mdroYD01vB05LoDDl+G7p9rjzymB0YDtcGeeYQ3aB8q/CV40PYZ0 agv5gZJg205epExji1L+CjtOTJBebQUb+4DxBjf+ZGU0HeJ1Df4KlZ8kIeQISkGF7qIENBPGLIn g6hwiQ== X-Google-Smtp-Source: AGHT+IGvCUUm6VDtDRTClYXUhfHGyNJIQBJcq6w6qi0QkqB1boS1T32XwvDbYId0u3A6njxoCxSXWg== X-Received: by 2002:a17:90b:1b44:b0:2ee:cdea:ad91 with SMTP id 98e67ed59e1d1-2fa24175d63mr21554271a91.15.1739194244648; Mon, 10 Feb 2025 05:30:44 -0800 (PST) Received: from ws.. ([103.167.140.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af3bsm78799445ad.57.2025.02.10.05.30.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 05:30:44 -0800 (PST) From: Xiao Liang To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, Kuniyuki Iwashima , Jakub Kicinski Cc: "David S. Miller" , David Ahern , Eric Dumazet , Paolo Abeni , Andrew Lunn , Simon Horman , Shuah Khan , Donald Hunter , Alexander Aring , Stefan Schmidt , Miquel Raynal , Steffen Klassert , Herbert Xu , linux-rdma@vger.kernel.org, linux-can@vger.kernel.org, osmocom-net-gprs@lists.osmocom.org, bpf@vger.kernel.org, linux-ppp@vger.kernel.org, wireguard@lists.zx2c4.com, linux-wireless@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org, bridge@lists.linux.dev, linux-wpan@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v9 03/11] net: Use link netns in newlink() of rtnl_link_ops Date: Mon, 10 Feb 2025 21:29:54 +0800 Message-ID: <20250210133002.883422-4-shaw.leon@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210133002.883422-1-shaw.leon@gmail.com> References: <20250210133002.883422-1-shaw.leon@gmail.com> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 These netdevice drivers already uses netns parameter in newlink() callback. Convert them to use rtnl_newlink_link_net() or rtnl_newlink_peer_net() for clarity and deprecate params->net. Signed-off-by: Xiao Liang --- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 4 ++-- drivers/net/amt.c | 6 +++--- drivers/net/bareudp.c | 4 ++-- drivers/net/can/vxcan.c | 2 +- drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | 4 ++-- drivers/net/geneve.c | 4 ++-- drivers/net/gtp.c | 6 +++--- drivers/net/ipvlan/ipvlan_main.c | 4 ++-- drivers/net/macsec.c | 4 ++-- drivers/net/macvlan.c | 4 ++-- drivers/net/netkit.c | 2 +- drivers/net/pfcp.c | 6 +++--- drivers/net/ppp/ppp_generic.c | 4 ++-- drivers/net/veth.c | 2 +- drivers/net/vxlan/vxlan_core.c | 4 ++-- drivers/net/wireguard/device.c | 4 ++-- drivers/net/wireless/virtual/virt_wifi.c | 4 ++-- drivers/net/wwan/wwan_core.c | 2 +- net/8021q/vlan_netlink.c | 4 ++-- net/hsr/hsr_netlink.c | 8 ++++---- 20 files changed, 41 insertions(+), 41 deletions(-) diff --git a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c index 16cb8ced9f35..53db7c8191e3 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c @@ -101,8 +101,8 @@ static int ipoib_new_child_link(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; - struct net *src_net = params->net; struct nlattr **tb = params->tb; struct net_device *pdev; struct ipoib_dev_priv *ppriv; @@ -112,7 +112,7 @@ static int ipoib_new_child_link(struct net_device *dev, if (!tb[IFLA_LINK]) return -EINVAL; - pdev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK])); + pdev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK])); if (!pdev || pdev->type != ARPHRD_INFINIBAND) return -ENODEV; diff --git a/drivers/net/amt.c b/drivers/net/amt.c index 96b7ec9a2c13..53899b70fae1 100644 --- a/drivers/net/amt.c +++ b/drivers/net/amt.c @@ -3165,13 +3165,13 @@ static int amt_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct amt_dev *amt = netdev_priv(dev); struct nlattr **data = params->data; struct nlattr **tb = params->tb; - struct net *net = params->net; int err = -EINVAL; - amt->net = net; + amt->net = link_net; amt->mode = nla_get_u32(data[IFLA_AMT_MODE]); if (data[IFLA_AMT_MAX_TUNNELS] && @@ -3186,7 +3186,7 @@ static int amt_newlink(struct net_device *dev, amt->hash_buckets = AMT_HSIZE; amt->nr_tunnels = 0; get_random_bytes(&amt->hash_seed, sizeof(amt->hash_seed)); - amt->stream_dev = dev_get_by_index(net, + amt->stream_dev = dev_get_by_index(link_net, nla_get_u32(data[IFLA_AMT_LINK])); if (!amt->stream_dev) { NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_AMT_LINK], diff --git a/drivers/net/bareudp.c b/drivers/net/bareudp.c index fc21dcfb4848..d1473c5f8eef 100644 --- a/drivers/net/bareudp.c +++ b/drivers/net/bareudp.c @@ -702,9 +702,9 @@ static int bareudp_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; struct nlattr **tb = params->tb; - struct net *net = params->net; struct bareudp_conf conf; int err; @@ -712,7 +712,7 @@ static int bareudp_newlink(struct net_device *dev, if (err) return err; - err = bareudp_configure(net, dev, &conf, extack); + err = bareudp_configure(link_net, dev, &conf, extack); if (err) return err; diff --git a/drivers/net/can/vxcan.c b/drivers/net/can/vxcan.c index 6f8ebb1cfd7b..99a78a757167 100644 --- a/drivers/net/can/vxcan.c +++ b/drivers/net/can/vxcan.c @@ -176,8 +176,8 @@ static int vxcan_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *peer_net = rtnl_newlink_peer_net(params); struct nlattr **data = params->data; - struct net *peer_net = params->net; struct nlattr **tb = params->tb; struct vxcan_priv *priv; struct net_device *peer; diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c index 8151e91395e2..ab7e5b6649b2 100644 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c @@ -122,8 +122,8 @@ static int rmnet_newlink(struct net_device *dev, struct netlink_ext_ack *extack) { u32 data_format = RMNET_FLAGS_INGRESS_DEAGGREGATION; + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; - struct net *src_net = params->net; struct nlattr **tb = params->tb; struct net_device *real_dev; int mode = RMNET_EPMODE_VND; @@ -137,7 +137,7 @@ static int rmnet_newlink(struct net_device *dev, return -EINVAL; } - real_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK])); + real_dev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK])); if (!real_dev) { NL_SET_ERR_MSG_MOD(extack, "link does not exist"); return -ENODEV; diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index d373a851930c..c7700deefb00 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -1618,9 +1618,9 @@ static int geneve_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; struct nlattr **tb = params->tb; - struct net *net = params->net; struct geneve_config cfg = { .df = GENEVE_DF_UNSET, .use_udp6_rx_checksums = false, @@ -1634,7 +1634,7 @@ static int geneve_newlink(struct net_device *dev, if (err) return err; - err = geneve_configure(net, dev, extack, &cfg); + err = geneve_configure(link_net, dev, extack, &cfg); if (err) return err; diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c index d6d4326cb908..2cf43e7d0edc 100644 --- a/drivers/net/gtp.c +++ b/drivers/net/gtp.c @@ -1466,8 +1466,8 @@ static int gtp_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; - struct net *src_net = params->net; unsigned int role = GTP_ROLE_GGSN; struct gtp_dev *gtp; struct gtp_net *gn; @@ -1498,7 +1498,7 @@ static int gtp_newlink(struct net_device *dev, gtp->restart_count = nla_get_u8_default(data[IFLA_GTP_RESTART_COUNT], 0); - gtp->net = src_net; + gtp->net = link_net; err = gtp_hashtable_new(gtp, hashsize); if (err < 0) @@ -1528,7 +1528,7 @@ static int gtp_newlink(struct net_device *dev, goto out_encap; } - gn = net_generic(src_net, gtp_net_id); + gn = net_generic(link_net, gtp_net_id); list_add(>p->list, &gn->gtp_dev_list); dev->priv_destructor = gtp_destructor; diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index 19ce19ca7e32..b56144ca2fde 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c @@ -535,9 +535,9 @@ static int ipvlan_nl_fillinfo(struct sk_buff *skb, int ipvlan_link_new(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct ipvl_dev *ipvlan = netdev_priv(dev); struct nlattr **data = params->data; - struct net *src_net = params->net; struct nlattr **tb = params->tb; struct ipvl_port *port; struct net_device *phy_dev; @@ -547,7 +547,7 @@ int ipvlan_link_new(struct net_device *dev, struct rtnl_newlink_params *params, if (!tb[IFLA_LINK]) return -EINVAL; - phy_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK])); + phy_dev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK])); if (!phy_dev) return -ENODEV; diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 1869b0513f57..4de5d63fd577 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -4145,10 +4145,10 @@ static int macsec_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct macsec_dev *macsec = macsec_priv(dev); struct nlattr **data = params->data; struct nlattr **tb = params->tb; - struct net *net = params->net; rx_handler_func_t *rx_handler; u8 icv_len = MACSEC_DEFAULT_ICV_LEN; struct net_device *real_dev; @@ -4157,7 +4157,7 @@ static int macsec_newlink(struct net_device *dev, if (!tb[IFLA_LINK]) return -EINVAL; - real_dev = __dev_get_by_index(net, nla_get_u32(tb[IFLA_LINK])); + real_dev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK])); if (!real_dev) return -ENODEV; if (real_dev->type != ARPHRD_ETHER) diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index f903b414eaeb..4e9d54be887c 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -1444,9 +1444,9 @@ int macvlan_common_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct macvlan_dev *vlan = netdev_priv(dev); struct nlattr **data = params->data; - struct net *src_net = params->net; struct nlattr **tb = params->tb; struct net_device *lowerdev; struct macvlan_port *port; @@ -1457,7 +1457,7 @@ int macvlan_common_newlink(struct net_device *dev, if (!tb[IFLA_LINK]) return -EINVAL; - lowerdev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK])); + lowerdev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK])); if (lowerdev == NULL) return -ENODEV; diff --git a/drivers/net/netkit.c b/drivers/net/netkit.c index 640a2dbbbd28..751347392570 100644 --- a/drivers/net/netkit.c +++ b/drivers/net/netkit.c @@ -331,13 +331,13 @@ static int netkit_new_link(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *peer_net = rtnl_newlink_peer_net(params); enum netkit_scrub scrub_prim = NETKIT_SCRUB_DEFAULT; enum netkit_scrub scrub_peer = NETKIT_SCRUB_DEFAULT; struct nlattr *peer_tb[IFLA_MAX + 1], **tbp, *attr; enum netkit_action policy_prim = NETKIT_PASS; enum netkit_action policy_peer = NETKIT_PASS; struct nlattr **data = params->data; - struct net *peer_net = params->net; enum netkit_mode mode = NETKIT_L3; unsigned char ifname_assign_type; struct nlattr **tb = params->tb; diff --git a/drivers/net/pfcp.c b/drivers/net/pfcp.c index 7b0575940e1d..f873a92d2445 100644 --- a/drivers/net/pfcp.c +++ b/drivers/net/pfcp.c @@ -188,12 +188,12 @@ static int pfcp_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct pfcp_dev *pfcp = netdev_priv(dev); - struct net *net = params->net; struct pfcp_net *pn; int err; - pfcp->net = net; + pfcp->net = link_net; err = pfcp_add_sock(pfcp); if (err) { @@ -207,7 +207,7 @@ static int pfcp_newlink(struct net_device *dev, goto exit_del_pfcp_sock; } - pn = net_generic(net, pfcp_net_id); + pn = net_generic(link_net, pfcp_net_id); list_add(&pfcp->list, &pn->pfcp_dev_list); netdev_dbg(dev, "registered new PFCP interface\n"); diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c index b3340f8a6149..6220866258fc 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -1307,8 +1307,8 @@ static int ppp_nl_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; - struct net *src_net = params->net; struct nlattr **tb = params->tb; struct ppp_config conf = { .unit = -1, @@ -1346,7 +1346,7 @@ static int ppp_nl_newlink(struct net_device *dev, if (!tb[IFLA_IFNAME] || !nla_len(tb[IFLA_IFNAME]) || !*(char *)nla_data(tb[IFLA_IFNAME])) conf.ifname_is_set = false; - err = ppp_dev_configure(src_net, dev, &conf); + err = ppp_dev_configure(link_net, dev, &conf); out_unlock: mutex_unlock(&ppp_mutex); diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 7dfda89f072f..ba3ae2d8092f 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -1769,8 +1769,8 @@ static int veth_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *peer_net = rtnl_newlink_peer_net(params); struct nlattr **data = params->data; - struct net *peer_net = params->net; struct nlattr **tb = params->tb; int err; struct net_device *peer; diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 69ee76172cd2..d342ba899a69 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -4401,8 +4401,8 @@ static int vxlan_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; - struct net *src_net = params->net; struct nlattr **tb = params->tb; struct vxlan_config conf; int err; @@ -4411,7 +4411,7 @@ static int vxlan_newlink(struct net_device *dev, if (err) return err; - return __vxlan_dev_create(src_net, dev, &conf, extack); + return __vxlan_dev_create(link_net, dev, &conf, extack); } static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], diff --git a/drivers/net/wireguard/device.c b/drivers/net/wireguard/device.c index 404cf05bd72b..c496d35b266d 100644 --- a/drivers/net/wireguard/device.c +++ b/drivers/net/wireguard/device.c @@ -311,11 +311,11 @@ static int wg_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct wg_device *wg = netdev_priv(dev); - struct net *src_net = params->net; int ret = -ENOMEM; - rcu_assign_pointer(wg->creating_net, src_net); + rcu_assign_pointer(wg->creating_net, link_net); init_rwsem(&wg->static_identity.lock); mutex_init(&wg->socket_update_lock); mutex_init(&wg->device_update_lock); diff --git a/drivers/net/wireless/virtual/virt_wifi.c b/drivers/net/wireless/virtual/virt_wifi.c index 26905b2b3ba3..f9d11a023313 100644 --- a/drivers/net/wireless/virtual/virt_wifi.c +++ b/drivers/net/wireless/virtual/virt_wifi.c @@ -524,7 +524,7 @@ static int virt_wifi_newlink(struct net_device *dev, struct netlink_ext_ack *extack) { struct virt_wifi_netdev_priv *priv = netdev_priv(dev); - struct net *src_net = params->net; + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **tb = params->tb; int err; @@ -534,7 +534,7 @@ static int virt_wifi_newlink(struct net_device *dev, netif_carrier_off(dev); priv->upperdev = dev; - priv->lowerdev = __dev_get_by_index(src_net, + priv->lowerdev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK])); if (!priv->lowerdev) diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c index a05c49b4e7f8..63a47d420bc5 100644 --- a/drivers/net/wwan/wwan_core.c +++ b/drivers/net/wwan/wwan_core.c @@ -1065,7 +1065,7 @@ static void wwan_create_default_link(struct wwan_device *wwandev, struct nlattr *tb[IFLA_MAX + 1], *linkinfo[IFLA_INFO_MAX + 1]; struct nlattr *data[IFLA_WWAN_MAX + 1]; struct rtnl_newlink_params params = { - .net = &init_net, + .src_net = &init_net, .tb = tb, .data = data, }; diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c index 91df0f96e32a..a000b1ef0520 100644 --- a/net/8021q/vlan_netlink.c +++ b/net/8021q/vlan_netlink.c @@ -139,9 +139,9 @@ static int vlan_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct vlan_dev_priv *vlan = vlan_dev_priv(dev); struct nlattr **data = params->data; - struct net *src_net = params->net; struct nlattr **tb = params->tb; struct net_device *real_dev; unsigned int max_mtu; @@ -158,7 +158,7 @@ static int vlan_newlink(struct net_device *dev, return -EINVAL; } - real_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK])); + real_dev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK])); if (!real_dev) { NL_SET_ERR_MSG_MOD(extack, "link does not exist"); return -ENODEV; diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c index 39add538ba99..b120470246cc 100644 --- a/net/hsr/hsr_netlink.c +++ b/net/hsr/hsr_netlink.c @@ -33,8 +33,8 @@ static int hsr_newlink(struct net_device *dev, struct rtnl_newlink_params *params, struct netlink_ext_ack *extack) { + struct net *link_net = rtnl_newlink_link_net(params); struct nlattr **data = params->data; - struct net *src_net = params->net; enum hsr_version proto_version; unsigned char multicast_spec; u8 proto = HSR_PROTOCOL_HSR; @@ -48,7 +48,7 @@ static int hsr_newlink(struct net_device *dev, NL_SET_ERR_MSG_MOD(extack, "Slave1 device not specified"); return -EINVAL; } - link[0] = __dev_get_by_index(src_net, + link[0] = __dev_get_by_index(link_net, nla_get_u32(data[IFLA_HSR_SLAVE1])); if (!link[0]) { NL_SET_ERR_MSG_MOD(extack, "Slave1 does not exist"); @@ -58,7 +58,7 @@ static int hsr_newlink(struct net_device *dev, NL_SET_ERR_MSG_MOD(extack, "Slave2 device not specified"); return -EINVAL; } - link[1] = __dev_get_by_index(src_net, + link[1] = __dev_get_by_index(link_net, nla_get_u32(data[IFLA_HSR_SLAVE2])); if (!link[1]) { NL_SET_ERR_MSG_MOD(extack, "Slave2 does not exist"); @@ -71,7 +71,7 @@ static int hsr_newlink(struct net_device *dev, } if (data[IFLA_HSR_INTERLINK]) - interlink = __dev_get_by_index(src_net, + interlink = __dev_get_by_index(link_net, nla_get_u32(data[IFLA_HSR_INTERLINK])); if (interlink && interlink == link[0]) { From patchwork Mon Feb 10 13:29:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Liang X-Patchwork-Id: 863992 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62D3722FDE7; Mon, 10 Feb 2025 13:31:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194266; cv=none; b=pZuozHLjUrr+sR+5aDdCZNINeY0m+1fttpGBLKUYsGwquRmeh7cWzBv5i852y631nZov3bWg3hXl1CGYauwrHzEwwEYV6NoWa7jIxh508HNKyrFAGQdUg4q58lRGNjr45kN41kOJ/SVW4eXyxHF94qMNkuSVNG0rDTQu2dyEcXY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194266; c=relaxed/simple; bh=afU0eP8leIGpj7KOdqVDO3ES9Mr3NHsvuQ09X1iwlHY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q0qPOGTArTz4hlbXpPjivmM4pOhu258OYef4JXbHA6/v6WDqv23yzgrnlO/kKb1DjYaxa1ybiISOlsYipubvIN6LXVIf6rCltDlQLbLFy2X1tTcuNmDEcli1+/rb+5WrqNzlH/7K6vI8Cmum8YjDcaDf/AVdf5hJSbyoYTtKZZA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WfO92onU; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WfO92onU" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-21f40deb941so88631955ad.2; Mon, 10 Feb 2025 05:31:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739194263; x=1739799063; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pJKz1g6voDImT0UUTo/s+cF5fKbKW++euQC6BW/L/6A=; b=WfO92onUBROkws89XF0xJoYiXN4FY+kMJoYd37TDE6bRufKKr0r89DwlD1uSkinzmf fRNv9H5peOkZZOMZiWRihuQvO+0HCljpVxL64nuYALi9PbcWytZNjtRvLSzXuI0cYwbu kJprT0/Skum3pElV7RWeBnrhzMTKMUffM9m//R5bBbcQeqC0REmrSWfyRhPhXiJbDsA8 iVfkvYG+UduGy3J6thkFLLfmrLuU9b9ZH2Vpgh3AwI2ofM+F0lRjS6YZ05g/MEO4Ow2/ 7PD5blYaWR1yTePxrVNjAceq2n0YhCBJ2iwtnPha8/0H3aT3pj++hUxOY/nNoFRpsYEg 6bfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739194263; x=1739799063; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pJKz1g6voDImT0UUTo/s+cF5fKbKW++euQC6BW/L/6A=; b=gdiDZuCCTuQaYxmgaLJ9H2GbzKakMsoJLfO4tu0lYBuT+u6Tj2jmyNTD0djubbcxH4 uZIvajYFSxi8vKmlZXRCZ+A7Y35CE3K4NMZoJIAsCFEcQ6kSHiTkr6pH4+ulF6Dkr1TZ SfYW87Iw1rpT97+KQPyQEzLomtW6Fhi0W/lotucqJnQl00H0snydbWwYRYWmDbCEKPDx aMDQMuaTdbyNF0z6xGbJds5QAl3AONHkTkaZqyAxUUQpIgefCeesjCNCknabnTaUGVHO TbVQdr4I+T5IUjNW4oZ4zjpMQljLnX7g3cjGeUbrF/W8zqq6kB2iwV0OwM3tXq8I+82v Vicw== X-Forwarded-Encrypted: i=1; AJvYcCURR6ih8oatBAFoQlcDgFDYA0DYh1UNCrFwTpdo9b8st5PeRN6sXf8aGB9mO6it1k39AxvKhv0qF9Ryhe8Shp0=@vger.kernel.org, AJvYcCUbUBjtYVSjhl1OsVSrFVrtUo2PhYp7SZMyzVQ9NDoogVA1JszcJGmOo41sqz7/+t9KyFo=@vger.kernel.org, AJvYcCUdzs6uijMVHxCArqeZ4xhE+6e7qxoeS1k2xBPk1DHclqsl+kINweY3ocgocyq4ssuZV1dyY8lvNGieectI8a/s@vger.kernel.org, AJvYcCUy6EXV5QzD09tUzqNqrN4+R9PWvQ4qQ/uzJ+1/SWN+CDQLWFUq9OR4hBzGRu5G5u6kXwykjgiSzgyE@vger.kernel.org, AJvYcCVDruWV6E1CCpu9753+0DBWzU2gfPEdqYStAtG/nk9odDxgsoWRZNOIynbZQYtU8J6RCVbeBRPZ/SbF@vger.kernel.org, AJvYcCVkyLRvgU2mnxHKqhZ5lLAYi/5XIW08/i6y4VCuB2Lmb+8W9sFcX0Lt6L9G4X2qEdBpvjOK6Mm7DBH96w==@vger.kernel.org, AJvYcCWn22K3A+RE2CCSQMN5Eugba+cbQ3mISU1sL7jH5enCPmkQh55coa9NS3AfM7n6HFzTi4lTGrtRzQmUch0T@vger.kernel.org, AJvYcCWoNRQ77jt7YJ0bu4v7zvcLWJzVTuUBk43JDCgHnjPBIPHMnPRL/V7EypMlDNZpbhHI9bZbYTLyafjGjA==@vger.kernel.org X-Gm-Message-State: AOJu0YxsEJFvbjDO0ULxAl0cStJ8qDP5giJ9CJ3Z8Q6Jwd94ovhoBdbq TG3NDXCmayBYMZc3Uv+GgccLAK2HvVr+NpjvrTLjdoWC8QOT9aR+FSCuZEcMqFg= X-Gm-Gg: ASbGncvRGyzY3HR51LQ+JcHLRwsKdHK9vyvb74MB6EI1MDeH3mwxyL4Z7WOFNVMMiml h5qM+rXuRHBscDiko5SiY4gMd0tonTh4xOhKzQE1H4hFxThtkK731/g3Pn1KJFXUe4rfEBeSNs0 IIWC3tW6pDRUjiJ6R4fdO9+IZUA19zJbOSljI9Enf6dWpBCoTEFh3qxt1qGSZlUefaI7sxDwBgJ l6ngEbA4HCSN/h93WGFnBJtepPTGXPJPyOSiS4CIHrk9Z6rXU57EjaOXJXriRMjd5rCwDtnRbrl HiZaNg== X-Google-Smtp-Source: AGHT+IGNFjsW8yGSZG6C2tbCv5/JZ09OmB3LKkjVhY7agbUhlCe28tcl+Qcya8rlcfYhnDrE2/S9OQ== X-Received: by 2002:a17:902:e946:b0:216:7cde:51a with SMTP id d9443c01a7336-21f4e72631dmr249984615ad.28.1739194263028; Mon, 10 Feb 2025 05:31:03 -0800 (PST) Received: from ws.. ([103.167.140.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af3bsm78799445ad.57.2025.02.10.05.30.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 05:31:02 -0800 (PST) From: Xiao Liang To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, Kuniyuki Iwashima , Jakub Kicinski Cc: "David S. Miller" , David Ahern , Eric Dumazet , Paolo Abeni , Andrew Lunn , Simon Horman , Shuah Khan , Donald Hunter , Alexander Aring , Stefan Schmidt , Miquel Raynal , Steffen Klassert , Herbert Xu , linux-rdma@vger.kernel.org, linux-can@vger.kernel.org, osmocom-net-gprs@lists.osmocom.org, bpf@vger.kernel.org, linux-ppp@vger.kernel.org, wireguard@lists.zx2c4.com, linux-wireless@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org, bridge@lists.linux.dev, linux-wpan@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v9 05/11] net: ip_tunnel: Use link netns in newlink() of rtnl_link_ops Date: Mon, 10 Feb 2025 21:29:56 +0800 Message-ID: <20250210133002.883422-6-shaw.leon@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210133002.883422-1-shaw.leon@gmail.com> References: <20250210133002.883422-1-shaw.leon@gmail.com> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 When link_net is set, use it as link netns instead of dev_net(). This prepares for rtnetlink core to create device in target netns directly, in which case the two namespaces may be different. Convert common ip_tunnel_newlink() to accept an extra link netns argument. Don't overwrite ip_tunnel.net in ip_tunnel_init(). Signed-off-by: Xiao Liang --- include/net/ip_tunnels.h | 5 +++-- net/ipv4/ip_gre.c | 8 +++++--- net/ipv4/ip_tunnel.c | 10 ++++++---- net/ipv4/ip_vti.c | 3 ++- net/ipv4/ipip.c | 3 ++- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index 1aa31bdb2b31..ae1f2dda4533 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h @@ -406,8 +406,9 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb, bool log_ecn_error); int ip_tunnel_changelink(struct net_device *dev, struct nlattr *tb[], struct ip_tunnel_parm_kern *p, __u32 fwmark); -int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[], - struct ip_tunnel_parm_kern *p, __u32 fwmark); +int ip_tunnel_newlink(struct net *net, struct net_device *dev, + struct nlattr *tb[], struct ip_tunnel_parm_kern *p, + __u32 fwmark); void ip_tunnel_setup(struct net_device *dev, unsigned int net_id); bool ip_tunnel_netlink_encap_parms(struct nlattr *data[], diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 1fe9b13d351c..26d15f907551 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -1413,7 +1413,8 @@ static int ipgre_newlink(struct net_device *dev, err = ipgre_netlink_parms(dev, data, tb, &p, &fwmark); if (err < 0) return err; - return ip_tunnel_newlink(dev, tb, &p, fwmark); + return ip_tunnel_newlink(params->link_net ? : dev_net(dev), dev, tb, &p, + fwmark); } static int erspan_newlink(struct net_device *dev, @@ -1433,7 +1434,8 @@ static int erspan_newlink(struct net_device *dev, err = erspan_netlink_parms(dev, data, tb, &p, &fwmark); if (err) return err; - return ip_tunnel_newlink(dev, tb, &p, fwmark); + return ip_tunnel_newlink(params->link_net ? : dev_net(dev), dev, tb, &p, + fwmark); } static int ipgre_changelink(struct net_device *dev, struct nlattr *tb[], @@ -1701,7 +1703,7 @@ static struct rtnl_link_ops erspan_link_ops __read_mostly = { struct net_device *gretap_fb_dev_create(struct net *net, const char *name, u8 name_assign_type) { - struct rtnl_newlink_params params = { .net = net }; + struct rtnl_newlink_params params = { .src_net = net }; struct nlattr *tb[IFLA_MAX + 1]; struct net_device *dev; LIST_HEAD(list_kill); diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c index 09b73acf037a..618a50d5c0c2 100644 --- a/net/ipv4/ip_tunnel.c +++ b/net/ipv4/ip_tunnel.c @@ -1213,11 +1213,11 @@ void ip_tunnel_delete_nets(struct list_head *net_list, unsigned int id, } EXPORT_SYMBOL_GPL(ip_tunnel_delete_nets); -int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[], - struct ip_tunnel_parm_kern *p, __u32 fwmark) +int ip_tunnel_newlink(struct net *net, struct net_device *dev, + struct nlattr *tb[], struct ip_tunnel_parm_kern *p, + __u32 fwmark) { struct ip_tunnel *nt; - struct net *net = dev_net(dev); struct ip_tunnel_net *itn; int mtu; int err; @@ -1326,7 +1326,9 @@ int ip_tunnel_init(struct net_device *dev) } tunnel->dev = dev; - tunnel->net = dev_net(dev); + if (!tunnel->net) + tunnel->net = dev_net(dev); + strscpy(tunnel->parms.name, dev->name); iph->version = 4; iph->ihl = 5; diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index b901bee03e6d..159b4473290e 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c @@ -585,7 +585,8 @@ static int vti_newlink(struct net_device *dev, __u32 fwmark = 0; vti_netlink_parms(data, &parms, &fwmark); - return ip_tunnel_newlink(dev, tb, &parms, fwmark); + return ip_tunnel_newlink(params->link_net ? : dev_net(dev), dev, tb, + &parms, fwmark); } static int vti_changelink(struct net_device *dev, struct nlattr *tb[], diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index a8b844bcfc64..bab0bf90c908 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c @@ -455,7 +455,8 @@ static int ipip_newlink(struct net_device *dev, } ipip_netlink_parms(data, &p, &t->collect_md, &fwmark); - return ip_tunnel_newlink(dev, tb, &p, fwmark); + return ip_tunnel_newlink(params->link_net ? : dev_net(dev), dev, tb, &p, + fwmark); } static int ipip_changelink(struct net_device *dev, struct nlattr *tb[], From patchwork Mon Feb 10 13:29:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Liang X-Patchwork-Id: 863991 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BFA222FE0D; Mon, 10 Feb 2025 13:31:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194283; cv=none; b=kv2v+FshHdQrTUcXBLrdL9OguZxZKz3TbMz+hIifT8dUskKgnvd+PirX8fem/1eMk3pAn070BrFhGapNGaVVgZe3tQlvKQlEoj7qQOhsy7rr71q0FbAhw/AY0d7fprjEzm/Dj4I9+cYcMPBGitEGIeLH6de0C2iDs230Am7EIyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194283; c=relaxed/simple; bh=aKbzZxou1uG+4UzTz9mjeL2/4viaECGZ39kotodArQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nBoYtAURuRkpa1R1/5QRLfchn5HUuNUztlGSrMIrBsLLN+Fu0bgwmp4Ry/Kj5C2et4oWtR9F1IXy5WM+ITSHmWNbp+NToBoVgAvedIxjxyOK0cSv4+pCKAV9ngy4e47A7cog3r6EkcYYxyGO3py1AiOsbLvOlRecdnkPIp8rBks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LyI5OqrV; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LyI5OqrV" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-21f62cc4088so40125755ad.3; Mon, 10 Feb 2025 05:31:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739194281; x=1739799081; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PyZ7Oa5HQm/CyDGlUAOCpKikT+Z0UZAcxIZ482ECX9g=; b=LyI5OqrV1frdJQ8PpqSpyO7i0VEUiS0csLTv6s0Q91C4asspdrAfgq7kOCU5/dRjCZ pQz/ob1OSgN7mYYh7tlBKRV0ytz2wyxGhpkBUNxtIAX8dNHchoq+CplFKuJgYYE817KK gA6dxaDuhXMV3VOz2qUBDGCkyH0gVzA91XMaqz0OvAKqOL90NTey1iheeSm4VzudDZFO usPu57iOtp1838bwDGDa+WLOKqMGaDPqXyQ4lUhJLZa5fqDyrPU4I8ykjLE4N5dUIOxZ xAyBrSdoHthgBiL/ZPetfT5Vkv4KDfVVOftpepS2hgi3QC7tQjam51EKTAAIaFH96eJm gWWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739194281; x=1739799081; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PyZ7Oa5HQm/CyDGlUAOCpKikT+Z0UZAcxIZ482ECX9g=; b=Lj/jWFUSt1Vq8fN3KmjMpeG89PtmwFPVqm2xH1RSwUzPpkjlQabsVDZVKy69dG/SnR rijgIce4YuhazakmeY+pA1nCiZzqnHODgqyj7cjdZh/I5l54YSKqk6F7Y26RF04hlXGJ ByJALm2HLufL+vAOWQtRK7wpzuTT87aUVzq5qqf/FspCJ5GOYR/ato004jf1pPh/PgyD 5/c4aS4Yf8V/PQb08n7VJ66ELBKiY5DiPzhUnZLXzKWe0jZ1QPo9kppjCe7yw+vQjeMm HzCdhS5Q9957oASt6A7sXZ3dvgXjVGXVa+dWvy6Z1AzdBPeojU19UwYY1VNoAYbErtvw Ab+w== X-Forwarded-Encrypted: i=1; AJvYcCUA6W/ewlRFSFwxfdpjrDSImaoX+K1Z56UZui+qv4ozgcjB61ZDednhtbauLE4sIScp2JjRFbK2BB82@vger.kernel.org, AJvYcCUW/Wiak4kHs9oIcY84pCAVsLXOqB1bfdNqMwVkCUwAY0fIw4MROlkqaNLtDsvnOPjQ9AgqkPU7ed/7SA==@vger.kernel.org, AJvYcCVHkq8grzuZl5fog8zCvhr0Szk7NodnN1xaIWgGUB/CDu/f5vi15qnRBjrJjOq+Q2eEQ9YM7kV07KNqeHVYSMc=@vger.kernel.org, AJvYcCVW9FdFINrqG+zJ2+CIpTC59J4aZ4z6t8CYVn66X8xzhcQggw8NYRRiNgXqwbi08tB5a2y3oSch7FmdJA==@vger.kernel.org, AJvYcCVr3ggYNuZxZbU7moeqRN+sKD4I4N1j8tbQd/gVHRX3yFCHwi5Do1xPL9iCU+w+q2vqptyMStGgU1Gg@vger.kernel.org, AJvYcCWkA3fepQbCBjNyigJdoNUOx3s6jeM6CHiKBm25NJ0CCrd2oN528GttvwJMUUKI9l3Cb38=@vger.kernel.org, AJvYcCX6ESFQ3yDZ7S++jtxud2qGrnT7rOvZW8tirxQxlz784G+Dak+Rj1EvemPy7CWgmGmtyj/1rld0jMsO1hNs@vger.kernel.org, AJvYcCXNQZoQ1+0g+L5rbSwdxXz7Bq/kDL4M8jXxyoxOtBG/n3iJqLYO/D0IDpxSoOY6vi6gtzK0Sgy4crHO1qDHD0Dg@vger.kernel.org X-Gm-Message-State: AOJu0YwFN4DM0N4XJBfW2XJAgZtw/TfcVRuWuMnQqHL8uze2MtRDj7x1 W+gY1lcQST+k6WZelv5/Xy8so0B+dGditO1GyV5vYMudWl2HAms3/NS1N1yesbA= X-Gm-Gg: ASbGnctjLyKHXCcxfBFeWlhvMmKEihKVjSa/SoqC8AqHIXlWBGcxo3eJRGnTJKTpeU+ U1428mFpYi8OOJP2MSFJiCJg0OjagXkfkriy9+Sd/s+oDF1WD9wlDICZT1fpLbg6BxTPdhU5ubd cCpka/EEZirAtjW21UX5N4vVfF8oSrz8YX2iwGTaAbaIkpjU71bCvxwK1iHDd4qFefrWlF0nBTB 1zCPT3tUQSpRGinvHoOa+nxY38bhO/rTU6mcaOahRjPfwVv6k8EatBnuP4lSt2nKPZm8nz3NehH /RFPRw== X-Google-Smtp-Source: AGHT+IHeusvrHP8M+FV2U5mrdVgA+KXf+BNwroimzhQyBeA1391Nd6kFx/ISaagEKEOW3Rex1VbPJw== X-Received: by 2002:a17:902:c94a:b0:21f:8099:72e4 with SMTP id d9443c01a7336-21f809974bdmr103657145ad.28.1739194280801; Mon, 10 Feb 2025 05:31:20 -0800 (PST) Received: from ws.. ([103.167.140.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af3bsm78799445ad.57.2025.02.10.05.31.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 05:31:20 -0800 (PST) From: Xiao Liang To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, Kuniyuki Iwashima , Jakub Kicinski Cc: "David S. Miller" , David Ahern , Eric Dumazet , Paolo Abeni , Andrew Lunn , Simon Horman , Shuah Khan , Donald Hunter , Alexander Aring , Stefan Schmidt , Miquel Raynal , Steffen Klassert , Herbert Xu , linux-rdma@vger.kernel.org, linux-can@vger.kernel.org, osmocom-net-gprs@lists.osmocom.org, bpf@vger.kernel.org, linux-ppp@vger.kernel.org, wireguard@lists.zx2c4.com, linux-wireless@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org, bridge@lists.linux.dev, linux-wpan@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v9 07/11] net: xfrm: Use link netns in newlink() of rtnl_link_ops Date: Mon, 10 Feb 2025 21:29:58 +0800 Message-ID: <20250210133002.883422-8-shaw.leon@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210133002.883422-1-shaw.leon@gmail.com> References: <20250210133002.883422-1-shaw.leon@gmail.com> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 When link_net is set, use it as link netns instead of dev_net(). This prepares for rtnetlink core to create device in target netns directly, in which case the two namespaces may be different. Signed-off-by: Xiao Liang --- net/xfrm/xfrm_interface_core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net/xfrm/xfrm_interface_core.c b/net/xfrm/xfrm_interface_core.c index 5659a6cadd51..622445f041d3 100644 --- a/net/xfrm/xfrm_interface_core.c +++ b/net/xfrm/xfrm_interface_core.c @@ -242,10 +242,9 @@ static void xfrmi_dev_free(struct net_device *dev) gro_cells_destroy(&xi->gro_cells); } -static int xfrmi_create(struct net_device *dev) +static int xfrmi_create(struct net *net, struct net_device *dev) { struct xfrm_if *xi = netdev_priv(dev); - struct net *net = dev_net(dev); struct xfrmi_net *xfrmn = net_generic(net, xfrmi_net_id); int err; @@ -819,11 +818,12 @@ static int xfrmi_newlink(struct net_device *dev, struct netlink_ext_ack *extack) { struct nlattr **data = params->data; - struct net *net = dev_net(dev); struct xfrm_if_parms p = {}; struct xfrm_if *xi; + struct net *net; int err; + net = params->link_net ? : dev_net(dev); xfrmi_netlink_parms(data, &p); if (p.collect_md) { struct xfrmi_net *xfrmn = net_generic(net, xfrmi_net_id); @@ -852,7 +852,7 @@ static int xfrmi_newlink(struct net_device *dev, xi->net = net; xi->dev = dev; - err = xfrmi_create(dev); + err = xfrmi_create(net, dev); return err; } From patchwork Mon Feb 10 13:30:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Liang X-Patchwork-Id: 863990 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4483822F38F; Mon, 10 Feb 2025 13:31:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194301; cv=none; b=RrukiUkRIOxCOxig3slT/3FnBrf5WNOj9nVDo/NF+fSmTFYtxiHcVy4ArjWhXkpxQHgnd+n6cYZAJScU0jDgsJPY004xv5IX4nljHm/n54ptFqzAHq2oF47+7uO77GPa6XR4BvL4VAhCjEQAF1OIJPG/KTe4YwyqNDPVpeeqWZ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194301; c=relaxed/simple; bh=069lUPDUvhmknVR9QmYXw35UhK+BSSNOI16puwTCeHE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eV0sFfCyc6K5p7fGKXKhTCOxTyEdL91nh+CszlrqbV7o6OlGhrYp7KnS1lbYeE6ThibTqEQq2+l1SK6z2Si5YUwzchN0Am6gFelMkNvGn8ZEmyGEQ4uAeqgEN29bD4gxMIXAl8UuhqU1lCvM19pH+IPguQojUjbrdE031h104/U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WrsLSnbb; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WrsLSnbb" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-21f40deb941so88660265ad.2; Mon, 10 Feb 2025 05:31:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739194299; x=1739799099; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CBYzKh666wM3wi72dCVNRA5e881/bj/k98p0ZebqkRo=; b=WrsLSnbbFqqRk3gc13zPDSnAZlRiwYof2wKlxYLa8R9BhTUxjZgnZ824xuxuIZ+u6c z91d4HIl7dsWvQ5NHt2KSXYVEiVyxkKrvqceg28NI/Xkg9Fviu5eoHyV7hS9u6PWfy0v u5grcFZpzr5LYvDX1yHJLjRjVrEZyS+O3Cwh3qu9VY1Co10eU93BfoJPFgLeNk4TjY8g ywDWXpUYIJ8h445zqmcLhxuT6JpmtntEGw4G0dsk9udhfzsaCBkQm9esVlTbQFKmuAtf 80QGa9DBITUrIepH5QRBl+KMxcc8pnkPyFjTGSLBrrc0z55ufkxHX3GzYdYmV7aT60+Y aBrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739194299; x=1739799099; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CBYzKh666wM3wi72dCVNRA5e881/bj/k98p0ZebqkRo=; b=kOXPPNNgwnCrb2a2D0SFWgg4gmJuxw8e0NZBOTdUQRZENDOdkWe5B2iKRtQqMs8+1U jMXXG/DB6roKfZCnIJ3lMm3NeC9kxObtQYd1ffylc4GgQnU/Nc3F7m/pUMfbKIf9qE7F SwpZhkRkhTEnijjXV5LoaHFxziZR1syn7ejquu2cGtyPB5HtPa5qSvdO5uWzOdsSDirv +ySFn3B2cODAe5N8p3gb880x3YTa6DHAcOkjdpxkbJwBy59T2l5J26BHWSeAenQRMhQu 0rzzeVHJGpx6EkX15ZkU5v4rdNy2t2/42b1tCi8+TQTFOlQaY/uduGxlvnMRQZLjWz1k /gDw== X-Forwarded-Encrypted: i=1; AJvYcCU+6PmrHYTrs94846N9pF7zxkJ2VuL8OnTNMKccfN+v6pezFlF9o/JDBUpuPwhnzna+PXqLuZBg7ZfMXTsK@vger.kernel.org, AJvYcCUTq26oo6ZEVTt3sKkXVSzwrr0ZC/gnyI/zUDlMsuHTsyVwwl0R2WK/DpFDI78j2qlMMnndPc/ZLL1lyQ==@vger.kernel.org, AJvYcCV6uBl5Wo+jn+ZKy94miSuvAzhhf9e/77IuAfOF6QgbEdquVjQlN1KYcTnv3F4eJNYnIpk=@vger.kernel.org, AJvYcCVFxcR76AHDloJjxP2eZyGBlGGiBsJC42dJ/LA0IMqduVlWoe1EFPmFyCEG2LPgjeIWSxsSUVHN+DMe@vger.kernel.org, AJvYcCVI+L6sWRswsKm44obEzhf9ZgDO6OUc95B8U+pN7OxlE44GqF8aN2pS+by8jhP35/gkCTMLz7TEdLi0Nw==@vger.kernel.org, AJvYcCXEHWW8zo0Bb1OJd+zQwiqgQsqFAQyh6+j8OZpQaGW7S05jv8Ime7TRAvk76lwoYVYyUjpFhsKbosZX3R2l14I=@vger.kernel.org, AJvYcCXGZb385Fdcv1XZvTowgdZwyBLvnjZOqpRPgWWI5mUM2B3XmMUvR2I1ZQWahg3S1PLF+OA2QZgWKTIV@vger.kernel.org, AJvYcCXMcT22TiVeM/r71wYyXeytube77HQk6+4U9CCBmcIhRhXbVlDMNu26S7EVr1yAYU78CsbJzbuJdY2+Z62gtFns@vger.kernel.org X-Gm-Message-State: AOJu0Yy8Uuq+JFfI8ecwJ6MC1tjJY/aUayh6I0vH46eJAorSMPfpBg75 1VnId8KvOo63FKigjfVz8AoFMIvMYNUgTZPNai6FF5HotblM8KuBPddUSkG/CjY= X-Gm-Gg: ASbGnctjaQTwmkxWBu+rhEmgez5vVmVS0LYihC99booBIyh4IoF0I7DIrfBf7VaB/Kz rwjP2NyNjFRncALD9tzBn1fWbLkHIVPiF+vkAcEOOtI8UdfsPbast/a2NnUR9rkwKUx4Skv8ea4 lMnprLmu0Yi3gnWt0IfTvIEsCulXRauEF7sdwLKsf4dunDhy+ob3SppcIPCDt2EgRJUUOUStq8E WvsjktWK8yEn85tUWQ4Q1A3IwqldTtXPS/m7gsq26xLZ8UEJz+A1C258NIdj095V7n63hw1QQs1 JSUW1A== X-Google-Smtp-Source: AGHT+IEvqpw8e2KYvbqgEmvCDFUuCXdsu3E3xccl+ty2yNtqbZtpph7stG1AFKdWtDXwqVY0rqWqig== X-Received: by 2002:a17:902:ce06:b0:20c:6399:d637 with SMTP id d9443c01a7336-21f4e78de85mr276877915ad.40.1739194299072; Mon, 10 Feb 2025 05:31:39 -0800 (PST) Received: from ws.. ([103.167.140.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af3bsm78799445ad.57.2025.02.10.05.31.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 05:31:38 -0800 (PST) From: Xiao Liang To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, Kuniyuki Iwashima , Jakub Kicinski Cc: "David S. Miller" , David Ahern , Eric Dumazet , Paolo Abeni , Andrew Lunn , Simon Horman , Shuah Khan , Donald Hunter , Alexander Aring , Stefan Schmidt , Miquel Raynal , Steffen Klassert , Herbert Xu , linux-rdma@vger.kernel.org, linux-can@vger.kernel.org, osmocom-net-gprs@lists.osmocom.org, bpf@vger.kernel.org, linux-ppp@vger.kernel.org, wireguard@lists.zx2c4.com, linux-wireless@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org, bridge@lists.linux.dev, linux-wpan@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v9 09/11] rtnetlink: Create link directly in target net namespace Date: Mon, 10 Feb 2025 21:30:00 +0800 Message-ID: <20250210133002.883422-10-shaw.leon@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210133002.883422-1-shaw.leon@gmail.com> References: <20250210133002.883422-1-shaw.leon@gmail.com> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Make rtnl_newlink_create() create device in target namespace directly. Avoid extra netns change when link netns is provided. Device drivers has been converted to be aware of link netns, that is not assuming device netns is and link netns is the same when ops->newlink() is called. Signed-off-by: Xiao Liang --- net/core/rtnetlink.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index e9af0775fa6b..a11b2c1f0985 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -3788,8 +3788,8 @@ static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm, name_assign_type = NET_NAME_ENUM; } - dev = rtnl_create_link(link_net ? : tgt_net, ifname, - name_assign_type, ops, tb, extack); + dev = rtnl_create_link(tgt_net, ifname, name_assign_type, ops, tb, + extack); if (IS_ERR(dev)) { err = PTR_ERR(dev); goto out; @@ -3809,11 +3809,6 @@ static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm, err = rtnl_configure_link(dev, ifm, portid, nlh); if (err < 0) goto out_unregister; - if (link_net) { - err = dev_change_net_namespace(dev, tgt_net, ifname); - if (err < 0) - goto out_unregister; - } if (tb[IFLA_MASTER]) { err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack); if (err) From patchwork Mon Feb 10 13:30:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Liang X-Patchwork-Id: 863989 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC0A022F391; Mon, 10 Feb 2025 13:31:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194320; cv=none; b=LiMp/ul9ghd8BpfBLLI0O3n2NFTiB7CQ9j2F59D48vlfN1CLN5OGxQaeXmR11xtlg3wES34m8H5dL+Ht/gWXQOdyHNV47X7iOKFEnBOFjtzUqn5FKrztUj+LCC1pp14Q/ZMREBsxYI9bFRH07IjsGMZQuOcW9/+cL3KESaK+1Ro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739194320; c=relaxed/simple; bh=S62S2UlhWL8rb4qI3arpOLtfToV24VE5G0QJtgwZSd0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OQWXBtUbYnThfG/6OAitlzsAJkwhJMESV/xx0bHz9AhJD4/BcWDYvERLKeOUDXnuR7BIcDzeDmN+OW7Q5RPjlAGtE+nP/TnLEw3AjBMYcwHZ6jkWjINbOnXycgMllofNljnH1dy9hhfmBVX4mVSZQflgbqbQCRkIi4Agodxplfs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nffdMbBG; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nffdMbBG" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-21f2f386cbeso79691785ad.0; Mon, 10 Feb 2025 05:31:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739194317; x=1739799117; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Jk0dxyoWsu5lRO3R+Rz0JbRWJlXzABQyZSbO//NLaUs=; b=nffdMbBGq5lRsBHSKBMadMqqfvyNNIlS/Cwc0MJ8f5IjZ0ZM8CJ7MDNWwGKkIkPLwD sNoBNIOiI1IijsKGyf5LY6Y+C+5qhsDvy1UGnLTF/Duy4nMS5gddV4vec1jGHXSHWg6s 3lkEXfN8NNhZFk4QQ8s9Ih0qRK1w6wiyPMM2lXv4yuIgZaSKFo5iEJHrtjDTkvO/C1U+ zXGPLiaOJY3eCP0eey8tTDFg4SlZUIljtNUGx0ODDjT7JctZHM00Qnh0Mw2IxDxO1KEd lFr7THRh2MguPSVDWqrG99FzeT6AqvaLCgEB5AhQFFU3ObQXPskEWG/qKj7xhKLf+0Zd zoKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739194317; x=1739799117; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Jk0dxyoWsu5lRO3R+Rz0JbRWJlXzABQyZSbO//NLaUs=; b=Sh9kWjIkqyYtZ22e9ExP4Ov/74UYvtpEw1RZIRf/efSdISDm9H7v7rkFZocUtrqD38 uvkO7M+1rHAzW0I+76wsxAzKKrgmjhXLkFpIgp0BUEqju5/eLqGMo4UFUWvNQsx/iTSP DsF5rE8MjuDH0uNH4KSibkyscog4TAbUgArFjBv35qrRImTwyTCCXhCKlxwQ1akRpU4H gs58jqSuslrHYHPY9L5hFxS3crDMQZ6RohZQG92SfLpfGZr8mInwBc1jQEruIfWApRuO cr1e7mqTBcnd4cE6r+Xzu/1shjut3znfcF14I/8+D4hqnGAC+5rOa2dYpNolENshCFn1 m+8g== X-Forwarded-Encrypted: i=1; AJvYcCUrK+VWuoYr6B/Ne4jB1R2ZUPbpyMS0YldA+a1u+J5VpPGZXAJBhWja8/HI8Ia2pNx6EFxFD2Mc+ARO@vger.kernel.org, AJvYcCVOJ61EGvPjXK6udrbZiqXTrfAYEOrXjv96hA887G1RS7DpzAUhibkPLparCSk2B/SGqSOTPu7YTvW//Ncokfn1@vger.kernel.org, AJvYcCW9QrpdJDp2XMn/coPc4/h0ex9HU6Ceq1AkVOSu2HP3mrRf4Dh6rEq2om4AdNyAIRA224U=@vger.kernel.org, AJvYcCWA3IQTOFw19Q6Id2o+2eyHuF2iWZmx+Wo7wsH4EeeTMeneszkBu7vAA5xVf/b/M4IbS3WzwyrMFXpnZQ==@vger.kernel.org, AJvYcCWRySya22sXNlPKrzo9fVmhjs9finoANLKgbAdaU0mS1AmJGQtTHe9HxDjU+DE8c7aJ4OKnQ1o0tVemaL9Y@vger.kernel.org, AJvYcCWrFw9uYdgUHpAZIWqjoQGokJGCysqoEcMAdbI8WoEcdbajJr6Ns3Ozh9Hia+d2NdJgEEaN48xj9kXmRw==@vger.kernel.org, AJvYcCX545YPGlgLOGcxOsqSPBvyB7I/8QklTCYXoCY8phm9K4fdAUWH2xftH8J99DgYr8zYqzG2PbOsrwP/lBsLt3k=@vger.kernel.org, AJvYcCXPM/5ENZCrCHopPOZDzn11LWCRT4ENN+T64+SDSTTGRExoTgY03cMmVqJWmQzpPUuMFpxvg3J1dgp4@vger.kernel.org X-Gm-Message-State: AOJu0YwlylsSwM8ldxxANAExZ339B+4vX1jUewGqZxYAv9gMlKDgKsGc 2jGBSZUdNyzQaefRl8IdsNmqeh3Po3Wk64YMWhdB/oMP0GyyxkuHorJPcQ34x7A= X-Gm-Gg: ASbGncsY6uiUeM/oeYV3ChmbIgycsUXFyrQrOlNhUOE6FWKtOsfQh8FHZ9qsiCmwrnS ML4rm9MSF4kU92WVf/gy+ctkZP1vzU+qBMVbkZfQkuMag25JtCAUVfClMRJPG7JMDQWdROIgrbY ZelWqnAvsFWlXMSJV7UrLE5z5ZF9bKjYWxpXycCRHftztss7OkvxcgY84Ysc7SRYe3m8vFNjx8a CzmfrYymaX5FfwyPRk708YyJFDdN4BaoSk5mK0FH7pHuxLzh3Kh+RV7S5ATocB0RIeIYRrEWxZW 3ky8wQ== X-Google-Smtp-Source: AGHT+IFvHDtUC7UviecjfNl3hpHTbMhh0EOi41PhfMqFPmLkJsOvzu+7RGuTxjt6Zfs/TZjuhdiWxA== X-Received: by 2002:a17:902:f60a:b0:21e:feac:8b99 with SMTP id d9443c01a7336-21f4e10da1bmr232900525ad.0.1739194317162; Mon, 10 Feb 2025 05:31:57 -0800 (PST) Received: from ws.. ([103.167.140.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af3bsm78799445ad.57.2025.02.10.05.31.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 05:31:56 -0800 (PST) From: Xiao Liang To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, Kuniyuki Iwashima , Jakub Kicinski Cc: "David S. Miller" , David Ahern , Eric Dumazet , Paolo Abeni , Andrew Lunn , Simon Horman , Shuah Khan , Donald Hunter , Alexander Aring , Stefan Schmidt , Miquel Raynal , Steffen Klassert , Herbert Xu , linux-rdma@vger.kernel.org, linux-can@vger.kernel.org, osmocom-net-gprs@lists.osmocom.org, bpf@vger.kernel.org, linux-ppp@vger.kernel.org, wireguard@lists.zx2c4.com, linux-wireless@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org, bridge@lists.linux.dev, linux-wpan@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v9 11/11] selftests: net: Add test cases for link and peer netns Date: Mon, 10 Feb 2025 21:30:02 +0800 Message-ID: <20250210133002.883422-12-shaw.leon@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210133002.883422-1-shaw.leon@gmail.com> References: <20250210133002.883422-1-shaw.leon@gmail.com> Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 - Add test for creating link in another netns when a link of the same name and ifindex exists in current netns. - Add test to verify that link is created in target netns directly - no link new/del events should be generated in link netns or current netns. - Add test cases to verify that link-netns is set as expected for various drivers and combination of namespace-related parameters. Signed-off-by: Xiao Liang --- tools/testing/selftests/net/Makefile | 1 + tools/testing/selftests/net/config | 5 + tools/testing/selftests/net/link_netns.py | 141 ++++++++++++++++++++++ tools/testing/selftests/net/netns-name.sh | 10 ++ 4 files changed, 157 insertions(+) create mode 100755 tools/testing/selftests/net/link_netns.py diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index 73ee88d6b043..df07a38f884f 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -35,6 +35,7 @@ TEST_PROGS += cmsg_so_mark.sh TEST_PROGS += cmsg_so_priority.sh TEST_PROGS += cmsg_time.sh cmsg_ipv6.sh TEST_PROGS += netns-name.sh +TEST_PROGS += link_netns.py TEST_PROGS += nl_netdev.py TEST_PROGS += srv6_end_dt46_l3vpn_test.sh TEST_PROGS += srv6_end_dt4_l3vpn_test.sh diff --git a/tools/testing/selftests/net/config b/tools/testing/selftests/net/config index 5b9baf708950..ab55270669ec 100644 --- a/tools/testing/selftests/net/config +++ b/tools/testing/selftests/net/config @@ -107,3 +107,8 @@ CONFIG_XFRM_INTERFACE=m CONFIG_XFRM_USER=m CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IPVLAN=m +CONFIG_CAN=m +CONFIG_CAN_DEV=m +CONFIG_CAN_VXCAN=m +CONFIG_NETKIT=y diff --git a/tools/testing/selftests/net/link_netns.py b/tools/testing/selftests/net/link_netns.py new file mode 100755 index 000000000000..aab043c59d69 --- /dev/null +++ b/tools/testing/selftests/net/link_netns.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 + +import time + +from lib.py import ksft_run, ksft_exit, ksft_true +from lib.py import ip +from lib.py import NetNS, NetNSEnter +from lib.py import RtnlFamily + + +LINK_NETNSID = 100 + + +def test_event() -> None: + with NetNS() as ns1, NetNS() as ns2: + with NetNSEnter(str(ns2)): + rtnl = RtnlFamily() + + rtnl.ntf_subscribe("rtnlgrp-link") + + ip(f"netns set {ns2} {LINK_NETNSID}", ns=str(ns1)) + ip(f"link add netns {ns1} link-netnsid {LINK_NETNSID} dummy1 type dummy") + ip(f"link add netns {ns1} dummy2 type dummy", ns=str(ns2)) + + ip("link del dummy1", ns=str(ns1)) + ip("link del dummy2", ns=str(ns1)) + + time.sleep(1) + rtnl.check_ntf() + ksft_true(rtnl.async_msg_queue.empty(), + "Received unexpected link notification") + + +def validate_link_netns(netns, ifname, link_netnsid) -> bool: + link_info = ip(f"-d link show dev {ifname}", ns=netns, json=True) + if not link_info: + return False + return link_info[0].get("link_netnsid") == link_netnsid + + +def test_link_net() -> None: + configs = [ + # type, common args, type args, fallback to dev_net + ("ipvlan", "link dummy1", "", False), + ("macsec", "link dummy1", "", False), + ("macvlan", "link dummy1", "", False), + ("macvtap", "link dummy1", "", False), + ("vlan", "link dummy1", "id 100", False), + ("gre", "", "local 192.0.2.1", True), + ("vti", "", "local 192.0.2.1", True), + ("ipip", "", "local 192.0.2.1", True), + ("ip6gre", "", "local 2001:db8::1", True), + ("ip6tnl", "", "local 2001:db8::1", True), + ("vti6", "", "local 2001:db8::1", True), + ("sit", "", "local 192.0.2.1", True), + ("xfrm", "", "if_id 1", True), + ] + + with NetNS() as ns1, NetNS() as ns2, NetNS() as ns3: + net1, net2, net3 = str(ns1), str(ns2), str(ns3) + + # prepare link netnsid and a dummy link needed by certain drivers + ip(f"netns set {net3} {LINK_NETNSID}", ns=str(net2)) + ip("link add dummy1 type dummy", ns=net3) + + cases = [ + # source, "netns", "link-netns", expected link-netns + (net3, None, None, None, None), + (net3, net2, None, None, LINK_NETNSID), + (net2, None, net3, LINK_NETNSID, LINK_NETNSID), + (net1, net2, net3, LINK_NETNSID, LINK_NETNSID), + ] + + for src_net, netns, link_netns, exp1, exp2 in cases: + tgt_net = netns or src_net + for typ, cargs, targs, fb_dev_net in configs: + cmd = "link add" + if netns: + cmd += f" netns {netns}" + if link_netns: + cmd += f" link-netns {link_netns}" + cmd += f" {cargs} foo type {typ} {targs}" + ip(cmd, ns=src_net) + if fb_dev_net: + ksft_true(validate_link_netns(tgt_net, "foo", exp1), + f"{typ} link_netns validation failed") + else: + ksft_true(validate_link_netns(tgt_net, "foo", exp2), + f"{typ} link_netns validation failed") + ip(f"link del foo", ns=tgt_net) + + +def test_peer_net() -> None: + types = [ + "vxcan", + "netkit", + "veth", + ] + + with NetNS() as ns1, NetNS() as ns2, NetNS() as ns3, NetNS() as ns4: + net1, net2, net3, net4 = str(ns1), str(ns2), str(ns3), str(ns4) + + ip(f"netns set {net3} {LINK_NETNSID}", ns=str(net2)) + + cases = [ + # source, "netns", "link-netns", "peer netns", expected + (net1, None, None, None, None), + (net1, net2, None, None, None), + (net2, None, net3, None, LINK_NETNSID), + (net1, net2, net3, None, None), + (net2, None, None, net3, LINK_NETNSID), + (net1, net2, None, net3, LINK_NETNSID), + (net2, None, net2, net3, LINK_NETNSID), + (net1, net2, net4, net3, LINK_NETNSID), + ] + + for src_net, netns, link_netns, peer_netns, exp in cases: + tgt_net = netns or src_net + for typ in types: + cmd = "link add" + if netns: + cmd += f" netns {netns}" + if link_netns: + cmd += f" link-netns {link_netns}" + cmd += f" foo type {typ}" + if peer_netns: + cmd += f" peer netns {peer_netns}" + ip(cmd, ns=src_net) + ksft_true(validate_link_netns(tgt_net, "foo", exp), + f"{typ} peer_netns validation failed") + ip(f"link del foo", ns=tgt_net) + + +def main() -> None: + ksft_run([test_event, test_link_net, test_peer_net]) + ksft_exit() + + +if __name__ == "__main__": + main() diff --git a/tools/testing/selftests/net/netns-name.sh b/tools/testing/selftests/net/netns-name.sh index 6974474c26f3..0be1905d1f2f 100755 --- a/tools/testing/selftests/net/netns-name.sh +++ b/tools/testing/selftests/net/netns-name.sh @@ -78,6 +78,16 @@ ip -netns $NS link show dev $ALT_NAME 2> /dev/null && fail "Can still find alt-name after move" ip -netns $test_ns link del $DEV || fail +# +# Test no conflict of the same name/ifindex in different netns +# +ip -netns $NS link add name $DEV index 100 type dummy || fail +ip -netns $NS link add netns $test_ns name $DEV index 100 type dummy || + fail "Can create in netns without moving" +ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found" +ip -netns $NS link del $DEV || fail +ip -netns $test_ns link del $DEV || fail + echo -ne "$(basename $0) \t\t\t\t" if [ $RET_CODE -eq 0 ]; then echo "[ OK ]"