All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH v6 0/3] Route tests using netlink API (dst,gw,if)
@ 2020-04-29 19:23 Petr Vorel
  2020-04-29 19:23 ` [LTP] [PATCH v6 1/3] net: Add SAFE_GETADDRINFO() Petr Vorel
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Petr Vorel @ 2020-04-29 19:23 UTC (permalink / raw)
  To: ltp

Hi Alexey, Cyril,

changes v5->v6:

* new commit: Add $ROUTE_CHANGE_IP and $ROUTE_CHANGE_NETLINK variables
(increase, but better not affect $NS_TIMES as used by other tests)

* route-change-netlink.c: Better error handling with
brk_on_route_error() (Alexey), use global prefix
variable in rtnl_route().

Kind regards,
Petr

Petr Vorel (3):
  net: Add SAFE_GETADDRINFO()
  net/route: Add netlink based route change tests
  route: Increase default loop values

 configure.ac                                  |   1 +
 include/mk/config.mk.in                       |   2 +
 include/tst_net.h                             |   9 +-
 include/tst_private.h                         |   1 +
 include/tst_safe_net.h                        |   6 +
 lib/tst_net.c                                 |  15 +
 m4/ltp-libmnl.m4                              |   8 +
 runtest/net_stress.route                      |   6 +
 testcases/lib/tst_net.sh                      |   2 +
 testcases/network/netstress/netstress.c       |  20 +-
 testcases/network/stress/route/.gitignore     |   1 +
 .../network/stress/route/00_Descriptions.txt  |  40 +--
 testcases/network/stress/route/Makefile       |  30 +-
 .../network/stress/route/route-change-dst.sh  |   7 +-
 .../network/stress/route/route-change-gw.sh   |  14 +-
 .../network/stress/route/route-change-if.sh   |  59 +---
 .../stress/route/route-change-netlink-dst.sh  |  36 ++
 .../stress/route/route-change-netlink-gw.sh   |  33 ++
 .../stress/route/route-change-netlink-if.sh   |  39 +++
 .../stress/route/route-change-netlink.c       | 327 ++++++++++++++++++
 testcases/network/stress/route/route-lib.sh   | 103 +++++-
 travis/debian.cross-compile.sh                |   1 +
 travis/debian.sh                              |   1 +
 travis/fedora.sh                              |   3 +
 travis/tumbleweed.sh                          |   1 +
 25 files changed, 632 insertions(+), 133 deletions(-)
 create mode 100644 m4/ltp-libmnl.m4
 create mode 100644 testcases/network/stress/route/.gitignore
 create mode 100755 testcases/network/stress/route/route-change-netlink-dst.sh
 create mode 100755 testcases/network/stress/route/route-change-netlink-gw.sh
 create mode 100755 testcases/network/stress/route/route-change-netlink-if.sh
 create mode 100644 testcases/network/stress/route/route-change-netlink.c

-- 
2.26.2


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

* [LTP] [PATCH v6 1/3] net: Add SAFE_GETADDRINFO()
  2020-04-29 19:23 [LTP] [PATCH v6 0/3] Route tests using netlink API (dst,gw,if) Petr Vorel
@ 2020-04-29 19:23 ` Petr Vorel
  2020-04-29 19:23 ` [LTP] [PATCH v6 2/3] net/route: Add netlink based route change tests Petr Vorel
  2020-04-29 19:23 ` [LTP] [PATCH v6 3/3] route: Increase default loop values Petr Vorel
  2 siblings, 0 replies; 9+ messages in thread
From: Petr Vorel @ 2020-04-29 19:23 UTC (permalink / raw)
  To: ltp

based on setup_addrinfo() from netstress.c.

Added only to new C API, thus code kept in tst_net.c, instead of safe_net.c,
which is also for legacy API.

Reviewed-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 include/tst_net.h                       |  9 +++++++--
 include/tst_private.h                   |  1 +
 include/tst_safe_net.h                  |  6 ++++++
 lib/tst_net.c                           | 15 +++++++++++++++
 testcases/network/netstress/netstress.c | 20 ++++----------------
 5 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/include/tst_net.h b/include/tst_net.h
index 855f4fc13..daefdd9d9 100644
--- a/include/tst_net.h
+++ b/include/tst_net.h
@@ -7,9 +7,10 @@
 #define TST_NET_H_
 
 #include <arpa/inet.h>
-#include <sys/types.h>
+#include <netdb.h>
 #include <netinet/in.h>
 #include <netinet/ip.h>
+#include <sys/types.h>
 
 void tst_get_in_addr(const char *ip_str, struct in_addr *ip);
 void tst_get_in6_addr(const char *ip_str, struct in6_addr *ip6);
