From nobody Fri Jan 13 21:25:33 2023 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4NtvbL1gtcz2qktv; Fri, 13 Jan 2023 21:25:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4NtvbL0fgZz42v0; Fri, 13 Jan 2023 21:25:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1673645134; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=zmrJNH1a3AxxzPhGYjG6kfP/b+cIXw/gyNBRLsA/qWo=; b=J3coO+sGaxdL7Ybrg+Y4KmbuD+SZR18Mvx6lzCb2FUix98o+5pryZYtIwz6KI2gZEWiylv cx+9JntP4Ioh0pi3ZzTtcihECg+BEsbqyx0gG3qIvvkmcZ4QylHWzwTmrERonlCmU8A8cf gItUIHYyfgIDWjSrFYvw8iqkRZCp0N+P8Xq4lbFi8/F+oVbQ5AG2zY0ZPED0z2qs+q4A2W JvXwESNLFVZJPYXqf2JrprgbQsyGR5k+pYLEnUBbvpNLtSspR3nD57iAH6T98yk6G80w7e rHZ4iTG6LDZdZuQS0nsDMrPx7DR8DrmGb4kDz59Jf0RXFTIs8TDJAEpTo7jgxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1673645134; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=zmrJNH1a3AxxzPhGYjG6kfP/b+cIXw/gyNBRLsA/qWo=; b=KEyXzzRmlY3IL3Tb2YG3ezHh34pkyT0BwU90SyV+uKTRX6j3OX31yX2v8qn8AiCiXEz1hK oDg8K6vw8KQMIRp5sijOxrwdOjCDZLdvwHsxXM28AsOc67QYq/R2NUiiETXHhX8rNzCy6j t1H0y58bnXbpr6Ajwp+w1ADClHuKJvmY0yP+ilLpxYRrnyRhVskTJJXCrpvWy+bd6jX5ZB HNWzBlDac/UowYGjmMpTfM4JlPSndsHLx3uZHr/cwW9I2oiz+ZSRmu1oHbjcDSkvpgCgWW 4YgYHiuNN7ekiISdPQQceZqsGHC/YpzP3vuyE1Daai6ZR7HtMN4Yd2z+Cq1zfA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1673645134; a=rsa-sha256; cv=none; b=SsHIBNP9xwFVqJL9ocGcHuig9DMbXPF4WuefF52byInFtG1QMGsMtTY8ON880goV5tpFlK h77MHlOSR/SK7kS65VFOhX3ccXfEzeZ60q9y5ulO6Rh7MhIqrpmh2xiIAQcEDh37IsqlC1 RWgjcOsLvH81dl4ZiykC1PxDhg6sAZYvNJRF3TTOWUxxZ7FFGOChXVpze1+n4z1zDUXgmM YQW1Ctx5Rvv8oBmW/l0tu67AwKIV3s+FT4BOVhVqabkYkATBv7lXZfD37om/ZA2RwJMtUw I5D2TKlH/WoI3cgUvVSW2T50IJzwzCBRKg2CxR1Dx68zbFk+mQq9OchiN97akA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4NtvbK6mFszMvG; Fri, 13 Jan 2023 21:25:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 30DLPXaR042019; Fri, 13 Jan 2023 21:25:33 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30DLPX0R042018; Fri, 13 Jan 2023 21:25:33 GMT (envelope-from git) Date: Fri, 13 Jan 2023 21:25:33 GMT Message-Id: <202301132125.30DLPX0R042018@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Alexander V. Chernikov" Subject: git: 98886bf1e811 - stable/13 - netinet6: add ip6_output() scope tests List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: melifaro X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 98886bf1e811ae6aee51fef79e8b781026f6a0da Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=98886bf1e811ae6aee51fef79e8b781026f6a0da commit 98886bf1e811ae6aee51fef79e8b781026f6a0da Author: Alexander V. Chernikov AuthorDate: 2022-07-07 13:08:35 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-01-13 21:24:11 +0000 netinet6: add ip6_output() scope tests Differential Revision: https://reviews.freebsd.org/D35742 (cherry picked from commit 78d11a350853188921b84c83e32d14c8a6aa16fa) --- tests/sys/netinet6/test_ip6_output.py | 106 ++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/tests/sys/netinet6/test_ip6_output.py b/tests/sys/netinet6/test_ip6_output.py index be578fb88c02..a84e1f9d4d60 100644 --- a/tests/sys/netinet6/test_ip6_output.py +++ b/tests/sys/netinet6/test_ip6_output.py @@ -296,6 +296,112 @@ class TestIP6OutputNhopLL(BaseTestIP6Ouput): assert rx_obj["dst_iface_alias"] == "if1" +class TestIP6OutputScope(BaseTestIP6Ouput): + def vnet2_handler(self, vnet, obj_map, pipe): + """Generic listener that sends first received packet with metadata + back to the sender via pipw + """ + bind_ip, bind_ifp = self.wait_object(pipe) + if bind_ip is None: + os_ifname = vnet.iface_alias_map[bind_ifp].name + ll_data = ToolsHelper.get_linklocals() + bind_ip, _ = ll_data[os_ifname][0] + if bind_ifp is not None: + bind_ifp = vnet.iface_alias_map[bind_ifp].name + print("## BIND {}%{}".format(bind_ip, bind_ifp)) + self._vnet2_handler(vnet, obj_map, pipe, bind_ip, bind_ifp) + + @pytest.mark.parametrize( + "params", + [ + # sif/dif: source/destination interface (for link-local addr) + # sip/dip: source/destination ip (for non-LL addr) + # ex: OSError errno that sendto() must raise + pytest.param({"sif": "if2", "dif": "if2"}, id="same"), + pytest.param( + { + "sif": "if1", + "dif": "if2", + "ex": errno.EHOSTUNREACH, + }, + id="ll_differentif1", + ), + pytest.param( + { + "sif": "if1", + "dip": "2001:db8:b::2", + "ex": errno.EHOSTUNREACH, + }, + id="ll_differentif2", + ), + pytest.param( + { + "sip": "2001:db8:a::1", + "dif": "if2", + }, + id="gu_to_ll", + ), + ], + ) + @pytest.mark.require_user("root") + def test_output6_linklocal_scope(self, params): + """Tests simple UDP output""" + second_vnet = self.vnet_map["vnet2"] + + src_ifp = params.get("sif") + src_ip = params.get("sip") + dst_ifp = params.get("dif") + dst_ip = params.get("dip") + errno = params.get("ex", 0) + + # Sent ifp/IP to bind on + second_vnet = self.vnet_map["vnet2"] + second_vnet.pipe.send((dst_ip, dst_ifp)) + + # Wait for the child to become ready + ll_data = self.wait_object(second_vnet.pipe) + + if dst_ip is None: + # Pick LL address on dst_ifp vnet2's end + dst_ip, _ = ll_data[second_vnet.iface_alias_map[dst_ifp].name][0] + # Get local interface scope + os_ifname = self.vnet.iface_alias_map[dst_ifp].name + scopeid = socket.if_nametoindex(os_ifname) + target = (dst_ip, self.DEFAULT_PORT, 0, scopeid) + else: + target = (dst_ip, self.DEFAULT_PORT, 0, 0) + + # Bind + if src_ip is None: + ll_data = ToolsHelper.get_linklocals() + os_ifname = self.vnet.iface_alias_map[src_ifp].name + src_ip, _ = ll_data[os_ifname][0] + scopeid = socket.if_nametoindex(os_ifname) + src = (src_ip, self.DEFAULT_PORT, 0, scopeid) + else: + src = (src_ip, self.DEFAULT_PORT, 0, 0) + + s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + s.bind(src) + data = bytes("AAAA", "utf-8") + print("## TX packet {} -> {}".format(src, target)) + + try: + s.sendto(data, target) + except OSError as e: + if not errno: + raise + assert e.errno == errno + print("Correctly raised {}".format(e)) + return + + # Wait for the received object + rx_obj = self.wait_object(second_vnet.pipe) + assert rx_obj["dst_ip"] == dst_ip + assert rx_obj["src_ip"] == src_ip + # assert rx_obj["dst_iface_alias"] == "if2" + + class TestIP6OutputMulticast(BaseTestIP6Ouput): def vnet2_handler(self, vnet, obj_map, pipe): group = self.wait_object(pipe)