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
This commit is contained in:
Alexander V. Chernikov 2021-04-23 21:28:38 +00:00
parent 6096814d31
commit bddae5c8a6

View File

@ -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