@@ -27,4 +28,8 @@ void tst_init_sockaddr_inet_bin(struct sockaddr_in *sa, uint32_t ip_val, uint16_
 void tst_init_sockaddr_inet6(struct sockaddr_in6 *sa, const char *ip_str, uint16_t port);
 void tst_init_sockaddr_inet6_bin(struct sockaddr_in6 *sa, const struct in6_addr *ip_val, uint16_t port);
 
-#endif
+void safe_getaddrinfo(const char *file, const int lineno, const char *src_addr,
+					  const char *port, const struct addrinfo *hints,
+					  struct addrinfo **addr_info);
+
+#endif /* TST_NET_H_ */
diff --git a/include/tst_private.h b/include/tst_private.h
index 00cd17fce..e30d34740 100644
--- a/include/tst_private.h
+++ b/include/tst_private.h
@@ -10,6 +10,7 @@
 #define TST_PRIVATE_H_
 
 #include <stdio.h>
+#include <netdb.h>
 
 #define MAX_IPV4_PREFIX 32
 #define MAX_IPV6_PREFIX 128
diff --git a/include/tst_safe_net.h b/include/tst_safe_net.h
index f31c8fe2f..78a488a18 100644
--- a/include/tst_safe_net.h
+++ b/include/tst_safe_net.h
@@ -12,6 +12,7 @@
 #include <sys/un.h>
 
 #include "safe_net_fn.h"
+#include "tst_net.h"
 
 #define SAFE_SOCKET(domain, type, protocol) \
 	safe_socket(__FILE__, __LINE__, NULL, domain, type, protocol)
@@ -70,4 +71,9 @@
 #define TST_GET_UNUSED_PORT(family, type) \
 	tst_get_unused_port(__FILE__, __LINE__, NULL, family, type)
 
+/* new API only */
+
+#define SAFE_GETADDRINFO(src_addr, port, hints, addr_info) \
+	safe_getaddrinfo(__FILE__, __LINE__, src_addr, port, hints, addr_info)
+
 #endif /* TST_SAFE_NET_H__ */
diff --git a/lib/tst_net.c b/lib/tst_net.c
index 22c990e62..8a589b0ad 100644
--- a/lib/tst_net.c
+++ b/lib/tst_net.c
@@ -5,6 +5,7 @@
  */
 
 #include <errno.h>
+#include <netdb.h>
 #include <string.h>
 #include <stdlib.h>
 
@@ -204,3 +205,17 @@ void tst_init_sockaddr_inet6_bin(struct sockaddr_in6 *sa, const struct in6_addr
 	sa->sin6_port = htons(port);
 	memcpy(&sa->sin6_addr, ip_val, sizeof(struct in6_addr));
 }
+
+void safe_getaddrinfo(const char *file, const int lineno, const char *src_addr,
+					  const char *port, const struct addrinfo *hints,
+					  struct addrinfo **addr_info)
+{
+	int err = getaddrinfo(src_addr, port, hints, addr_info);
+
+	if (err)
+		tst_brk(TBROK, "%s:%d: getaddrinfo failed, %s", file, lineno,
+				gai_strerror(err));
+
+	if (!*addr_info)
+		tst_brk(TBROK, "%s:%d: failed to get the address", file, lineno);
+}
diff --git a/testcases/network/netstress/netstress.c b/testcases/network/netstress/netstress.c
index 6797be018..c5da4d464 100644
--- a/testcases/network/netstress/netstress.c
+++ b/testcases/network/netstress/netstress.c
@@ -29,6 +29,7 @@
 #include "tst_safe_stdio.h"
 #include "tst_safe_pthread.h"
 #include "tst_test.h"
+#include "tst_safe_net.h"
 
 static const int max_msg_len = (1 << 16) - 1;
 static const int min_msg_len = 5;
@@ -441,19 +442,6 @@ static int parse_client_request(const char *msg)
 static struct timespec tv_client_start;
 static struct timespec tv_client_end;
 
-static void setup_addrinfo(const char *src_addr, const char *port,
-			   const struct addrinfo *hints,
-			   struct addrinfo **addr_info)
-{
-	int err = getaddrinfo(src_addr, port, hints, addr_info);
-
-	if (err)
-		tst_brk(TBROK, "getaddrinfo failed, %s", gai_strerror(err));
-
-	if (!*addr_info)
-		tst_brk(TBROK, "failed to get the address");
-}
-
 static void client_init(void)
 {
 	if (clients_num >= MAX_THREADS) {
@@ -471,8 +459,8 @@ static void client_init(void)
 	hints.ai_protocol = 0;
 
 	if (source_addr)
-		setup_addrinfo(source_addr, NULL, &hints, &local_addrinfo);
-	setup_addrinfo(server_addr, tcp_port, &hints, &remote_addrinfo);
+		SAFE_GETADDRINFO(source_addr, NULL, &hints, &local_addrinfo);
+	SAFE_GETADDRINFO(server_addr, tcp_port, &hints, &remote_addrinfo);
 
 	tst_res(TINFO, "Running the test over IPv%s",
 		(remote_addrinfo->ai_family == AF_INET6) ? "6" : "4");
@@ -667,7 +655,7 @@ static void server_init(void)
 
 	if (source_addr && !strchr(source_addr, ':'))
 		SAFE_ASPRINTF(&src_addr, "::ffff:%s", source_addr);
-	setup_addrinfo(src_addr ? src_addr : source_addr, tcp_port,
+	SAFE_GETADDRINFO(src_addr ? src_addr : source_addr, tcp_port,
 		       &hints, &local_addrinfo);
 	free(src_addr);
 
-- 
2.26.2


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

* [LTP] [PATCH v6 2/3] net/route: Add netlink based route change tests
  2020-04-29 19:23 [LTP] [PATCH v6 0/3] Route tests using netlink API (dst,gw,if) Petr Vorel
  2020-04-29 19:23 ` [LTP] [PATCH v6 1/3] net: Add SAFE_GETADDRINFO() Petr Vorel
@ 2020-04-29 19:23 ` Petr Vorel
  2020-04-29 19:23 ` [LTP] [PATCH v6 3/3] route: Increase default loop values Petr Vorel
  2 siblings, 0 replies; 9+ messages in thread
From: Petr Vorel @ 2020-04-29 19:23 UTC (permalink / raw)
  To: ltp

changing destination, gateway and interface. These tests are inspired by
shell tests, but send UDP packets instead of ICMP and there is no
receiver of the packets thus no verification. Tests are much faster that
shell tests.

lhost address is not used, but NIC is set (required by interface tests).

* use libmnl and new C API, requires pkg-config (and pkg.m4 macro for
aclocal) for detection (but that's already needed for TI-RPC tests)
* add shell wrappers
* move common code for changing iface to route-lib.sh
* travis: add libmnl libraries to most of travis jobs
* cleanup test description and Makefile

Reviewed-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 configure.ac                                  |   1 +
 include/mk/config.mk.in                       |   2 +
 m4/ltp-libmnl.m4                              |   8 +
 runtest/net_stress.route                      |   6 +
 testcases/network/stress/route/.gitignore     |   1 +
 .../network/stress/route/00_Descriptions.txt  |  40 +--
 testcases/network/stress/route/Makefile       |  30 +-
 .../network/stress/route/route-change-dst.sh  |   5 +-
 .../network/stress/route/route-change-gw.sh   |  16 +-
 .../network/stress/route/route-change-if.sh   |  61 +---
 .../stress/route/route-change-netlink-dst.sh  |  36 ++
 .../stress/route/route-change-netlink-gw.sh   |  31 ++
 .../stress/route/route-change-netlink-if.sh   |  38 ++
 .../stress/route/route-change-netlink.c       | 327 ++++++++++++++++++
 testcases/network/stress/route/route-lib.sh   | 107 +++++-
 travis/debian.cross-compile.sh                |   1 +
 travis/debian.sh                              |   1 +
 travis/fedora.sh                              |   3 +
 travis/tumbleweed.sh                          |   1 +
 19 files changed, 593 insertions(+), 122 deletions(-)
 create mode 100644 m4/ltp-libmnl.m4
 create mode 100644 testcases/network/stress/route/.gitignore
 create mode 100755 testcases/network/stress/route/route-change-netlink-dst.sh
 create mode 100755 testcases/network/stress/route/route-change-netlink-gw.sh
 create mode 100755 testcases/network/stress/route/route-change-netlink-if.sh
 create mode 100644 testcases/network/stress/route/route-change-netlink.c

diff --git a/configure.ac b/configure.ac
index e1069b57e..9ccf8c3ea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -300,6 +300,7 @@ LTP_CHECK_CRYPTO
 LTP_CHECK_FORTIFY_SOURCE
 LTP_CHECK_KERNEL_DEVEL
 LTP_CHECK_KEYUTILS_SUPPORT
+LTP_CHECK_LIBMNL
 LTP_CHECK_LINUX_PTRACE
 LTP_CHECK_LINUXRANDOM
 LTP_CHECK_MREMAP_FIXED
diff --git a/include/mk/config.mk.in b/include/mk/config.mk.in
index 5526cfea1..87b2c833d 100644
--- a/include/mk/config.mk.in
+++ b/include/mk/config.mk.in
@@ -43,6 +43,8 @@ TIRPC_CFLAGS		:= @TIRPC_CFLAGS@
 TIRPC_LIBS		:= @TIRPC_LIBS@
 KEYUTILS_LIBS		:= @KEYUTILS_LIBS@
 HAVE_FTS_H		:= @HAVE_FTS_H@
+LIBMNL_LIBS		:= @LIBMNL_LIBS@
+LIBMNL_CFLAGS		:= @LIBMNL_CFLAGS@
 
 prefix			:= @prefix@
 
diff --git a/m4/ltp-libmnl.m4 b/m4/ltp-libmnl.m4
new file mode 100644
index 000000000..c6e357bae
--- /dev/null
+++ b/m4/ltp-libmnl.m4
@@ -0,0 +1,8 @@
+dnl SPDX-License-Identifier: GPL-2.0-or-later
+dnl Copyright (c) 2020 Petr Vorel <pvorel@suse.cz>
+
+AC_DEFUN([LTP_CHECK_LIBMNL], [
+    PKG_CHECK_MODULES([LIBMNL], [libmnl], [
+        AC_DEFINE([HAVE_LIBMNL], [1], [Define to 1 if you have libmnl library and headers])
+	], [have_libmnl=no])
+])
diff --git a/runtest/net_stress.route b/runtest/net_stress.route
index 4eff6766a..8755ef0be 100644
--- a/runtest/net_stress.route
+++ b/runtest/net_stress.route
@@ -2,11 +2,17 @@
 route4-change-dst route-change-dst.sh
 route4-change-gw route-change-gw.sh
 route4-change-if route-change-if.sh
+route4-change-netlink-dst route-change-netlink-dst.sh
+route4-change-netlink-gw route-change-netlink-gw.sh
+route4-change-netlink-if route-change-netlink-if.sh
 route4-redirect route4-redirect
 route4-rmmod route4-rmmod
 
 route6-change-dst route-change-dst.sh -6
 route6-change-gw route-change-gw.sh -6
 route6-change-if route-change-if.sh -6
+route6-change-netlink-dst route-change-netlink-dst.sh -6
+route6-change-netlink-gw route-change-netlink-gw.sh -6
+route6-change-netlink-if route-change-netlink-if.sh -6
 route6-redirect route6-redirect
 route6-rmmod route6-rmmod
diff --git a/testcases/network/stress/route/.gitignore b/testcases/network/stress/route/.gitignore
new file mode 100644
index 000000000..4ed647a55
--- /dev/null
+++ b/testcases/network/stress/route/.gitignore
@@ -0,0 +1 @@
+/route-change-netlink
diff --git a/testcases/network/stress/route/00_Descriptions.txt b/testcases/network/stress/route/00_Descriptions.txt
index e0e2e42c6..d148d51d9 100644
--- a/testcases/network/stress/route/00_Descriptions.txt
+++ b/testcases/network/stress/route/00_Descriptions.txt
@@ -1,36 +1,26 @@
 route{4,6}-change-dst
-	Verify the IPv4/IPv6 is not broken when ip command changes route
-	destination many times
+	Change IPv4/IPv6 route destination by ip command
 
 route{4,6}-change-gw
-	Verify the IPv4/IPv6 is not broken when ip command changes route
-	gateway many times
+	Change IPv4/IPv6 route gateway by ip command
 
 route{4,6}-change-if
-	Verify the IPv4/IPv6 is not broken when ip command changes route
-	interface many times
+	Change IPv4/IPv6 route interface by ip command
 
-route4-redirect01
-	Verify the kernel is not crashed when the IPv4 route is modified by
-	ICMP Redirects frequently
+route{4,6}-change-netlink-dst
+	Change IPv4/IPv6 route destination by Netlink API via libmnl
 
-route4-rmmod01
-	Verify the kernel is not crashed when IPv4 route is add by route command
-	then it is deleted by the removing network driver
+route{4,6}-change-netlink-gw
+	Change IPv4/IPv6 route gateway by Netlink API via libmnl
 
-route4-rmmod02
-	Verify the kernel is not crashed when IPv4 route is add by ip command
-	then it is deleted by the removing network driver
+route{4,6}-change-netlink-if
+	Change IPv4/IPv6 route interface by Netlink API via libmnl
 
+route{4,6}-redirect01
+	Change IPv4/IPv6 route by ICMP Redirects frequently
 
-route6-redirect01
-	Verify the kernel is not crashed when the IPv6 route is modified by
-	ICMP Redirects frequently
+route{4,6}-rmmod01
+	Add IPv4/IPv6 route by route command then delete it by the removing network driver
 
-route6-rmmod01
-	Verify the kernel is not crashed when IPv6 route is add by route command
-	then it is deleted by the removing network driver
-
-route6-rmmod02
-	Verify the kernel is not crashed when IPv6 route is add by ip command
-	then it is deleted by the removing network driver
+route{4,6}-rmmod02
+	Add IPv4/IPv6 route by ip command then delete it by the removing network driver
diff --git a/testcases/network/stress/route/Makefile b/testcases/network/stress/route/Makefile
index 2e5eaa2f2..b4e6409be 100644
--- a/testcases/network/stress/route/Makefile
+++ b/testcases/network/stress/route/Makefile
@@ -1,29 +1,15 @@
-#
-#    network/stress/route test suite Makefile.
-#
-#    Copyright (C) 2009, Cisco Systems Inc.
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License along
-#    with this program; if not, write to the Free Software Foundation, Inc.,
-#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (C) 2009, Cisco Systems Inc.
+# Copyright (c) Linux Test Project, 2006-2020
 # Ngie Cooper, October 2009
-#
 
 top_srcdir		?= ../../../..
 
-include $(top_srcdir)/include/mk/env_pre.mk
+include $(top_srcdir)/include/mk/testcases.mk
 
-INSTALL_TARGETS		:= route*
+INSTALL_TARGETS		+= route[4-6]-* *.sh
+
+route-change-netlink: CFLAGS += $(LIBMNL_CFLAGS)
+route-change-netlink: LDLIBS += $(LIBMNL_LIBS)
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/network/stress/route/route-change-dst.sh b/testcases/network/stress/route/route-change-dst.sh
index fff79fa6e..dcd2898a8 100755
--- a/testcases/network/stress/route/route-change-dst.sh
+++ b/testcases/network/stress/route/route-change-dst.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0-or-later
-# Copyright (c) 2019 Petr Vorel <pvorel@suse.cz>
+# Copyright (c) 2019-2020 Petr Vorel <pvorel@suse.cz>
 # Copyright (c) International Business Machines Corp., 2006
 # Author: Mitsuru Chinen <mitch@jp.ibm.com>
 # Rewrite into new shell API: Petr Vorel
@@ -8,8 +8,11 @@
 # Change route destination
 # lhost: 10.0.0.2, rhost: 10.23.x.1
 
+TST_SETUP="setup"
+TST_CLEANUP="route_cleanup"
 TST_TESTFUNC="test_dst"
 . route-lib.sh
+TST_CNT=$NS_TIMES
 
 setup()
 {
diff --git a/testcases/network/stress/route/route-change-gw.sh b/testcases/network/stress/route/route-change-gw.sh
index fc88ee0f3..cfbc331ac 100755
--- a/testcases/network/stress/route/route-change-gw.sh
+++ b/testcases/network/stress/route/route-change-gw.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0-or-later
-# Copyright (c) 2019 Petr Vorel <pvorel@suse.cz>
+# Copyright (c) 2019-2020 Petr Vorel <pvorel@suse.cz>
 # Copyright (c) International Business Machines Corp., 2006
 # Author: Mitsuru Chinen <mitch@jp.ibm.com>
 # Rewrite into new shell API: Petr Vorel
@@ -8,19 +8,11 @@
 # Change route gateway
 # lhost: 10.23.1.1, gw (on rhost): 10.23.1.x, rhost: 10.23.0.1
 
+TST_SETUP="setup_gw"
+TST_CLEANUP="route_cleanup"
 TST_TESTFUNC="test_gw"
 . route-lib.sh
-
-setup()
-{
-	tst_res TINFO "change IPv$TST_IPVER route gateway $NS_TIMES times"
-
-	rt="$(tst_ipaddr_un -p 0 0)"
-	lhost="$(tst_ipaddr_un 1 1)"
-	rhost="$(tst_ipaddr_un 0 1)"
-	tst_add_ipaddr -s -q -a $lhost
-	tst_add_ipaddr -s -q -a $rhost rhost
-}
+TST_CNT=$NS_TIMES
 
 test_gw()
 {
diff --git a/testcases/network/stress/route/route-change-if.sh b/testcases/network/stress/route/route-change-if.sh
index 77661a45e..a32f5f3d9 100755
--- a/testcases/network/stress/route/route-change-if.sh
+++ b/testcases/network/stress/route/route-change-if.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0-or-later
-# Copyright (c) 2019 Petr Vorel <pvorel@suse.cz>
+# Copyright (c) 2019-2020 Petr Vorel <pvorel@suse.cz>
 # Copyright (c) International Business Machines Corp., 2006
 # Author: Mitsuru Chinen <mitch@jp.ibm.com>
 # Rewrite into new shell API: Petr Vorel
@@ -8,57 +8,11 @@
 # Change route interface
 # lhost: 10.23.x.2, gw (on rhost): 10.23.x.1, rhost: 10.23.0.1, switching ifaces on lhost
 
+TST_SETUP="setup_if"
+TST_CLEANUP="cleanup_if"
 TST_TESTFUNC="test_if"
 . route-lib.sh
-TST_CLEANUP="cleanup"
-
-add_macvlan()
-{
-	local action="add"
-	local OPTIND
-	while getopts d opt; do
-		case "$opt" in
-		d) action="del";;
-		esac
-	done
-	shift $((OPTIND - 1))
-
-	local iface="$1"
-	local type="${2:-lhost}"
-
-	cmd="ip link $action $iface link $(tst_iface $type) type macvlan mode bridge"
-	if [ $type = "lhost" ]; then
-		ROD $cmd
-		[ "$action" = "add" ] || return
-		LHOST_IFACES="$LHOST_IFACES $iface"
-	else
-		tst_rhost_run -s -c "$cmd"
-		[ "$action" = "add" ] || return
-		RHOST_IFACES="$RHOST_IFACES $iface"
-	fi
-	tst_init_iface $type 1
-}
-
-setup()
-{
-	tst_res TINFO "change IPv$TST_IPVER route interface $NS_TIMES times"
-
-	rt="$(tst_ipaddr_un -p 0)"
-	rhost="$(tst_ipaddr_un 0 1)"
-	tst_add_ipaddr -s -q -a $rhost rhost
-
-	if [ $(tst_get_ifaces_cnt) -lt 2 ]; then
-		new_liface="ltp_mv2"
-		tst_res TINFO "2 or more local ifaces required, adding $new_liface"
-		add_macvlan $new_liface
-	fi
-
-	if [ $(tst_get_ifaces_cnt rhost) -lt 2 ]; then
-		new_riface="ltp_mv1"
-		tst_res TINFO "2 or more remote ifaces required, adding $new_riface"
-		add_macvlan $new_riface rhost
-	fi
-}
+TST_CNT=$NS_TIMES
 
 test_if()
 {
@@ -78,11 +32,4 @@ test_if()
 	tst_del_ipaddr -s -q -a $gw rhost $link_num
 }
 
-cleanup()
-{
-	[ "$new_liface" ] && add_macvlan -d $new_liface
-	[ "$new_riface" ] && add_macvlan -d $new_riface rhost
-	route_cleanup
-}
-
 tst_run
diff --git a/testcases/network/stress/route/route-change-netlink-dst.sh b/testcases/network/stress/route/route-change-netlink-dst.sh
new file mode 100755
index 000000000..de558949d
--- /dev/null
+++ b/testcases/network/stress/route/route-change-netlink-dst.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2020 Petr Vorel <pvorel@suse.cz>
+#
+# Change route destination via netlink
+# rhost: 10.23.x.1
+# lhost (iface set, but not specified in Netlink API): 10.0.0.2
+
+TST_SETUP="setup"
+TST_CLEANUP="route_cleanup"
+TST_TESTFUNC="test_netlink"
+. route-lib.sh
+
+setup()
+{
+	tst_res TINFO "change IPv$TST_IPVER route destination $NS_TIMES times"
+
+	local cnt=0
+	local gw rhost rhost_all rt
+
+	check_max_ip
+
+	while [ $cnt -lt $ROUTE_MAX_IP ]; do
+		rt="$(tst_ipaddr_un -p $cnt)"
+		rhost="$(tst_ipaddr_un $cnt 1)"
+		rhost_all="$rhost$IP_ADDR_DELIM$rhost_all"
+
+		tst_add_ipaddr -s -q -a $rhost rhost
+		ROD ip route add $rt dev $(tst_iface)
+		cnt=$((cnt+1))
+	done
+
+	ROUTE_CHANGE_NETLINK_PARAMS="-d $(tst_iface) -r '$rhost_all'"
+}
+
+tst_run
diff --git a/testcases/network/stress/route/route-change-netlink-gw.sh b/testcases/network/stress/route/route-change-netlink-gw.sh
new file mode 100755
index 000000000..46e544ef0
--- /dev/null
+++ b/testcases/network/stress/route/route-change-netlink-gw.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2020 Petr Vorel <pvorel@suse.cz>
+#
+# Change route gateway via netlink
+# gw (on rhost): 10.23.1.x, rhost: 10.23.0.1
+# lhost (iface set, but not specified in Netlink API): 10.23.1.1
+
+TST_SETUP="setup"
+TST_CLEANUP="route_cleanup"
+TST_TESTFUNC="test_netlink"
+. route-lib.sh
+
+setup()
+{
+	local cnt=0
+
+	check_max_ip
+	setup_gw
+
+	while [ $cnt -lt $ROUTE_MAX_IP ]; do
+		gw="$(tst_ipaddr_un -h 2,$max_ip_limit 1 $(($cnt + 1)))"
+		gw_all="$gw$IP_ADDR_DELIM$gw_all"
+		tst_add_ipaddr -s -q -a $gw rhost
+		cnt=$((cnt+1))
+	done
+
+	ROUTE_CHANGE_NETLINK_PARAMS="-d $(tst_iface) -g "$gw_all" -r $rhost"
+}
+
+tst_run
diff --git a/testcases/network/stress/route/route-change-netlink-if.sh b/testcases/network/stress/route/route-change-netlink-if.sh
new file mode 100755
index 000000000..ad4e3712c
--- /dev/null
+++ b/testcases/network/stress/route/route-change-netlink-if.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2020 Petr Vorel <pvorel@suse.cz>
+#
+# Change route interface
+# gw (on rhost): 10.23.x.1, rhost: 10.23.0.1, switching ifaces on lhost
+# lhost (iface set, but not specified in Netlink API): 10.23.x.2
+
+TST_SETUP="setup"
+TST_CLEANUP="cleanup_if"
+TST_TESTFUNC="test_netlink"
+. route-lib.sh
+
+setup()
+{
+	local gw gw_all iface iface_all
+	local cnt=0
+
+	setup_if
+
+	while [ $cnt -lt $(tst_get_ifaces_cnt) ]; do
+		gw="$(tst_ipaddr_un -n1 $cnt 1)"
+		iface="$(tst_iface lhost $cnt)"
+		lhost="$(tst_ipaddr_un -n1 $cnt 2)"
+
+		tst_add_ipaddr -s -q -a $lhost lhost $cnt
+		tst_add_ipaddr -s -q -a $gw rhost $cnt
+
+		gw_all="$gw$IP_ADDR_DELIM$gw_all"
+		iface_all="$iface$IP_ADDR_DELIM$iface_all"
+
+		cnt=$((cnt+1))
+	done
+
+	ROUTE_CHANGE_NETLINK_PARAMS="-d '$iface_all' -g '$gw_all' -r $rhost"
+}
+
+tst_run
diff --git a/testcases/network/stress/route/route-change-netlink.c b/testcases/network/stress/route/route-change-netlink.c
new file mode 100644
index 000000000..cb16491f2
--- /dev/null
+++ b/testcases/network/stress/route/route-change-netlink.c
@@ -0,0 +1,327 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2020 Petr Vorel <pvorel@suse.cz>
+ */
+
+#include "config.h"
+#include "tst_test.h"
+
+#ifdef HAVE_LIBMNL
+
+#include <string.h>
+
+#include <libmnl/libmnl.h>
+#include <linux/rtnetlink.h>
+#include <net/if.h>
+#include <netdb.h>
+#include <netinet/in.h>
+
+#include "tst_net.h"
+#include "tst_safe_net.h"
+#include "tst_safe_stdio.h"
+
+#define NUM_LOOPS_MAX 65535
+
+#define IP_ADDR_DELIM ','
+#define STR(x) #x
+#define CHR2STR(x) STR(x)
+
+static char *c_opt, *d_opt, *g_opt, *ipv6_opt, *p_opt, *r_opt;
+
+static int family = AF_INET;
+static int fd, num_loops, port;
+
+static unsigned int is_ipv6, max, prefix;
+
+static struct mnl_socket *nl;
+static struct addrinfo hints;
+
+struct iface {
+	unsigned int index;
+	struct iface *next;
+	char iface[IFNAMSIZ];
+};
+
+struct ip_addr {
+	struct addrinfo *ip;
+	struct ip_addr *next;
+	char ip_str[INET6_ADDRSTRLEN];
+};
+
+static struct ip_addr *dst, *gw, *rhost;
+static struct iface *iface;
+static unsigned int gw_len, iface_len, rhost_len;
+
+void save_iface(void **data, const char *item)
+{
+	struct iface *n = SAFE_MALLOC(sizeof(*n));
+	struct iface **list = (struct iface**)data;
+
+	strncpy(n->iface, item, sizeof(n->iface));
+	n->iface[sizeof(n->iface)-1] = '\0';
+
+	n->index = if_nametoindex(item);
+	if (!n->index)
+		tst_brk(TBROK, "if_nametoindex failed, '%s' not found", item);
+	n->next = *list;
+	*list = n;
+}
+
+void save_ip(void **data, const char *item)
+{
+	struct ip_addr *n = SAFE_MALLOC(sizeof(*n));
+	struct ip_addr **list = (struct ip_addr**)data;
+
+	strncpy(n->ip_str, item, sizeof(n->ip_str));
+	n->ip_str[sizeof(n->ip_str)-1] = '\0';
+
+	SAFE_GETADDRINFO(item, p_opt, &hints, &n->ip);
+	n->next = *list;
+	*list = n;
+}
+
+int save_item(void **list, char *item, void (*callback)(void **, const char *))
+{
+	int len = 0;
+
+	while ((item = strtok(item, CHR2STR(IP_ADDR_DELIM))) != NULL) {
+		callback(list, item);
+		item = NULL;
+		len++;
+	}
+
+	return len;
+}
+
+static void setup(void)
+{
+	prefix = 24;
+	if (ipv6_opt) {
+		family = AF_INET6;
+		is_ipv6 = 1;
+		prefix = 64;
+	}
+
+	if (!c_opt)
+		tst_brk(TBROK, "missing number of loops (-c num)");
+
+	if (!d_opt)
+		tst_brk(TBROK, "missing iface (-d iface)");
+
+	if (!p_opt)
+		tst_brk(TBROK, "missing rhost port (-p port)");
+
+	if (!r_opt)
+		tst_brk(TBROK, "missing rhost IP (-r IP)");
+
+	if (tst_parse_int(p_opt, &port, 1, 65535))
+		tst_brk(TBROK, "invalid rhost port '%s'", p_opt);
+
+	if (tst_parse_int(c_opt, &num_loops, 1, NUM_LOOPS_MAX)) {
+		num_loops = NUM_LOOPS_MAX;
+		tst_res(TWARN, "invalid number of loops (-c %s), using: %d",
+			c_opt, num_loops);
+	}
+
+	iface_len = save_item((void **)&iface, d_opt, save_iface);
+	rhost_len = save_item((void **)&rhost, r_opt, save_ip);
+
+	max = MAX(iface_len, rhost_len);
+	if (iface_len > 1 && rhost_len > 1 && iface_len != max)
+		tst_brk(TBROK, "-d specifies more NICs and -r more IPs, they need to have the same count");
+
+	if (g_opt) {
+		gw_len = save_item((void **)&gw, g_opt, save_ip);
+		max = MAX(gw_len, max);
+
+		if (gw_len > 1 && max > 1 && gw_len != max) {
+			if (iface_len == max)
+				tst_brk(TBROK, "-d specifies more NICs and -r more IPs, they need to have the same count");
+			else
+				tst_brk(TBROK, "-g and -r specify more IP, they need to have the same count");
+		}
+	}
+
+	struct ip_addr *p_rhost = rhost;
+
+	while (p_rhost) {
+		char dst_str[INET6_ADDRSTRLEN];
+
+		if (!strncpy(dst_str, p_rhost->ip_str, sizeof(dst_str)))
+			tst_brk(TBROK, "failed copy IP '%s'", p_rhost->ip_str);
+		dst_str[strlen(p_rhost->ip_str)-1] = '\0';
+
+		if (!strcat(dst_str, "0"))
+			tst_brk(TBROK, "strcat failed: '%s'", dst_str);
+
+		save_ip((void **)&dst, dst_str);
+		p_rhost = p_rhost->next;
+	}
+
+	fd = SAFE_SOCKET(family, SOCK_DGRAM, IPPROTO_UDP);
+
+	memset(&hints, 0, sizeof(struct addrinfo));
+	hints.ai_family = family;
+	hints.ai_socktype = SOCK_DGRAM;
+	hints.ai_flags = 0;
+	hints.ai_protocol = 0;
+	hints.ai_addr = INADDR_ANY;
+}
+
+static void cleanup(void)
+{
+	if (fd > 0)
+		close(fd);
+
+	if (nl)
+		mnl_socket_close(nl);
+}
+
+static void brk_on_route_error(const char *msg, int iface,
+			       struct sockaddr *dst, struct sockaddr *gw, int type)
+{
+	char dst_str[INET6_ADDRSTRLEN], gw_str[INET6_ADDRSTRLEN];
+	tst_sock_addr(dst, sizeof(dst), dst_str, sizeof(dst_str));
+	if (gw)
+		tst_sock_addr(gw, sizeof(gw), gw_str, sizeof(gw_str));
+
+	tst_res(TINFO, "type: %s, iface: %d, dst: %s, gw: %s",
+		type == RTM_NEWROUTE ? "RTM_NEWROUTE" : "RTM_DELROUTE",
+		iface, dst_str, gw ? gw_str : "null");
+	tst_brk(TBROK, "%s failed (errno=%d): %s", msg, errno, strerror(errno));
+}
+
+static void rtnl_route(int iface, struct addrinfo *dst, struct addrinfo *gw,
+		       int type)
+{
+	struct mnl_socket *nl;
+	char buf[MNL_SOCKET_BUFFER_SIZE];
+	struct nlmsghdr *nlh;
+	struct rtmsg *rtm;
+	uint32_t seq, portid;
+	struct in6_addr dst_in6, gw_in6;
+	in_addr_t dst_ip, gw_ip;
+	int ret;
+
+	nlh = mnl_nlmsg_put_header(buf);
+	nlh->nlmsg_type	= type;
+
+	nlh->nlmsg_flags = NLM_F_ACK;
+	if (type == RTM_NEWROUTE)
+		nlh->nlmsg_flags |= NLM_F_REQUEST | NLM_F_CREATE | NLM_F_REPLACE;
+
+	nlh->nlmsg_seq = seq = time(NULL);
+
+	rtm = mnl_nlmsg_put_extra_header(nlh, sizeof(struct rtmsg));
+	rtm->rtm_family = family;
+	rtm->rtm_dst_len = prefix;
+	rtm->rtm_src_len = 0;
+	rtm->rtm_tos = 0;
+	rtm->rtm_protocol = RTPROT_STATIC;
+	rtm->rtm_table = RT_TABLE_MAIN;
+	rtm->rtm_type = RTN_UNICAST;
+	rtm->rtm_scope = gw ? RT_SCOPE_UNIVERSE : RT_SCOPE_LINK;
+	rtm->rtm_flags = 0;
+
+	if (is_ipv6) {
+		dst_in6 = ((struct sockaddr_in6 *)dst->ai_addr)->sin6_addr;
+		mnl_attr_put(nlh, RTA_DST, sizeof(struct in6_addr), &dst_in6);
+	} else {
+		dst_ip = ((struct sockaddr_in *)dst->ai_addr)->sin_addr.s_addr;
+		mnl_attr_put_u32(nlh, RTA_DST, dst_ip);
+	}
+
+	mnl_attr_put_u32(nlh, RTA_OIF, iface);
+
+	if (gw) {
+		if (is_ipv6) {
+			gw_in6 = ((struct sockaddr_in6 *)gw->ai_addr)->sin6_addr;
+			mnl_attr_put(nlh, RTA_GATEWAY, sizeof(struct in6_addr), &gw_in6);
+		} else {
+			gw_ip = ((struct sockaddr_in *)gw->ai_addr)->sin_addr.s_addr;
+			mnl_attr_put_u32(nlh, RTA_GATEWAY, gw_ip);
+		}
+	}
+
+	nl = mnl_socket_open(NETLINK_ROUTE);
+	if (nl == NULL)
+		brk_on_route_error("mnl_socket_open", iface, dst->ai_addr, gw ?
+				   gw->ai_addr : NULL, type);
+
+	if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0)
+		brk_on_route_error("mnl_socket_bind", iface, dst->ai_addr, gw ?
+				   gw->ai_addr : NULL, type);
+
+	portid = mnl_socket_get_portid(nl);
+
+	if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0)
+		brk_on_route_error("mnl_socket_sendto", iface, dst->ai_addr, gw
+				   ? gw->ai_addr : NULL, type);
+
+	ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
+	if (ret < 0)
+		brk_on_route_error("mnl_socket_recvfrom", iface, dst->ai_addr,
+				   gw ? gw->ai_addr : NULL, type);
+
+	ret = mnl_cb_run(buf, ret, seq, portid, NULL, NULL);
+	if (ret < 0)
+		brk_on_route_error("mnl_cb_run", iface, dst->ai_addr, gw ?
+				   gw->ai_addr : NULL, type);
+
+	mnl_socket_close(nl);
+}
+
+static void send_udp(struct addrinfo *rhost_addrinfo)
+{
+	const char *msg = "foo";
+
+	SAFE_SENDTO(1, fd, msg, sizeof(msg), MSG_CONFIRM,
+		rhost_addrinfo->ai_addr, rhost_addrinfo->ai_addrlen);
+}
+
+static void run(void)
+{
+	int i;
+
+	tst_res(TINFO, "adding and deleting route %d times", num_loops);
+
+	struct ip_addr *p_dst = dst, *p_gw = gw, *p_rhost = rhost;
+	struct iface *p_iface = iface;
+
+	for (i = 0; i < num_loops; i++) {
+		rtnl_route(p_iface->index, p_dst->ip, gw ? p_gw->ip : NULL,
+			   RTM_NEWROUTE);
+		send_udp(p_rhost->ip);
+		rtnl_route(p_iface->index, p_dst->ip, gw ? p_gw->ip : NULL,
+			   RTM_DELROUTE);
+
+		if (gw)
+			p_gw = p_gw->next ?: gw;
+		p_dst = p_dst->next ?: dst;
+		p_iface = p_iface->next ?: iface;
+		p_rhost = p_rhost->next ?: rhost;
+	}
+
+	tst_res(TPASS, "routes created and deleted");
+}
+
+static struct tst_option options[] = {
+	{"6", &ipv6_opt, "-6       Use IPv6 (default is IPv4)"},
+	{"c:", &c_opt, "-c x     Num loops (mandatory)"},
+	{"d:", &d_opt, "-d iface Interface to work on (mandatory)"},
+	{"g:", &g_opt, "-g x     Gateway IP"},
+	{"p:", &p_opt, "-p port  Rhost port (mandatory)"},
+	{"r:", &r_opt, "-r x     Rhost IP (mandatory)\n\n-g, -r IP parameter can contain more IP, separated by "
+		CHR2STR(IP_ADDR_DELIM)},
+	{NULL, NULL, NULL}
+};
+static struct tst_test test = {
+	.test_all = run,
+	.needs_root = 1,
+	.setup = setup,
+	.cleanup = cleanup,
+	.options = options,
+};
+#else
+	TST_TEST_TCONF("libmnl library and headers are required");
+#endif /* HAVE_LIBMNL */
diff --git a/testcases/network/stress/route/route-lib.sh b/testcases/network/stress/route/route-lib.sh
index 4afbe6323..51803056a 100644
--- a/testcases/network/stress/route/route-lib.sh
+++ b/testcases/network/stress/route/route-lib.sh
@@ -1,17 +1,114 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0-or-later
-# Copyright (c) 2019 Petr Vorel <pvorel@suse.cz>
+# Copyright (c) 2019-2020 Petr Vorel <pvorel@suse.cz>
 
 TST_NEEDS_ROOT=1
-TST_SETUP="setup"
-TST_CLEANUP="route_cleanup"
 TST_NEEDS_CMDS="ip"
-TST_CNT=$NS_TIMES
-
 . tst_net.sh
 
+ROUTE_RHOST_PORT=${ROUTE_RHOST_PORT:-65535}
+ROUTE_MAX_IP=${ROUTE_MAX_IP:-5}
+
+IP_ADDR_DELIM=','
+
+add_macvlan()
+{
+	local action="add"
+	local OPTIND
+	while getopts d opt; do
+		case "$opt" in
+		d) action="del";;
+		esac
+	done
+	shift $((OPTIND - 1))
+
+	local iface="$1"
+	local type="${2:-lhost}"
+
+	cmd="ip link $action $iface link $(tst_iface $type) type macvlan mode bridge"
+	if [ $type = "lhost" ]; then
+		ROD $cmd
+		[ "$action" = "add" ] || return
+		LHOST_IFACES="$LHOST_IFACES $iface"
+	else
+		tst_rhost_run -s -c "$cmd"
+		[ "$action" = "add" ] || return
+		RHOST_IFACES="$RHOST_IFACES $iface"
+	fi
+	tst_init_iface $type 1
+}
+
+check_max_ip()
+{
+	local max_ip_limit=254
+	[ "$TST_IPV6" ] && max_ip_limit=65534
+
+	tst_is_int "$ROUTE_MAX_IP" || tst_brk TBROK "\$ROUTE_MAX_IP not int ($ROUTE_MAX_IP)"
+	[ $ROUTE_MAX_IP -gt $max_ip_limit ] && ROUTE_MAX_IP=$max_ip_limit
+	[ $ROUTE_MAX_IP -gt $NS_TIMES ] && ROUTE_MAX_IP=$NS_TIMES
+}
+
+cleanup_if()
+{
+	[ "$new_liface" ] && add_macvlan -d $new_liface
+	[ "$new_riface" ] && add_macvlan -d $new_riface rhost
+	route_cleanup
+}
+
 route_cleanup()
 {
 	tst_restore_ipaddr
 	tst_restore_ipaddr rhost
 }
+
+setup_gw()
+{
+	tst_res TINFO "change IPv$TST_IPVER route gateway $NS_TIMES times"
+
+	rt="$(tst_ipaddr_un -p 0 0)"
+	lhost="$(tst_ipaddr_un 1 1)"
+	rhost="$(tst_ipaddr_un 0 1)"
+	tst_add_ipaddr -s -q -a $lhost
+	tst_add_ipaddr -s -q -a $rhost rhost
+}
+
+setup_if()
+{
+	tst_res TINFO "change IPv$TST_IPVER route interface $NS_TIMES times"
+
+	rt="$(tst_ipaddr_un -p 0)"
+	rhost="$(tst_ipaddr_un 0 1)"
+	tst_add_ipaddr -s -q -a $rhost rhost
+
+	if [ $(tst_get_ifaces_cnt) -lt 2 ]; then
+		new_liface="ltp_mv2"
+		tst_res TINFO "2 or more local ifaces required, adding '$new_liface'"
+		add_macvlan $new_liface
+	fi
+
+	if [ $(tst_get_ifaces_cnt rhost) -lt 2 ]; then
+		new_riface="ltp_mv1"
+		tst_res TINFO "2 or more remote ifaces required, adding '$new_riface'"
+		add_macvlan $new_riface rhost
+	fi
+}
+
+test_netlink()
+{
+	local ret=0
+	local cmd ip_flag
+	[ "$TST_IPV6" ] && ip_flag="-6"
+
+	cmd="route-change-netlink -c $NS_TIMES $ip_flag -p $ROUTE_RHOST_PORT $ROUTE_CHANGE_NETLINK_PARAMS"
+	tst_res TINFO "running $cmd"
+	$cmd || ret=$?
+	if [ "$ret" -ne 0 ]; then
+		[ $((ret & 3)) -ne 0 ] && \
+			tst_brk TFAIL "route-change-netlink failed"
+		[ $((ret & 32)) -ne 0 ] && \
+			tst_brk TCONF "not supported configuration"
+		[ $((ret & 4)) -ne 0 ] && \
+			tst_res TWARN "route-change-netlink has warnings"
+	fi
+	tst_res TPASS "route-change-netlink passed"
+}
diff --git a/travis/debian.cross-compile.sh b/travis/debian.cross-compile.sh
index 67307d1e1..08c3805aa 100755
--- a/travis/debian.cross-compile.sh
+++ b/travis/debian.cross-compile.sh
@@ -20,4 +20,5 @@ apt update
 apt install -y --no-install-recommends \
 	gcc-${gcc_arch}-linux-gnu \
 	libc6-dev-${ARCH}-cross \
+	libmnl-dev:$ARCH \
 	libtirpc-dev:$ARCH
diff --git a/travis/debian.sh b/travis/debian.sh
index 97fa91a0d..b759a9576 100755
--- a/travis/debian.sh
+++ b/travis/debian.sh
@@ -28,6 +28,7 @@ apt install -y --no-install-recommends \
 	libkeyutils-dev \
 	libkeyutils1 \
 	libmm-dev \
+	libmnl-dev \
 	libnuma-dev \
 	libnuma1 \
 	libselinux1-dev \
diff --git a/travis/fedora.sh b/travis/fedora.sh
index d68e7573e..990a84daf 100755
--- a/travis/fedora.sh
+++ b/travis/fedora.sh
@@ -13,3 +13,6 @@ yum -y install \
 	libtirpc-devel \
 	pkg-config \
 	redhat-lsb-core
+
+# CentOS 8 doesn't have libmnl-devel
+yum -y install libmnl-devel || yum -y install libmnl
diff --git a/travis/tumbleweed.sh b/travis/tumbleweed.sh
index 708a26f48..4d5e9da79 100755
--- a/travis/tumbleweed.sh
+++ b/travis/tumbleweed.sh
@@ -15,6 +15,7 @@ zypper --non-interactive install --force-resolution --no-recommends \
 	libacl-devel \
 	libaio-devel \
 	libcap-devel \
+	libmnl-devel \
 	libnuma-devel \
 	libopenssl-devel \
 	libselinux-devel \
-- 
2.26.2


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

* [LTP] [PATCH v6 3/3] route: Increase default loop values
  2020-04-29 19:23 [LTP] [PATCH v6 0/3] Route tests using netlink API (dst,gw,if) Petr Vorel
  2020-04-29 19:23 ` [LTP] [PATCH v6 1/3] net: Add SAFE_GETADDRINFO() Petr Vorel
  2020-04-29 19:23 ` [LTP] [PATCH v6 2/3] net/route: Add netlink based route change tests Petr Vorel
@ 2020-04-29 19:23 ` Petr Vorel
  2020-05-06 14:18   ` Alexey Kodanev
  2 siblings, 1 reply; 9+ messages in thread
From: Petr Vorel @ 2020-04-29 19:23 UTC (permalink / raw)
  To: ltp

by introducing $ROUTE_CHANGE_IP for shell based tests (only these
rewritten into new shell API) and $ROUTE_CHANGE_NETLINK with C Netlink
API based tests.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 testcases/lib/tst_net.sh                               |  2 ++
 testcases/network/stress/route/route-change-dst.sh     |  4 ++--
 testcases/network/stress/route/route-change-gw.sh      | 10 ++++++++--
 testcases/network/stress/route/route-change-if.sh      | 10 ++++++++--
 .../network/stress/route/route-change-netlink-dst.sh   |  2 +-
 .../network/stress/route/route-change-netlink-gw.sh    |  2 ++
 .../network/stress/route/route-change-netlink-if.sh    |  1 +
 testcases/network/stress/route/route-lib.sh            |  8 ++------
 8 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/testcases/lib/tst_net.sh b/testcases/lib/tst_net.sh
index 1ec03c738..011b62267 100644
--- a/testcases/lib/tst_net.sh
+++ b/testcases/lib/tst_net.sh
@@ -913,6 +913,8 @@ export UPLOAD_BIGFILESIZE="${UPLOAD_BIGFILESIZE:-2147483647}"
 export UPLOAD_REGFILESIZE="${UPLOAD_REGFILESIZE:-1024}"
 export MCASTNUM_NORMAL="${MCASTNUM_NORMAL:-20}"
 export MCASTNUM_HEAVY="${MCASTNUM_HEAVY:-4000}"
+export ROUTE_CHANGE_IP="${ROUTE_CHANGE_IP:-100}"
+export ROUTE_CHANGE_NETLINK="${ROUTE_CHANGE_NETLINK:-10000}"
 
 # Warning: make sure to set valid interface names and IP addresses below.
 # Set names for test interfaces, e.g. "eth0 eth1"
diff --git a/testcases/network/stress/route/route-change-dst.sh b/testcases/network/stress/route/route-change-dst.sh
index dcd2898a8..2d88b5f73 100755
--- a/testcases/network/stress/route/route-change-dst.sh
+++ b/testcases/network/stress/route/route-change-dst.sh
@@ -12,11 +12,11 @@ TST_SETUP="setup"
 TST_CLEANUP="route_cleanup"
 TST_TESTFUNC="test_dst"
 . route-lib.sh
-TST_CNT=$NS_TIMES
+TST_CNT=$ROUTE_CHANGE_IP
 
 setup()
 {
-	tst_res TINFO "change IPv$TST_IPVER route destination $NS_TIMES times"
+	tst_res TINFO "change IPv$TST_IPVER route destination $ROUTE_CHANGE_IP times"
 }
 
 test_dst()
diff --git a/testcases/network/stress/route/route-change-gw.sh b/testcases/network/stress/route/route-change-gw.sh
index cfbc331ac..6c650befd 100755
--- a/testcases/network/stress/route/route-change-gw.sh
+++ b/testcases/network/stress/route/route-change-gw.sh
@@ -8,11 +8,17 @@
 # Change route gateway
 # lhost: 10.23.1.1, gw (on rhost): 10.23.1.x, rhost: 10.23.0.1
 
-TST_SETUP="setup_gw"
+TST_SETUP="setup"
 TST_CLEANUP="route_cleanup"
 TST_TESTFUNC="test_gw"
 . route-lib.sh
-TST_CNT=$NS_TIMES
+TST_CNT=$ROUTE_CHANGE_IP
+
+setup()
+{
+	tst_res TINFO "change IPv$TST_IPVER route gateway $ROUTE_CHANGE_IP times"
+	setup_gw
+}
 
 test_gw()
 {
diff --git a/testcases/network/stress/route/route-change-if.sh b/testcases/network/stress/route/route-change-if.sh
index a32f5f3d9..7e9c15fe4 100755
--- a/testcases/network/stress/route/route-change-if.sh
+++ b/testcases/network/stress/route/route-change-if.sh
@@ -8,11 +8,17 @@
 # Change route interface
 # lhost: 10.23.x.2, gw (on rhost): 10.23.x.1, rhost: 10.23.0.1, switching ifaces on lhost
 
-TST_SETUP="setup_if"
+TST_SETUP="setup"
 TST_CLEANUP="cleanup_if"
 TST_TESTFUNC="test_if"
 . route-lib.sh
-TST_CNT=$NS_TIMES
+TST_CNT=$ROUTE_CHANGE_IP
+
+setup()
+{
+	tst_res TINFO "change IPv$TST_IPVER route interface $ROUTE_CHANGE_IP times"
+	setup_if
+}
 
 test_if()
 {
diff --git a/testcases/network/stress/route/route-change-netlink-dst.sh b/testcases/network/stress/route/route-change-netlink-dst.sh
index de558949d..0740d0963 100755
--- a/testcases/network/stress/route/route-change-netlink-dst.sh
+++ b/testcases/network/stress/route/route-change-netlink-dst.sh
@@ -13,7 +13,7 @@ TST_TESTFUNC="test_netlink"
 
 setup()
 {
-	tst_res TINFO "change IPv$TST_IPVER route destination $NS_TIMES times"
+	tst_res TINFO "change IPv$TST_IPVER route destination $ROUTE_CHANGE_NETLINK times"
 
 	local cnt=0
 	local gw rhost rhost_all rt
diff --git a/testcases/network/stress/route/route-change-netlink-gw.sh b/testcases/network/stress/route/route-change-netlink-gw.sh
index 46e544ef0..3119a1b31 100755
--- a/testcases/network/stress/route/route-change-netlink-gw.sh
+++ b/testcases/network/stress/route/route-change-netlink-gw.sh
@@ -15,6 +15,8 @@ setup()
 {
 	local cnt=0
 
+	tst_res TINFO "change IPv$TST_IPVER route gateway $ROUTE_CHANGE_NETLINK times"
+
 	check_max_ip
 	setup_gw
 
diff --git a/testcases/network/stress/route/route-change-netlink-if.sh b/testcases/network/stress/route/route-change-netlink-if.sh
index ad4e3712c..d1e64a40e 100755
--- a/testcases/network/stress/route/route-change-netlink-if.sh
+++ b/testcases/network/stress/route/route-change-netlink-if.sh
@@ -16,6 +16,7 @@ setup()
 	local gw gw_all iface iface_all
 	local cnt=0
 
+	tst_res TINFO "change IPv$TST_IPVER route interface $ROUTE_CHANGE_NETLINK times"
 	setup_if
 
 	while [ $cnt -lt $(tst_get_ifaces_cnt) ]; do
diff --git a/testcases/network/stress/route/route-lib.sh b/testcases/network/stress/route/route-lib.sh
index 51803056a..a5bb96c12 100644
--- a/testcases/network/stress/route/route-lib.sh
+++ b/testcases/network/stress/route/route-lib.sh
@@ -45,7 +45,7 @@ check_max_ip()
 
 	tst_is_int "$ROUTE_MAX_IP" || tst_brk TBROK "\$ROUTE_MAX_IP not int ($ROUTE_MAX_IP)"
 	[ $ROUTE_MAX_IP -gt $max_ip_limit ] && ROUTE_MAX_IP=$max_ip_limit
-	[ $ROUTE_MAX_IP -gt $NS_TIMES ] && ROUTE_MAX_IP=$NS_TIMES
+	[ $ROUTE_MAX_IP -gt $ROUTE_CHANGE_NETLINK ] && ROUTE_MAX_IP=$ROUTE_CHANGE_NETLINK
 }
 
 cleanup_if()
@@ -63,8 +63,6 @@ route_cleanup()
 
 setup_gw()
 {
-	tst_res TINFO "change IPv$TST_IPVER route gateway $NS_TIMES times"
-
 	rt="$(tst_ipaddr_un -p 0 0)"
 	lhost="$(tst_ipaddr_un 1 1)"
 	rhost="$(tst_ipaddr_un 0 1)"
@@ -74,8 +72,6 @@ setup_gw()
 
 setup_if()
 {
-	tst_res TINFO "change IPv$TST_IPVER route interface $NS_TIMES times"
-
 	rt="$(tst_ipaddr_un -p 0)"
 	rhost="$(tst_ipaddr_un 0 1)"
 	tst_add_ipaddr -s -q -a $rhost rhost
@@ -99,7 +95,7 @@ test_netlink()
 	local cmd ip_flag
 	[ "$TST_IPV6" ] && ip_flag="-6"
 
-	cmd="route-change-netlink -c $NS_TIMES $ip_flag -p $ROUTE_RHOST_PORT $ROUTE_CHANGE_NETLINK_PARAMS"
+	cmd="route-change-netlink -c $ROUTE_CHANGE_NETLINK $ip_flag -p $ROUTE_RHOST_PORT $ROUTE_CHANGE_NETLINK_PARAMS"
 	tst_res TINFO "running $cmd"
 	$cmd || ret=$?
 	if [ "$ret" -ne 0 ]; then
-- 
2.26.2


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

* [LTP] [PATCH v6 3/3] route: Increase default loop values
  2020-04-29 19:23 ` [LTP] [PATCH v6 3/3] route: Increase default loop values Petr Vorel
@ 2020-05-06 14:18   ` Alexey Kodanev
  2020-05-06 15:06     ` Petr Vorel
  0 siblings, 1 reply; 9+ messages in thread
From: Alexey Kodanev @ 2020-05-06 14:18 UTC (permalink / raw)
  To: ltp

On 29.04.2020 22:23, Petr Vorel wrote:
> by introducing $ROUTE_CHANGE_IP for shell based tests (only these
> rewritten into new shell API) and $ROUTE_CHANGE_NETLINK with C Netlink
> API based tests.
> 
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
>  testcases/lib/tst_net.sh                               |  2 ++
>  testcases/network/stress/route/route-change-dst.sh     |  4 ++--
>  testcases/network/stress/route/route-change-gw.sh      | 10 ++++++++--
>  testcases/network/stress/route/route-change-if.sh      | 10 ++++++++--
>  .../network/stress/route/route-change-netlink-dst.sh   |  2 +-
>  .../network/stress/route/route-change-netlink-gw.sh    |  2 ++
>  .../network/stress/route/route-change-netlink-if.sh    |  1 +
>  testcases/network/stress/route/route-lib.sh            |  8 ++------
>  8 files changed, 26 insertions(+), 13 deletions(-)
> 
> diff --git a/testcases/lib/tst_net.sh b/testcases/lib/tst_net.sh
> index 1ec03c738..011b62267 100644
> --- a/testcases/lib/tst_net.sh
> +++ b/testcases/lib/tst_net.sh
> @@ -913,6 +913,8 @@ export UPLOAD_BIGFILESIZE="${UPLOAD_BIGFILESIZE:-2147483647}"
>  export UPLOAD_REGFILESIZE="${UPLOAD_REGFILESIZE:-1024}"
>  export MCASTNUM_NORMAL="${MCASTNUM_NORMAL:-20}"
>  export MCASTNUM_HEAVY="${MCASTNUM_HEAVY:-4000}"
> +export ROUTE_CHANGE_IP="${ROUTE_CHANGE_IP:-100}"
> +export ROUTE_CHANGE_NETLINK="${ROUTE_CHANGE_NETLINK:-10000}"

Hi Petr,

The changes are fine.

Perhaps for further improvements, ROUTE_CHANGE_NETLINK is limited by
"NUM_LOOPS_MAX 65535", it looks unnecessary. Can we limit the setup
only and iterate (adding and deleting) from the beginning or use -i
option with -c?

>  
>  # Warning: make sure to set valid interface names and IP addresses below.
>  # Set names for test interfaces, e.g. "eth0 eth1"
> diff --git a/testcases/network/stress/route/route-change-dst.sh b/testcases/network/stress/route/route-change-dst.sh
> index dcd2898a8..2d88b5f73 100755
> --- a/testcases/network/stress/route/route-change-dst.sh
> +++ b/testcases/network/stress/route/route-change-dst.sh
> @@ -12,11 +12,11 @@ TST_SETUP="setup"
>  TST_CLEANUP="route_cleanup"
>  TST_TESTFUNC="test_dst"
>  . route-lib.sh
> -TST_CNT=$NS_TIMES
> +TST_CNT=$ROUTE_CHANGE_IP
>  
>  setup()
>  {
> -	tst_res TINFO "change IPv$TST_IPVER route destination $NS_TIMES times"
> +	tst_res TINFO "change IPv$TST_IPVER route destination $ROUTE_CHANGE_IP times"
>  }
>  
>  test_dst()
> diff --git a/testcases/network/stress/route/route-change-gw.sh b/testcases/network/stress/route/route-change-gw.sh
> index cfbc331ac..6c650befd 100755
> --- a/testcases/network/stress/route/route-change-gw.sh
> +++ b/testcases/network/stress/route/route-change-gw.sh
> @@ -8,11 +8,17 @@
>  # Change route gateway
>  # lhost: 10.23.1.1, gw (on rhost): 10.23.1.x, rhost: 10.23.0.1
>  
> -TST_SETUP="setup_gw"
> +TST_SETUP="setup"
>  TST_CLEANUP="route_cleanup"
>  TST_TESTFUNC="test_gw"
>  . route-lib.sh
> -TST_CNT=$NS_TIMES
> +TST_CNT=$ROUTE_CHANGE_IP
> +
> +setup()
> +{
> +	tst_res TINFO "change IPv$TST_IPVER route gateway $ROUTE_CHANGE_IP times"
> +	setup_gw
> +}
>  
>  test_gw()
>  {
> diff --git a/testcases/network/stress/route/route-change-if.sh b/testcases/network/stress/route/route-change-if.sh
> index a32f5f3d9..7e9c15fe4 100755
> --- a/testcases/network/stress/route/route-change-if.sh
> +++ b/testcases/network/stress/route/route-change-if.sh
> @@ -8,11 +8,17 @@
>  # Change route interface
>  # lhost: 10.23.x.2, gw (on rhost): 10.23.x.1, rhost: 10.23.0.1, switching ifaces on lhost
>  
> -TST_SETUP="setup_if"
> +TST_SETUP="setup"
>  TST_CLEANUP="cleanup_if"
>  TST_TESTFUNC="test_if"
>  . route-lib.sh
> -TST_CNT=$NS_TIMES
> +TST_CNT=$ROUTE_CHANGE_IP
> +
> +setup()
> +{
> +	tst_res TINFO "change IPv$TST_IPVER route interface $ROUTE_CHANGE_IP times"
> +	setup_if
> +}
>  
>  test_if()
>  {
> diff --git a/testcases/network/stress/route/route-change-netlink-dst.sh b/testcases/network/stress/route/route-change-netlink-dst.sh
> index de558949d..0740d0963 100755
> --- a/testcases/network/stress/route/route-change-netlink-dst.sh
> +++ b/testcases/network/stress/route/route-change-netlink-dst.sh
> @@ -13,7 +13,7 @@ TST_TESTFUNC="test_netlink"
>  
>  setup()
>  {
> -	tst_res TINFO "change IPv$TST_IPVER route destination $NS_TIMES times"
> +	tst_res TINFO "change IPv$TST_IPVER route destination $ROUTE_CHANGE_NETLINK times"
>  
>  	local cnt=0
>  	local gw rhost rhost_all rt
> diff --git a/testcases/network/stress/route/route-change-netlink-gw.sh b/testcases/network/stress/route/route-change-netlink-gw.sh
> index 46e544ef0..3119a1b31 100755
> --- a/testcases/network/stress/route/route-change-netlink-gw.sh
> +++ b/testcases/network/stress/route/route-change-netlink-gw.sh
> @@ -15,6 +15,8 @@ setup()
>  {
>  	local cnt=0
>  
> +	tst_res TINFO "change IPv$TST_IPVER route gateway $ROUTE_CHANGE_NETLINK times"
> +
>  	check_max_ip
>  	setup_gw
>  
> diff --git a/testcases/network/stress/route/route-change-netlink-if.sh b/testcases/network/stress/route/route-change-netlink-if.sh
> index ad4e3712c..d1e64a40e 100755
> --- a/testcases/network/stress/route/route-change-netlink-if.sh
> +++ b/testcases/network/stress/route/route-change-netlink-if.sh
> @@ -16,6 +16,7 @@ setup()
>  	local gw gw_all iface iface_all
>  	local cnt=0
>  
> +	tst_res TINFO "change IPv$TST_IPVER route interface $ROUTE_CHANGE_NETLINK times"
>  	setup_if
>  
>  	while [ $cnt -lt $(tst_get_ifaces_cnt) ]; do
> diff --git a/testcases/network/stress/route/route-lib.sh b/testcases/network/stress/route/route-lib.sh
> index 51803056a..a5bb96c12 100644
> --- a/testcases/network/stress/route/route-lib.sh
> +++ b/testcases/network/stress/route/route-lib.sh
> @@ -45,7 +45,7 @@ check_max_ip()
>  
>  	tst_is_int "$ROUTE_MAX_IP" || tst_brk TBROK "\$ROUTE_MAX_IP not int ($ROUTE_MAX_IP)"
>  	[ $ROUTE_MAX_IP -gt $max_ip_limit ] && ROUTE_MAX_IP=$max_ip_limit
> -	[ $ROUTE_MAX_IP -gt $NS_TIMES ] && ROUTE_MAX_IP=$NS_TIMES
> +	[ $ROUTE_MAX_IP -gt $ROUTE_CHANGE_NETLINK ] && ROUTE_MAX_IP=$ROUTE_CHANGE_NETLINK
>  }
>  
>  cleanup_if()
> @@ -63,8 +63,6 @@ route_cleanup()
>  
>  setup_gw()
>  {
> -	tst_res TINFO "change IPv$TST_IPVER route gateway $NS_TIMES times"
> -
>  	rt="$(tst_ipaddr_un -p 0 0)"
>  	lhost="$(tst_ipaddr_un 1 1)"
>  	rhost="$(tst_ipaddr_un 0 1)"
> @@ -74,8 +72,6 @@ setup_gw()
>  
>  setup_if()
>  {
> -	tst_res TINFO "change IPv$TST_IPVER route interface $NS_TIMES times"
> -
>  	rt="$(tst_ipaddr_un -p 0)"
>  	rhost="$(tst_ipaddr_un 0 1)"
>  	tst_add_ipaddr -s -q -a $rhost rhost
> @@ -99,7 +95,7 @@ test_netlink()
>  	local cmd ip_flag
>  	[ "$TST_IPV6" ] && ip_flag="-6"
>  
> -	cmd="route-change-netlink -c $NS_TIMES $ip_flag -p $ROUTE_RHOST_PORT $ROUTE_CHANGE_NETLINK_PARAMS"
> +	cmd="route-change-netlink -c $ROUTE_CHANGE_NETLINK $ip_flag -p $ROUTE_RHOST_PORT $ROUTE_CHANGE_NETLINK_PARAMS"
>  	tst_res TINFO "running $cmd"
>  	$cmd || ret=$?
>  	if [ "$ret" -ne 0 ]; then
> 


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

* [LTP] [PATCH v6 3/3] route: Increase default loop values
  2020-05-06 14:18   ` Alexey Kodanev
@ 2020-05-06 15:06     ` Petr Vorel
  2020-05-06 15:52       ` Alexey Kodanev
  0 siblings, 1 reply; 9+ messages in thread
From: Petr Vorel @ 2020-05-06 15:06 UTC (permalink / raw)
  To: ltp

Hi Alexey,

> The changes are fine.
Thanks for your ack.

> Perhaps for further improvements, ROUTE_CHANGE_NETLINK is limited by
> "NUM_LOOPS_MAX 65535", it looks unnecessary.
Sure, I'll remove this. It fails if -c is bigger than INT_MAX, thus suggest:

+++ testcases/network/stress/route/route-change-netlink.c
@@ -20,8 +20,6 @@
 #include "tst_safe_net.h"
 #include "tst_safe_stdio.h"
 
-#define NUM_LOOPS_MAX 65535
-
 #define IP_ADDR_DELIM ','
 #define STR(x) #x
 #define CHR2STR(x) STR(x)
@@ -117,8 +115,8 @@ static void setup(void)
 	if (tst_parse_int(p_opt, &port, 1, 65535))
 		tst_brk(TBROK, "invalid rhost port '%s'", p_opt);
 
-	if (tst_parse_int(c_opt, &num_loops, 1, NUM_LOOPS_MAX)) {
-		num_loops = NUM_LOOPS_MAX;
+	if (tst_parse_int(c_opt, &num_loops, 1, INT_MAX)) {
+		num_loops = INT_MAX;
 		tst_res(TWARN, "invalid number of loops (-c %s), using: %d",
 			c_opt, num_loops);
 	}
---

Or I can use long and LONG_MAX, but IMHO int is OK :)

> Can we limit the setup only and iterate (adding and deleting) from
> the beginning or use -i option with -c?
I'm sorry, I don't understand you. Isn't it INT_MAX enough?

Kind regards,
Petr

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

* [LTP] [PATCH v6 3/3] route: Increase default loop values
  2020-05-06 15:06     ` Petr Vorel
@ 2020-05-06 15:52       ` Alexey Kodanev
  2020-05-06 16:08         ` Petr Vorel
  0 siblings, 1 reply; 9+ messages in thread
From: Alexey Kodanev @ 2020-05-06 15:52 UTC (permalink / raw)
  To: ltp

On 06.05.2020 18:06, Petr Vorel wrote:
> Hi Alexey,
> 
>> The changes are fine.
> Thanks for your ack.
> 
>> Perhaps for further improvements, ROUTE_CHANGE_NETLINK is limited by
>> "NUM_LOOPS_MAX 65535", it looks unnecessary.
> Sure, I'll remove this. It fails if -c is bigger than INT_MAX, thus suggest:
> 
> +++ testcases/network/stress/route/route-change-netlink.c
> @@ -20,8 +20,6 @@
>  #include "tst_safe_net.h"
>  #include "tst_safe_stdio.h"
>  
> -#define NUM_LOOPS_MAX 65535
> -
>  #define IP_ADDR_DELIM ','
>  #define STR(x) #x
>  #define CHR2STR(x) STR(x)
> @@ -117,8 +115,8 @@ static void setup(void)
>  	if (tst_parse_int(p_opt, &port, 1, 65535))
>  		tst_brk(TBROK, "invalid rhost port '%s'", p_opt);
>  
> -	if (tst_parse_int(c_opt, &num_loops, 1, NUM_LOOPS_MAX)) {
> -		num_loops = NUM_LOOPS_MAX;
> +	if (tst_parse_int(c_opt, &num_loops, 1, INT_MAX)) {
> +		num_loops = INT_MAX;
>  		tst_res(TWARN, "invalid number of loops (-c %s), using: %d",
>  			c_opt, num_loops);
>  	}
> ---
> 
> Or I can use long and LONG_MAX, but IMHO int is OK :)
> 
>> Can we limit the setup only and iterate (adding and deleting) from
>> the beginning or use -i option with -c?
> I'm sorry, I don't understand you. Isn't it INT_MAX enough?


Yes, it's fine, I just wasn't sure why it was added in the first place,
65535, because of some limitation of the ip address setup (you have
added the separate ip max var though) or something else...

> 
> Kind regards,
> Petr
> 


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

* [LTP] [PATCH v6 3/3] route: Increase default loop values
  2020-05-06 15:52       ` Alexey Kodanev
@ 2020-05-06 16:08         ` Petr Vorel
  2020-05-06 16:15           ` Petr Vorel
  0 siblings, 1 reply; 9+ messages in thread
From: Petr Vorel @ 2020-05-06 16:08 UTC (permalink / raw)
  To: ltp

Hi Alexey,

> > Or I can use long and LONG_MAX, but IMHO int is OK :)

> >> Can we limit the setup only and iterate (adding and deleting) from
> >> the beginning or use -i option with -c?
> > I'm sorry, I don't understand you. Isn't it INT_MAX enough?


> Yes, it's fine, I just wasn't sure why it was added in the first place,
> 65535, because of some limitation of the ip address setup (you have
> added the separate ip max var though) or something else...

OK, finally merging. Thanks a lot for patient review and many tips!

Kind regards,
Petr

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

* [LTP] [PATCH v6 3/3] route: Increase default loop values
  2020-05-06 16:08         ` Petr Vorel
@ 2020-05-06 16:15           ` Petr Vorel
  0 siblings, 0 replies; 9+ messages in thread
From: Petr Vorel @ 2020-05-06 16:15 UTC (permalink / raw)
  To: ltp

Hi Alexey,

> > Yes, it's fine, I just wasn't sure why it was added in the first place,
> > 65535, because of some limitation of the ip address setup (you have
> > added the separate ip max var though) or something else...

> OK, finally merging. Thanks a lot for patient review and many tips!
FYI: Merged.

Kind regards,
Petr

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

end of thread, other threads:[~2020-05-06 16:15 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-29 19:23 [LTP] [PATCH v6 0/3] Route tests using netlink API (dst,gw,if) Petr Vorel
2020-04-29 19:23 ` [LTP] [PATCH v6 1/3] net: Add SAFE_GETADDRINFO() Petr Vorel
2020-04-29 19:23 ` [LTP] [PATCH v6 2/3] net/route: Add netlink based route change tests Petr Vorel
2020-04-29 19:23 ` [LTP] [PATCH v6 3/3] route: Increase default loop values Petr Vorel
2020-05-06 14:18   ` Alexey Kodanev
2020-05-06 15:06     ` Petr Vorel
2020-05-06 15:52       ` Alexey Kodanev
2020-05-06 16:08         ` Petr Vorel
2020-05-06 16:15           ` Petr Vorel

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.