All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 2/2] selftest: net: add icmp reply address test
@ 2019-11-01 23:34 Francesco Ruggeri
  2019-11-02 14:34 ` David Ahern
  0 siblings, 1 reply; 10+ messages in thread
From: Francesco Ruggeri @ 2019-11-01 23:34 UTC (permalink / raw)
  To: fruggeri, dsahern, davem, shuah, netdev, linux-kselftest

Verify that in this scenario

                   1.0.3.1/24
---- 1.0.1.3/24    1.0.1.1/24 ---- 1.0.2.1/24    1.0.2.4/24 ----
|H1|--------------------------|R1|--------------------------|H2|
----            N1            ----            N2            ----

where 1.0.3.1/24 and 1.0.1.1/24 are respectively R1's primary and
secondary address on N1, traceroute from H1 to H2 show 1.0.1.1

Signed-off-by: Francesco Ruggeri <fruggeri@arista.com>
---
 tools/testing/selftests/net/Makefile          |   2 +-
 .../testing/selftests/net/icmp_reply_addr.sh  | 106 ++++++++++++++++++
 2 files changed, 107 insertions(+), 1 deletion(-)
 create mode 100755 tools/testing/selftests/net/icmp_reply_addr.sh

diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
index daeaeb59d5ca..3a90084feee4 100644
--- a/tools/testing/selftests/net/Makefile
+++ b/tools/testing/selftests/net/Makefile
@@ -11,7 +11,7 @@ TEST_PROGS += udpgso_bench.sh fib_rule_tests.sh msg_zerocopy.sh psock_snd.sh
 TEST_PROGS += udpgro_bench.sh udpgro.sh test_vxlan_under_vrf.sh reuseport_addr_any.sh
 TEST_PROGS += test_vxlan_fdb_changelink.sh so_txtime.sh ipv6_flowlabel.sh
 TEST_PROGS += tcp_fastopen_backup_key.sh fcnal-test.sh l2tp.sh
-TEST_PROGS += icmp6_reply_addr.sh
+TEST_PROGS += icmp6_reply_addr.sh icmp_reply_addr.sh
 TEST_PROGS_EXTENDED := in_netns.sh
 TEST_GEN_FILES =  socket nettest
 TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any
diff --git a/tools/testing/selftests/net/icmp_reply_addr.sh b/tools/testing/selftests/net/icmp_reply_addr.sh
new file mode 100755
index 000000000000..3c0ff3c26c07
--- /dev/null
+++ b/tools/testing/selftests/net/icmp_reply_addr.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+#
+# Verify that in this scenario
+#
+#                    1.0.3.1/24
+# ---- 1.0.1.3/24    1.0.1.1/24 ---- 1.0.2.1/24    1.0.2.4/24 ----
+# |H1|--------------------------|R1|--------------------------|H2|
+# ----            N1            ----            N2            ----
+#
+# where 1.0.3.1/24 and 1.0.1.1/24 are respectively R1's primary and
+# secondary address on N1, traceroute from H1 to H2 show 1.0.1.1
+#
+
+####################################################################
+# helpers
+# 
+# Interface on network <net> in node <node> is called <node><net>
+#
+
+node()
+{
+	host=$1
+	shift
+	ip netns exec ${host} $*
+}
+
+create_nodes()
+{
+	for n in $*; do
+		ip netns add $n
+		node $n ip link set lo up
+	done
+}
+
+delete_nodes()
+{
+	for n in $*; do
+		ip netns del $n
+	done
+}
+
+create_veth_net()
+{
+	net=$1
+	h1=$2
+	h2=$3
+
+	ip link add ${h1}${net} type veth peer name ${h2}${net}
+	ip link set ${h1}${net} netns ${h1}
+	node ${h1} ip link set ${h1}${net} up
+	ip link set ${h2}${net} netns ${h2}
+	node ${h2} ip link set ${h2}${net} up
+}
+
+# end helpers
+####################################################################
+
+if [ "$(id -u)" -ne 0 ]; then
+        echo "SKIP: Need root privileges"
+        exit 0
+fi
+
+if [ ! -x "$(command -v traceroute)" ]; then
+        echo "SKIP: Could not run test without traceroute"
+        exit 0
+fi
+
+create_nodes host1 rtr1 host2
+
+create_veth_net net1 host1 rtr1
+create_veth_net net2 rtr1 host2
+
+# Configure interfaces and routes in host1
+node host1 ip addr add 1.0.1.3/24 dev host1net1
+node host1 ip route add default via 1.0.1.1
+
+# Configure interfaces and routes in rtr1
+node rtr1 ip addr add 1.0.3.1/24 dev rtr1net1
+node rtr1 ip addr add 1.0.1.1/24 dev rtr1net1
+node rtr1 ip addr add 1.0.2.1/24 dev rtr1net2
+node rtr1 sysctl net.ipv4.ip_forward=1 >/dev/null
+node rtr1 sysctl net.ipv4.icmp_errors_use_inbound_ifaddr=1 >/dev/null
+
+# Configure interfaces and routes in host2
+node host2 ip addr add 1.0.2.4/24 dev host2net2
+node host2 ip route add default via 1.0.2.1
+
+# Ping host2 from host1
+echo "Priming the network"
+node host1 ping -c5 1.0.2.4 >/dev/null
+
+# Traceroute host2 from host1
+echo "Running traceroute (will take a while)"
+if node host1 traceroute 1.0.2.4 | grep -q 1.0.1.1; then
+	ret=0
+	echo "Found 1.0.1.1. Test passed."
+else
+	ret=1
+	echo "Did not find 1.0.1.1. Test failed."
+fi
+
+delete_nodes host1 rtr1 host2
+
+exit ${ret}
+
-- 
2.19.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-01 23:34 [PATCH net-next 2/2] selftest: net: add icmp reply address test Francesco Ruggeri
@ 2019-11-02 14:34 ` David Ahern
  2019-11-02 15:08   ` Francesco Ruggeri
  0 siblings, 1 reply; 10+ messages in thread
From: David Ahern @ 2019-11-02 14:34 UTC (permalink / raw)
  To: Francesco Ruggeri, davem, shuah, netdev, linux-kselftest

On 11/1/19 5:34 PM, Francesco Ruggeri wrote:
> Verify that in this scenario
> 
>                    1.0.3.1/24
> ---- 1.0.1.3/24    1.0.1.1/24 ---- 1.0.2.1/24    1.0.2.4/24 ----
> |H1|--------------------------|R1|--------------------------|H2|
> ----            N1            ----            N2            ----
> 
> where 1.0.3.1/24 and 1.0.1.1/24 are respectively R1's primary and
> secondary address on N1, traceroute from H1 to H2 show 1.0.1.1
> 
> Signed-off-by: Francesco Ruggeri <fruggeri@arista.com>
> ---
>  tools/testing/selftests/net/Makefile          |   2 +-
>  .../testing/selftests/net/icmp_reply_addr.sh  | 106 ++++++++++++++++++
>  2 files changed, 107 insertions(+), 1 deletion(-)
>  create mode 100755 tools/testing/selftests/net/icmp_reply_addr.sh
> 

Hi:

It would be better to combine both of these into a single test script;
the topology and setup are very similar and the scripts share a lot of
common code.

The script can be a generic traceroute.sh and then contain 2 tests:
1. IPv4 - verify reply address test,
2. IPv6 - verify reply address test.

Making 1 script with multiple tests allows other tests to be added in
the future with less overhead. This is how other tests under net are done.

Also, you still have these using macvlan devices. The intent is to use
network namespaces to mimic nodes in a network. As such veth pairs are a
better option for this intent.

There are 2 scripts under net (l2tp.sh and fcnal-test.sh) that contain
functions -- create_ns and connect_ns  -- that really reduce the
overhead of creating tests like this. Actually you could copy l2tp.sh to
traceroute.sh and quickly update it for these tests.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-02 14:34 ` David Ahern
@ 2019-11-02 15:08   ` Francesco Ruggeri
  2019-11-02 15:11     ` David Ahern
  0 siblings, 1 reply; 10+ messages in thread
