From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9D0B0A0547; Mon, 27 Sep 2021 09:53:43 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 97DA740E3C; Mon, 27 Sep 2021 09:53:43 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 848CA410E1 for ; Mon, 27 Sep 2021 09:53:41 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10119"; a="285439394" X-IronPort-AV: E=Sophos;i="5.85,325,1624345200"; d="scan'208";a="285439394" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Sep 2021 00:53:41 -0700 X-IronPort-AV: E=Sophos;i="5.85,325,1624345200"; d="scan'208";a="553070535" Received: from unknown (HELO localhost.localdomain) ([10.240.183.103]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Sep 2021 00:53:39 -0700 From: Zhimin Huang To: dts@dpdk.org Cc: Zhimin Huang Date: Tue, 28 Sep 2021 00:22:20 +0800 Message-Id: <20210927162220.13633-5-zhiminx.huang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210927162220.13633-1-zhiminx.huang@intel.com> References: <20210927162220.13633-1-zhiminx.huang@intel.com> Subject: [dts] [PATCH V3 4/4] tests/iavf_fdir:add esp flow test case X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" add 21.08 new feature testcase,this feature support esp flow to match outer ip header. take ip src/dst and spi for inputset,add 4 new cases in iavf_fdir test suite. Signed-off-by: Zhimin Huang --- tests/TestSuite_iavf_fdir.py | 162 +++++++++++++++++++++++++++-------- 1 file changed, 128 insertions(+), 34 deletions(-) diff --git a/tests/TestSuite_iavf_fdir.py b/tests/TestSuite_iavf_fdir.py index aecb39ca..7f8dace3 100755 --- a/tests/TestSuite_iavf_fdir.py +++ b/tests/TestSuite_iavf_fdir.py @@ -274,18 +274,22 @@ MAC_IPV6_L2TPv3 = { MAC_IPV4_ESP = { "match": [ - 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",proto=50)/ESP(spi=7)/Raw("x"*480)', - 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.3",proto=50)/ESP(spi=7)/Raw("x"*480)'], + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",proto=50)/ESP(spi=7)/Raw("x"*480)'], "mismatch": [ - 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",proto=50)/ESP(spi=17)/Raw("x"*480)'] + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.22",dst="192.168.0.21",proto=50)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.11",proto=50)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",proto=50)/ESP(spi=17)/Raw("x"*480)' + ] } MAC_IPV6_ESP = { "match": [ - 'Ether(dst="00:11:22:33:44:55")/IPv6(src="1111:2222:3333:4444:5555:6666:7777:8888",nh=50)/ESP(spi=7)/Raw("x"*480)', - 'Ether(dst="00:11:22:33:44:55")/IPv6(src="1111:2222:3333:4444:5555:6666:7777:9999",nh=50)/ESP(spi=7)/Raw("x"*480)'], + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",dst="2001::2",nh=50)/ESP(spi=7)/Raw("x"*480)'], "mismatch": [ - 'Ether(dst="00:11:22:33:44:55")/IPv6(src="1111:2222:3333:4444:5555:6666:7777:8888",nh=50)/ESP(spi=17)/Raw("x"*480)'] + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::8",dst="2001::2",nh=50)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",dst="2001::9",nh=50)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",dst="2001::2",nh=50)/ESP(spi=17)/Raw("x"*480)' + ] } MAC_IPV4_AH = { @@ -306,20 +310,20 @@ MAC_IPV6_AH = { MAC_IPV4_NAT_T_ESP = { "match": [ - 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20")/UDP(dport=4500)/ESP(spi=2)/Raw("x"*480)'], + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(dport=4500)/ESP(spi=7)/Raw("x"*480)'], "mismatch": [ - 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.10.20")/UDP(dport=4500)/ESP(spi=2)/Raw("x"*480)', - 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20")/UDP(dport=4500)/ESP(spi=12)/Raw("x"*480)', - 'Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.20")/UDP(dport=4500)/ESP(spi=2)/Raw("x"*480)'] + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.22",dst="192.168.0.21")/UDP(dport=4500)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.11")/UDP(dport=4500)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(dport=4500)/ESP(spi=17)/Raw("x"*480)'] } MAC_IPV6_NAT_T_ESP = { "match": [ - 'Ether(dst="00:11:22:33:44:55")/IPv6(dst="1111:2222:3333:4444:5555:6666:7777:8888")/UDP(dport=4500)/ESP(spi=2)/Raw("x"*480)'], + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",dst="2001::2")/UDP(dport=4500)/ESP(spi=7)/Raw("x"*480)'], "mismatch": [ - 'Ether(dst="00:11:22:33:44:55")/IPv6(dst="1111:2222:3333:4444:5555:6666:7777:8888")/UDP(dport=4500)/ESP(spi=12)/Raw("x"*480)', - 'Ether(dst="00:11:22:33:44:55")/IPv6(dst="1111:2222:3333:4444:5555:6666:7777:9999")/UDP(dport=4500)/ESP(spi=2)/Raw("x"*480)', - 'Ether(dst="00:11:22:33:44:55")/IPv6(src="1111:2222:3333:4444:5555:6666:7777:8888")/UDP(dport=4500)/ESP(spi=2)/Raw("x"*480)'] + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::8",dst="2001::2")/UDP(dport=4500)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",dst="2001::9")/UDP(dport=4500)/ESP(spi=7)/Raw("x"*480)', + 'Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",dst="2001::2")/UDP(dport=4500)/ESP(spi=17)/Raw("x"*480)'] } L2_Ethertype = [ @@ -2126,44 +2130,86 @@ tv_mac_ipv6_l2tpv3_mark = { tv_mac_ipv4_esp_queue_index = { "name": "test_mac_ipv4_esp_queue_index", - "rule": "flow create 0 ingress pattern eth / ipv4 / esp spi is 7 / end actions queue index 13 / mark id 7 / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / esp spi is 7 / end actions queue index 13 / mark id 7 / end", "scapy_str": MAC_IPV4_ESP, "check_param": {"port_id": 0, "queue": 13, "mark_id": 7} } tv_mac_ipv4_esp_queue_group = { "name": "test_mac_ipv4_esp_queue_group", - "rule": "flow create 0 ingress pattern eth / ipv4 / esp spi is 7 / end actions rss queues 1 2 3 4 end / mark id 6 / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / esp spi is 7 / end actions rss queues 1 2 3 4 end / mark id 6 / end", "scapy_str": MAC_IPV4_ESP, "check_param": {"port_id": 0, "queue": [1, 2, 3, 4], "mark_id": 6} } +tv_mac_ipv4_esp_passthru = { + "name": "test_mac_ipv4_esp_passthru", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / esp spi is 7 / end actions passthru / mark id 1 / end", + "scapy_str": MAC_IPV4_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 1} +} + +tv_mac_ipv4_esp_drop = { + "name": "test_mac_ipv4_esp_drop", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / esp spi is 7 / end actions drop / end", + "scapy_str": MAC_IPV4_ESP, + "check_param": {"port_id": 0, "drop": 1} +} + +tv_mac_ipv4_esp_mark_rss = { + "name": "test_mac_ipv4_esp_mark_rss", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / esp spi is 7 / end actions mark id 2 / rss / end", + "scapy_str": MAC_IPV4_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 2} +} + tv_mac_ipv4_esp_mark = { "name": "test_mac_ipv4_esp_mark", - "rule": "flow create 0 ingress pattern eth / ipv4 / esp spi is 7 / end actions mark id 15 / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / esp spi is 7 / end actions mark id 15 / end", "scapy_str": MAC_IPV4_ESP, - "check_param": {"port_id": 0, "passthru": 1, "mark_id": 15} + "check_param": {"port_id": 0, "mark_id": 15} } tv_mac_ipv6_esp_queue_index = { "name": "test_mac_ipv6_esp_queue_index", - "rule": "flow create 0 ingress pattern eth / ipv6 / esp spi is 7 / end actions queue index 13 / mark id 7 / end", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / esp spi is 7 / end actions queue index 13 / mark id 7 / end", "scapy_str": MAC_IPV6_ESP, "check_param": {"port_id": 0, "queue": 13, "mark_id": 7} } tv_mac_ipv6_esp_queue_group = { "name": "test_mac_ipv6_esp_queue_group", - "rule": "flow create 0 ingress pattern eth / ipv6 / esp spi is 7 / end actions rss queues 1 2 3 4 end / mark id 6 / end", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / esp spi is 7 / end actions rss queues 1 2 3 4 end / mark id 6 / end", "scapy_str": MAC_IPV6_ESP, "check_param": {"port_id": 0, "queue": [1, 2, 3, 4], "mark_id": 6} } +tv_mac_ipv6_esp_passthru = { + "name": "test_mac_ipv6_esp_passthru", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / esp spi is 7 / end actions passthru / mark id 1 / end", + "scapy_str": MAC_IPV6_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 1} +} + +tv_mac_ipv6_esp_drop = { + "name": "test_mac_ipv6_esp_drop", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / esp spi is 7 / end actions drop / end", + "scapy_str": MAC_IPV6_ESP, + "check_param": {"port_id": 0, "drop": 1} +} + +tv_mac_ipv6_esp_mark_rss = { + "name": "test_mac_ipv6_esp_mark_rss", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / esp spi is 7 / end actions mark id 2 / rss / end", + "scapy_str": MAC_IPV6_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 2} +} + tv_mac_ipv6_esp_mark = { "name": "test_mac_ipv6_esp_mark", - "rule": "flow create 0 ingress pattern eth / ipv6 / esp spi is 7 / end actions mark id 15 / end", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / esp spi is 7 / end actions mark id 15 / end", "scapy_str": MAC_IPV6_ESP, - "check_param": {"port_id": 0, "passthru": 1, "mark_id": 15} + "check_param": {"port_id": 0, "mark_id": 15} } tv_mac_ipv4_ah_queue_index = { @@ -2210,44 +2256,86 @@ tv_mac_ipv6_ah_mark = { tv_mac_ipv4_nat_t_esp_queue_index = { "name": "test_mac_ipv4_nat_t_esp_queue_index", - "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 / udp / esp spi is 2 / end actions queue index 13 / mark id 7 / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp / esp spi is 7 / end actions queue index 13 / mark id 7 / end", "scapy_str": MAC_IPV4_NAT_T_ESP, "check_param": {"port_id": 0, "queue": 13, "mark_id": 7} } tv_mac_ipv4_nat_t_esp_queue_group = { "name": "test_mac_ipv4_nat_t_esp_queue_group", - "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 / udp / esp spi is 2 / end actions rss queues 1 2 3 4 end / mark id 6 / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp / esp spi is 7 / end actions rss queues 1 2 3 4 end / mark id 6 / end", "scapy_str": MAC_IPV4_NAT_T_ESP, "check_param": {"port_id": 0, "queue": [1, 2, 3, 4], "mark_id": 6} } +tv_mac_ipv4_nat_t_esp_passthru = { + "name": "test_mac_ipv4_nat_t_esp_passthru", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp / esp spi is 7 / end actions passthru / mark id 1 / end", + "scapy_str": MAC_IPV4_NAT_T_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 1} +} + +tv_mac_ipv4_nat_t_esp_drop = { + "name": "test_mac_ipv4_nat_t_esp_drop", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp / esp spi is 7 / end actions drop / end", + "scapy_str": MAC_IPV4_NAT_T_ESP, + "check_param": {"port_id": 0, "drop": 1} +} + +tv_mac_ipv4_nat_t_esp_mark_rss = { + "name": "test_mac_ipv4_nat_t_esp_mark_rss", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp / esp spi is 7 / end actions mark id 2 / rss / end", + "scapy_str": MAC_IPV4_NAT_T_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 2} +} + tv_mac_ipv4_nat_t_esp_mark = { "name": "test_mac_ipv4_nat_t_esp_mark", - "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 / udp / esp spi is 2 / end actions mark id 15 / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp / esp spi is 7 / end actions mark id 15 / end", "scapy_str": MAC_IPV4_NAT_T_ESP, - "check_param": {"port_id": 0, "passthru": 1, "mark_id": 15} + "check_param": {"port_id": 0, "mark_id": 15} } tv_mac_ipv6_nat_t_esp_queue_index = { "name": "test_mac_ipv6_nat_t_esp_queue_index", - "rule": "flow create 0 ingress pattern eth / ipv6 dst is 1111:2222:3333:4444:5555:6666:7777:8888 / udp / esp spi is 2 / end actions queue index 13 / mark id 7 / end", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / udp / esp spi is 7 / end actions queue index 13 / mark id 7 / end", "scapy_str": MAC_IPV6_NAT_T_ESP, "check_param": {"port_id": 0, "queue": 13, "mark_id": 7} } tv_mac_ipv6_nat_t_esp_queue_group = { "name": "test_mac_ipv6_nat_t_esp_queue_group", - "rule": "flow create 0 ingress pattern eth / ipv6 dst is 1111:2222:3333:4444:5555:6666:7777:8888 / udp / esp spi is 2 / end actions rss queues 1 2 3 4 end / mark id 6 / end", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / udp / esp spi is 7 / end actions rss queues 1 2 3 4 end / mark id 6 / end", "scapy_str": MAC_IPV6_NAT_T_ESP, "check_param": {"port_id": 0, "queue": [1, 2, 3, 4], "mark_id": 6} } +tv_mac_ipv6_nat_t_esp_passthru = { + "name": "test_mac_ipv6_nat_t_esp_passthru", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / udp / esp spi is 7 / end actions passthru / mark id 1 / end", + "scapy_str": MAC_IPV6_NAT_T_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 1} +} + +tv_mac_ipv6_nat_t_esp_drop = { + "name": "test_mac_ipv6_nat_t_esp_drop", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / udp / esp spi is 7 / end actions drop / end", + "scapy_str": MAC_IPV6_NAT_T_ESP, + "check_param": {"port_id": 0, "drop": 1} +} + +tv_mac_ipv6_nat_t_esp_mark_rss = { + "name": "test_mac_ipv6_nat_t_esp_mark_rss", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / udp / esp spi is 7 / end actions mark id 2 / rss / end", + "scapy_str": MAC_IPV6_NAT_T_ESP, + "check_param": {"port_id": 0, "passthru": 1, "mark_id": 2} +} + tv_mac_ipv6_nat_t_esp_mark = { "name": "test_mac_ipv6_nat_t_esp_mark", - "rule": "flow create 0 ingress pattern eth / ipv6 dst is 1111:2222:3333:4444:5555:6666:7777:8888 / udp / esp spi is 2 / end actions mark id 15 / end", + "rule": "flow create 0 ingress pattern eth / ipv6 src is 2001::1 dst is 2001::2 / udp / esp spi is 7 / end actions mark id 15 / end", "scapy_str": MAC_IPV6_NAT_T_ESP, - "check_param": {"port_id": 0, "passthru": 1, "mark_id": 15} + "check_param": {"port_id": 0, "mark_id": 15} } # mac_ipv4_tcp_without_input_set @@ -6902,17 +6990,23 @@ vectors_ipv4_l2tpv3 = [tv_mac_ipv4_l2tpv3_queue_index, tv_mac_ipv4_l2tpv3_queue_ vectors_ipv6_l2tpv3 = [tv_mac_ipv6_l2tpv3_queue_index, tv_mac_ipv6_l2tpv3_queue_group, tv_mac_ipv6_l2tpv3_mark] -vectors_ipv4_esp = [tv_mac_ipv4_esp_queue_index, tv_mac_ipv4_esp_queue_group, tv_mac_ipv4_esp_mark] +vectors_ipv4_esp = [tv_mac_ipv4_esp_queue_index, tv_mac_ipv4_esp_queue_group, tv_mac_ipv4_esp_mark, + tv_mac_ipv4_esp_drop, tv_mac_ipv4_esp_mark_rss, tv_mac_ipv4_esp_passthru] -vectors_ipv6_esp = [tv_mac_ipv6_esp_queue_index, tv_mac_ipv6_esp_queue_group, tv_mac_ipv6_esp_mark] +vectors_ipv6_esp = [tv_mac_ipv6_esp_queue_index, tv_mac_ipv6_esp_queue_group, tv_mac_ipv6_esp_mark, + tv_mac_ipv6_esp_drop, tv_mac_ipv6_esp_mark_rss, tv_mac_ipv6_esp_passthru] vectors_ipv4_ah = [tv_mac_ipv4_ah_queue_index, tv_mac_ipv4_ah_queue_group, tv_mac_ipv4_ah_mark] vectors_ipv6_ah = [tv_mac_ipv6_ah_queue_index, tv_mac_ipv6_ah_queue_group, tv_mac_ipv6_ah_mark] -vectors_ipv4_nat_t_esp = [tv_mac_ipv4_nat_t_esp_queue_index, tv_mac_ipv4_nat_t_esp_queue_group, tv_mac_ipv4_nat_t_esp_mark] +vectors_ipv4_nat_t_esp = [tv_mac_ipv4_nat_t_esp_queue_index, tv_mac_ipv4_nat_t_esp_queue_group, + tv_mac_ipv4_nat_t_esp_mark, tv_mac_ipv4_nat_t_esp_drop, tv_mac_ipv4_nat_t_esp_mark_rss, + tv_mac_ipv4_nat_t_esp_passthru] -vectors_ipv6_nat_t_esp = [tv_mac_ipv6_nat_t_esp_queue_index, tv_mac_ipv6_nat_t_esp_queue_group, tv_mac_ipv6_nat_t_esp_mark] +vectors_ipv6_nat_t_esp = [tv_mac_ipv6_nat_t_esp_queue_index, tv_mac_ipv6_nat_t_esp_queue_group, + tv_mac_ipv6_nat_t_esp_mark, tv_mac_ipv6_nat_t_esp_drop, tv_mac_ipv6_nat_t_esp_mark_rss, + tv_mac_ipv6_nat_t_esp_passthru] vectors_ipv4_tcp_without_input_set = [tv_mac_ipv4_tcp_without_input_set_queue_index, tv_mac_ipv4_tcp_without_input_set_queue_group, tv_mac_ipv4_tcp_without_input_set_mark_rss, tv_mac_ipv4_tcp_without_input_set_passthru, -- 2.17.1