From patchwork Mon Jul 23 11:51:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 947702 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WHITHgvk"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41Z0GX6SjDz9s2M for ; Mon, 23 Jul 2018 21:52:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388105AbeGWMxJ (ORCPT ); Mon, 23 Jul 2018 08:53:09 -0400 Received: from mail-pg1-f196.google.com ([209.85.215.196]:46206 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387816AbeGWMxJ (ORCPT ); Mon, 23 Jul 2018 08:53:09 -0400 Received: by mail-pg1-f196.google.com with SMTP id p23-v6so199015pgv.13 for ; Mon, 23 Jul 2018 04:52:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=e+WejOlVM59RQV2NnRfstlMfFnPjjNakQctaluMlLe0=; b=WHITHgvkGs3CBASUpuBrkbkVqnsV1OJXeYJuPY8ckLMLTl6H8rtPuqP9y7FC4WByGi Lm0WO7TLLwRgEwBGI3Z3EHdVh6yOQx+BRzVVB4E33IvNKANNz8Y4H7rQH6nauNC+D5SP ndrdf5KXIfKh/mFyRI59isaa1U1xEdZXCGXufcf9KCbEKHCFZImrttueitApRMo77OYh ibuAWh5+7fVnoaGmDOT60+2ssWo68ZjUhMh/KWav8ltg/34gPpTMy6rS1sltGUfx9/0S Ed8hrLIvaXrZaSqzxX9NKGRLTnUF6OkxLsxw9rsuDXUH8s2nuR4MTjQlQa77hVuXuvk5 PKEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=e+WejOlVM59RQV2NnRfstlMfFnPjjNakQctaluMlLe0=; b=DjY7ehF42lvh94N7WwR29f5r0IFoU3Gl+hurIkbiyHI97yufdtv0+tqV0mI0qReTOk poezhagaMJrk+V6SbCp6K93XsOYubDzl4ND9fMIGTKr3cGragtfUycneK9dP1WN0udFY YKEPH7qifumGgAT6FNNjnTUasYvxJkJdkVZBlOHJq2vAdbhF7lFOVkjtTFaKCBbgR6UJ G19iF5mMFLc/dpF/MI+00yvoEQn8M0XIcLervC4dugmalYxa1XEMXta1srYrUm9HaPJM Vg30JUcmJS/SsAC/AeO7rIIVlemMJL8sEXA57Qn4nbrsAs/LDg+CGp9W4dBwIf6pvSEi 56Ww== X-Gm-Message-State: AOUpUlH2VK6b6kld1dYBinpVu+cgesSMA5wr3umdOR9ABrcGSTseZ3Ya txNxgPn+gBxT1gy8UebAplczlVLZ X-Google-Smtp-Source: AAOMgpdqwZBERfXqev7q/KWkw2qOkVxc/XNUcNn/NMIdZIQTpg0sruo+Q5YOzXMd94+bU88/9aEr6Q== X-Received: by 2002:a63:4924:: with SMTP id w36-v6mr12040992pga.143.1532346738204; Mon, 23 Jul 2018 04:52:18 -0700 (PDT) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id 1-v6sm16127837pfm.145.2018.07.23.04.52.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Jul 2018 04:52:17 -0700 (PDT) From: Xin Long To: network dev Cc: davem@davemloft.net, David Ahern , Davide Caratti , idosch@idosch.org Subject: [PATCHv3 net-next 2/2] selftests: add a selftest for directed broadcast forwarding Date: Mon, 23 Jul 2018 19:51:54 +0800 Message-Id: X-Mailer: git-send-email 2.1.0 In-Reply-To: <8b30fcb80234d6d0f96e703487cf4a4195fc1c48.1532346504.git.lucien.xin@gmail.com> References: <8b30fcb80234d6d0f96e703487cf4a4195fc1c48.1532346504.git.lucien.xin@gmail.com> In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org As Ido's suggestion, this patch is to add a selftest for directed broadcast forwarding with vrf. It does the assertion by checking the src IP of the echo-reply packet in ping_test_from. Signed-off-by: Xin Long --- .../selftests/net/forwarding/router_broadcast.sh | 215 +++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100755 tools/testing/selftests/net/forwarding/router_broadcast.sh diff --git a/tools/testing/selftests/net/forwarding/router_broadcast.sh b/tools/testing/selftests/net/forwarding/router_broadcast.sh new file mode 100755 index 0000000..f2a5a51 --- /dev/null +++ b/tools/testing/selftests/net/forwarding/router_broadcast.sh @@ -0,0 +1,215 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +ALL_TESTS="ping_ipv4" +NUM_NETIFS=6 +source lib.sh + +h1_create() +{ + vrf_create "vrf-h1" + ip link set dev $h1 master vrf-h1 + + ip link set dev vrf-h1 up + ip link set dev $h1 up + + ip address add 192.0.2.2/24 dev $h1 + + ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1 + ip route add 198.51.200.0/24 vrf vrf-h1 nexthop via 192.0.2.1 +} + +h1_destroy() +{ + ip route del 198.51.200.0/24 vrf vrf-h1 + ip route del 198.51.100.0/24 vrf vrf-h1 + + ip address del 192.0.2.2/24 dev $h1 + + ip link set dev $h1 down + vrf_destroy "vrf-h1" +} + +h2_create() +{ + vrf_create "vrf-h2" + ip link set dev $h2 master vrf-h2 + + ip link set dev vrf-h2 up + ip link set dev $h2 up + + ip address add 198.51.100.2/24 dev $h2 + + ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1 + ip route add 198.51.200.0/24 vrf vrf-h2 nexthop via 198.51.100.1 +} + +h2_destroy() +{ + ip route del 198.51.200.0/24 vrf vrf-h2 + ip route del 192.0.2.0/24 vrf vrf-h2 + + ip address del 198.51.100.2/24 dev $h2 + + ip link set dev $h2 down + vrf_destroy "vrf-h2" +} + +h3_create() +{ + vrf_create "vrf-h3" + ip link set dev $h3 master vrf-h3 + + ip link set dev vrf-h3 up + ip link set dev $h3 up + + ip address add 198.51.200.2/24 dev $h3 + + ip route add 192.0.2.0/24 vrf vrf-h3 nexthop via 198.51.200.1 + ip route add 198.51.100.0/24 vrf vrf-h3 nexthop via 198.51.200.1 +} + +h3_destroy() +{ + ip route del 198.51.100.0/24 vrf vrf-h3 + ip route del 192.0.2.0/24 vrf vrf-h3 + + ip address del 198.51.200.2/24 dev $h3 + + ip link set dev $h3 down + vrf_destroy "vrf-h3" +} + +router_create() +{ + ip link set dev $rp1 up + ip link set dev $rp2 up + ip link set dev $rp3 up + + ip address add 192.0.2.1/24 dev $rp1 + + ip address add 198.51.100.1/24 dev $rp2 + ip address add 198.51.200.1/24 dev $rp3 +} + +router_destroy() +{ + ip address del 198.51.200.1/24 dev $rp3 + ip address del 198.51.100.1/24 dev $rp2 + + ip address del 192.0.2.1/24 dev $rp1 + + ip link set dev $rp3 down + ip link set dev $rp2 down + ip link set dev $rp1 down +} + +setup_prepare() +{ + h1=${NETIFS[p1]} + rp1=${NETIFS[p2]} + + rp2=${NETIFS[p3]} + h2=${NETIFS[p4]} + + rp3=${NETIFS[p5]} + h3=${NETIFS[p6]} + + vrf_prepare + + h1_create + h2_create + h3_create + + router_create + + forwarding_enable +} + +cleanup() +{ + pre_cleanup + + forwarding_restore + + router_destroy + + h3_destroy + h2_destroy + h1_destroy + + vrf_cleanup +} + +bc_forwarding_disable() +{ + sysctl_set net.ipv4.conf.all.bc_forwarding 0 + sysctl_set net.ipv4.conf.$rp1.bc_forwarding 0 +} + +bc_forwarding_enable() +{ + sysctl_set net.ipv4.conf.all.bc_forwarding 1 + sysctl_set net.ipv4.conf.$rp1.bc_forwarding 1 +} + +bc_forwarding_restore() +{ + sysctl_restore net.ipv4.conf.$rp1.bc_forwarding + sysctl_restore net.ipv4.conf.all.bc_forwarding +} + +ping_test_from() +{ + local oif=$1 + local dip=$2 + local from=$3 + local fail=${4:-0} + + RET=0 + + ip vrf exec $(master_name_get $oif) \ + $PING -I $oif $dip -c 10 -i 0.1 -w 2 -b 2>&1 | grep $from &> /dev/null + check_err_fail $fail $? + log_test "ping_test_from" +} + +ping_ipv4() +{ + sysctl_set net.ipv4.icmp_echo_ignore_broadcasts 0 + + bc_forwarding_disable + ping_test_from $h1 198.51.100.255 192.0.2.1 + ping_test_from $h1 198.51.200.255 192.0.2.1 + ping_test_from $h1 192.0.2.255 192.0.2.1 + ping_test_from $h1 255.255.255.255 192.0.2.1 + + ping_test_from $h2 192.0.2.255 198.51.100.1 + ping_test_from $h2 198.51.200.255 198.51.100.1 + ping_test_from $h2 198.51.100.255 198.51.100.1 + ping_test_from $h2 255.255.255.255 198.51.100.1 + bc_forwarding_restore + + bc_forwarding_enable + ping_test_from $h1 198.51.100.255 198.51.100.2 + ping_test_from $h1 198.51.200.255 198.51.200.2 + ping_test_from $h1 192.0.2.255 192.0.2.1 1 + ping_test_from $h1 255.255.255.255 192.0.2.1 + + ping_test_from $h2 192.0.2.255 192.0.2.2 + ping_test_from $h2 198.51.200.255 198.51.200.2 + ping_test_from $h2 198.51.100.255 198.51.100.1 1 + ping_test_from $h2 255.255.255.255 198.51.100.1 + bc_forwarding_restore + + sysctl_restore net.ipv4.icmp_echo_ignore_broadcasts +} + +trap cleanup EXIT + +setup_prepare +setup_wait + +tests_run + +exit $EXIT_STATUS