From: Francesco Ruggeri @ 2019-11-02 15:08 UTC (permalink / raw)
  To: David Ahern; +Cc: David Miller, shuah, netdev, linux-kselftest

On Sat, Nov 2, 2019 at 7:34 AM David Ahern <dsahern@gmail.com> wrote:
>
> It would be better to combine both of these into a single test script;
> the topology and setup are very similar and the scripts share a lot of
> common code.

Sure, I can do that.

> Also, you still have these using macvlan devices. The intent is to use
> network namespaces to mimic nodes in a network. As such veth pairs are a
> better option for this intent.
>

I am only using macvlans for N1 in the ipv6 test, where there are 3 nodes.
How do I use veths for that?

Thanks,
Francesco

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-02 15:08   ` Francesco Ruggeri
@ 2019-11-02 15:11     ` David Ahern
  2019-11-02 16:09       ` Francesco Ruggeri
  0 siblings, 1 reply; 10+ messages in thread
From: David Ahern @ 2019-11-02 15:11 UTC (permalink / raw)
  To: Francesco Ruggeri; +Cc: David Miller, shuah, netdev, linux-kselftest

On 11/2/19 9:08 AM, Francesco Ruggeri wrote:
> On Sat, Nov 2, 2019 at 7:34 AM David Ahern <dsahern@gmail.com> wrote:
>>
>> It would be better to combine both of these into a single test script;
>> the topology and setup are very similar and the scripts share a lot of
>> common code.
> 
> Sure, I can do that.
> 
>> Also, you still have these using macvlan devices. The intent is to use
>> network namespaces to mimic nodes in a network. As such veth pairs are a
>> better option for this intent.
>>
> 
> I am only using macvlans for N1 in the ipv6 test, where there are 3 nodes.
> How do I use veths for that?

checkout the connect_ns function. It uses veth to connect ns1 to ns2.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-02 15:11     ` David Ahern
@ 2019-11-02 16:09       ` Francesco Ruggeri
  2019-11-02 17:38         ` David Ahern
  0 siblings, 1 reply; 10+ messages in thread
