aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2021-04-23 21:28:38 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2021-04-24 22:41:27 +0000
commitbddae5c8a64dc6b292198945cbe676bb2158d438 (patch)
tree39626ffd8dc1ea3caca802109e9e1c37f5a25548 /tests
parent6096814d3134234d48936f557d431a793e35d8b3 (diff)
downloadsrc-bddae5c8a64dc6b292198945cbe676bb2158d438.tar.gz
src-bddae5c8a64dc6b292198945cbe676bb2158d438.zip
Improve debugging output on routing tests failure.
Most of the routing tests create per-test VNET, making it harder to repeat the failure with CLI tools. Provide an additional route/nexthop data on failure. Differential Revision: https://reviews.freebsd.org/D29957 Reviewed by: kp MFC after: 2 weeks
Diffstat (limited to 'tests')
-rw-r--r--tests/sys/net/routing/rtsock_print.h32
1 files changed, 31 insertions, 1 deletions
diff --git a/tests/sys/net/routing/rtsock_print.h b/tests/sys/net/routing/rtsock_print.h
index b44fcca25053..20bb1c51bc33 100644
--- a/tests/sys/net/routing/rtsock_print.h
+++ b/tests/sys/net/routing/rtsock_print.h
@@ -40,7 +40,10 @@
#define RTSOCK_ATF_REQUIRE_MSG(_rtm, _cond, _fmt, ...) do { \
if (!(_cond)) { \
printf("-- CONDITION FAILED, rtm dump --\n\n");\
- rtsock_print_message(_rtm); \
+ rtsock_print_message(_rtm); \
+ rtsock_print_table(AF_INET); \
+ rtsock_print_table(AF_INET6); \
+ printf("===================================\n");\
} \
ATF_REQUIRE_MSG(_cond, _fmt, ##__VA_ARGS__); \
} while (0);
@@ -381,4 +384,31 @@ rtsock_print_message(struct rt_msghdr *rtm)
}
}
+static void
+print_command(char *cmd)
+{
+ char line[1024];
+
+ FILE *fp = popen(cmd, "r");
+ if (fp != NULL) {
+ while (fgets(line, sizeof(line), fp) != NULL)
+ printf("%s", line);
+ pclose(fp);
+ }
+}
+
+void
+rtsock_print_table(int family)
+{
+ char cmdbuf[128];
+ char *key = (family == AF_INET) ? "4" : "6";
+
+ snprintf(cmdbuf, sizeof(cmdbuf), "/usr/bin/netstat -%srnW", key);
+ printf("==== %s ===\n", cmdbuf);
+ print_command(cmdbuf);
+ snprintf(cmdbuf, sizeof(cmdbuf), "/usr/bin/netstat -%sonW", key);
+ printf("==== %s ===\n", cmdbuf);
+ print_command(cmdbuf);
+}
+
#endif