From: Francesco Ruggeri @ 2019-11-02 16:09 UTC (permalink / raw)
  To: David Ahern; +Cc: David Miller, shuah, netdev, linux-kselftest

On Sat, Nov 2, 2019 at 8:11 AM David Ahern <dsahern@gmail.com> wrote:
> On 11/2/19 9:08 AM, Francesco Ruggeri wrote:
> > I am only using macvlans for N1 in the ipv6 test, where there are 3 nodes.
> > How do I use veths for that?
>
> checkout the connect_ns function. It uses veth to connect ns1 to ns2.

I apologize in advance  for being slow ...
I have 3 namespaces that have to share the same LAN, I am not trying
1-1 connections among those namespaces.

Thanks,
Francesco

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-02 16:09       ` Francesco Ruggeri
@ 2019-11-02 17:38         ` David Ahern
  2019-11-02 18:08           ` Francesco Ruggeri
  0 siblings, 1 reply; 10+ messages in thread
From: David Ahern @ 2019-11-02 17:38 UTC (permalink / raw)
  To: Francesco Ruggeri; +Cc: David Miller, shuah, netdev, linux-kselftest

On 11/2/19 10:09 AM, Francesco Ruggeri wrote:
> On Sat, Nov 2, 2019 at 8:11 AM David Ahern <dsahern@gmail.com> wrote:
>> On 11/2/19 9:08 AM, Francesco Ruggeri wrote:
>>> I am only using macvlans for N1 in the ipv6 test, where there are 3 nodes.
>>> How do I use veths for that?
>>
>> checkout the connect_ns function. It uses veth to connect ns1 to ns2.
> 
> I apologize in advance  for being slow ...
> I have 3 namespaces that have to share the same LAN, I am not trying
> 1-1 connections among those namespaces.
> 

How would you cable this if it were an actual network with physical nodes?
- bridge on R1 (since it is the gw for H1), with connections to R2 and
H1 into the bridge
- second connection between R1 and R2
- connection between R2 and H2

For the simulation, network namespaces represent physical nodes, veth
pairs act like a cable between the nodes / namespaces and the bridge
makes the LAN.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-02 17:38         ` David Ahern
@ 2019-11-02 18:08           ` Francesco Ruggeri
  2019-11-02 22:08             ` Francesco Ruggeri
  0 siblings, 1 reply; 10+ messages in thread
From: Francesco Ruggeri @ 2019-11-02 18:08 UTC (permalink / raw)
  To: David Ahern; +Cc: David Miller, shuah, netdev, linux-kselftest

On Sat, Nov 2, 2019 at 10:38 AM David Ahern <dsahern@gmail.com> wrote:
>
> On 11/2/19 10:09 AM, Francesco Ruggeri wrote:
> > On Sat, Nov 2, 2019 at 8:11 AM David Ahern <dsahern@gmail.com> wrote:
> >> On 11/2/19 9:08 AM, Francesco Ruggeri wrote:
> >>> I am only using macvlans for N1 in the ipv6 test, where there are 3 nodes.
> >>> How do I use veths for that?
> >>
> >> checkout the connect_ns function. It uses veth to connect ns1 to ns2.
> >
> > I apologize in advance  for being slow ...
> > I have 3 namespaces that have to share the same LAN, I am not trying
> > 1-1 connections among those namespaces.
> >
>
> How would you cable this if it were an actual network with physical nodes?
> - bridge on R1 (since it is the gw for H1), with connections to R2 and
> H1 into the bridge
> - second connection between R1 and R2
> - connection between R2 and H2
>
> For the simulation, network namespaces represent physical nodes, veth
> pairs act like a cable between the nodes / namespaces and the bridge
> makes the LAN.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-02 18:08           ` Francesco Ruggeri
@ 2019-11-02 22:08             ` Francesco Ruggeri
  2019-11-03 16:52               ` David Ahern
  0 siblings, 1 reply; 10+ messages in thread
From: Francesco Ruggeri @ 2019-11-02 22:08 UTC (permalink / raw)
  To: David Ahern; +Cc: David Miller, shuah, netdev, linux-kselftest

> > > I apologize in advance  for being slow ...
> > > I have 3 namespaces that have to share the same LAN, I am not trying
> > > 1-1 connections among those namespaces.
> > >
> >
> > How would you cable this if it were an actual network with physical nodes?
> > - bridge on R1 (since it is the gw for H1), with connections to R2 and
> > H1 into the bridge
> > - second connection between R1 and R2
> > - connection between R2 and H2
> >
> > For the simulation, network namespaces represent physical nodes, veth
> > pairs act like a cable between the nodes / namespaces and the bridge
> > makes the LAN.

Thanks, I see what you mean now.
I was assuming a different physical model, with all the namespaces on the LAN
connected to a hub (simulated by the dummy device). For simulation purposes this
model seem simpler: there are N interfaces instead of N pairs, and one does not
have to deal with the bridge end of the pairs.
Why is the model you described preferable?

Thanks,
Francesco

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-02 22:08             ` Francesco Ruggeri
@ 2019-11-03 16:52               ` David Ahern
  2019-11-04 18:14                 ` Francesco Ruggeri
  0 siblings, 1 reply; 10+ messages in thread
From: David Ahern @ 2019-11-03 16:52 UTC (permalink / raw)
  To: Francesco Ruggeri; +Cc: David Miller, shuah, netdev, linux-kselftest

On 11/2/19 4:08 PM, Francesco Ruggeri wrote:
>>>> I apologize in advance  for being slow ...
>>>> I have 3 namespaces that have to share the same LAN, I am not trying
>>>> 1-1 connections among those namespaces.
>>>>
>>>
>>> How would you cable this if it were an actual network with physical nodes?
>>> - bridge on R1 (since it is the gw for H1), with connections to R2 and
>>> H1 into the bridge
>>> - second connection between R1 and R2
>>> - connection between R2 and H2
>>>
>>> For the simulation, network namespaces represent physical nodes, veth
>>> pairs act like a cable between the nodes / namespaces and the bridge
>>> makes the LAN.
> 
> Thanks, I see what you mean now.
> I was assuming a different physical model, with all the namespaces on the LAN
> connected to a hub (simulated by the dummy device). For simulation purposes this
> model seem simpler: there are N interfaces instead of N pairs, and one does not
> have to deal with the bridge end of the pairs.
> Why is the model you described preferable?
> 

The tests are about traceroute in modern networks, not broadcast
domains. As such, it is preferable for these tests to be constructed
similar to other extisting networking tests.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next 2/2] selftest: net: add icmp reply address test
  2019-11-03 16:52               ` David Ahern
@ 2019-11-04 18:14                 ` Francesco Ruggeri
  0 siblings, 0 replies; 10+ messages in thread
From: Francesco Ruggeri @ 2019-11-04 18:14 UTC (permalink / raw)
  To: David Ahern; +Cc: David Miller, shuah, netdev, linux-kselftest

> The tests are about traceroute in modern networks, not broadcast
> domains. As such, it is preferable for these tests to be constructed
> similar to other extisting networking tests.

Got it.

Thanks,
Francesco

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-11-04 18:14 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-01 23:34 [PATCH net-next 2/2] selftest: net: add icmp reply address test Francesco Ruggeri
2019-11-02 14:34 ` David Ahern
2019-11-02 15:08   ` Francesco Ruggeri
2019-11-02 15:11     ` David Ahern
2019-11-02 16:09       ` Francesco Ruggeri
2019-11-02 17:38         ` David Ahern
2019-11-02 18:08           ` Francesco Ruggeri
2019-11-02 22:08             ` Francesco Ruggeri
2019-11-03 16:52               ` David Ahern
2019-11-04 18:14                 ` Francesco Ruggeri

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.