bool global_only);
int print_vnifilter_rtm(struct nlmsghdr *n, void *arg, bool monitor);
void br_print_router_port_stats(struct rtattr *pattr);
+void print_headers(FILE *fp, const char *label);
int do_fdb(int argc, char **argv);
int do_mdb(int argc, char **argv);
if (filter_dynamic && (r->ndm_state & NUD_PERMANENT))
return 0;
+ print_headers(fp, "[NEIGH]");
+
open_json_object(NULL);
if (n->nlmsg_type == RTM_DELNEIGH)
print_bool(PRINT_ANY, "deleted", "Deleted ", true);
int do_fdb(int argc, char **argv)
{
ll_init_map(&rth);
+ timestamp = 0;
if (argc > 0) {
if (matches(*argv, "add") == 0)
if (!name)
return -1;
+ print_headers(fp, "[LINK]");
+
open_json_object(NULL);
if (n->nlmsg_type == RTM_DELLINK)
print_bool(PRINT_ANY, "deleted", "Deleted ", true);
int do_link(int argc, char **argv)
{
ll_init_map(&rth);
+ timestamp = 0;
+
if (argc > 0) {
if (matches(*argv, "set") == 0 ||
matches(*argv, "change") == 0)
if (ret != 1)
return ret;
+ print_headers(fp, "[MDB]");
+
if (n->nlmsg_type == RTM_DELMDB)
print_bool(PRINT_ANY, "deleted", "Deleted ", true);
int do_mdb(int argc, char **argv)
{
ll_init_map(&rth);
+ timestamp = 0;
if (argc > 0) {
if (matches(*argv, "add") == 0)
exit(-1);
}
-static int print_tunnel_rtm(struct nlmsghdr *n, void *arg, bool monitor)
-{
- struct tunnel_msg *tmsg = NLMSG_DATA(n);
-
- if (tmsg->family == PF_BRIDGE)
- return print_vnifilter_rtm(n, arg, monitor);
-
- return 0;
-}
-
static int accept_msg(struct rtnl_ctrl_data *ctrl,
struct nlmsghdr *n, void *arg)
{
FILE *fp = arg;
- if (timestamp)
- print_timestamp(fp);
-
switch (n->nlmsg_type) {
case RTM_NEWLINK:
case RTM_DELLINK:
- if (prefix_banner)
- fprintf(fp, "[LINK]");
-
return print_linkinfo(n, arg);
case RTM_NEWNEIGH:
case RTM_DELNEIGH:
- if (prefix_banner)
- fprintf(fp, "[NEIGH]");
return print_fdb(n, arg);
case RTM_NEWMDB:
case RTM_DELMDB:
- if (prefix_banner)
- fprintf(fp, "[MDB]");
return print_mdb_mon(n, arg);
case NLMSG_TSTAMP:
case RTM_NEWVLAN:
case RTM_DELVLAN:
- if (prefix_banner)
- fprintf(fp, "[VLAN]");
return print_vlan_rtm(n, arg, true, false);
case RTM_NEWTUNNEL:
case RTM_DELTUNNEL:
- if (prefix_banner)
- fprintf(fp, "[TUNNEL]");
- return print_tunnel_rtm(n, arg, true);
+ return print_vnifilter_rtm(n, arg, true);
default:
return 0;
}
}
+void print_headers(FILE *fp, const char *label)
+{
+ if (timestamp)
+ print_timestamp(fp);
+
+ if (prefix_banner)
+ fprintf(fp, "%s", label);
+}
+
int do_monitor(int argc, char **argv)
{
char *file = NULL;
struct br_vlan_msg *bvm = NLMSG_DATA(n);
int len = n->nlmsg_len;
struct rtattr *a;
+ FILE *fp = arg;
int rem;
if (n->nlmsg_type != RTM_NEWVLAN && n->nlmsg_type != RTM_DELVLAN &&
if (filter_index && filter_index != bvm->ifindex)
return 0;
+ print_headers(fp, "[VLAN]");
+
if (n->nlmsg_type == RTM_DELVLAN)
print_bool(PRINT_ANY, "deleted", "Deleted ", true);
int do_vlan(int argc, char **argv)
{
ll_init_map(&rth);
+ timestamp = 0;
if (argc > 0) {
if (matches(*argv, "add") == 0)
int len = n->nlmsg_len;
bool first = true;
struct rtattr *t;
+ FILE *fp = arg;
int rem;
if (n->nlmsg_type != RTM_NEWTUNNEL &&
if (filter_index && filter_index != tmsg->ifindex)
return 0;
+ print_headers(fp, "[TUNNEL]");
+
if (n->nlmsg_type == RTM_DELTUNNEL)
print_bool(PRINT_ANY, "deleted", "Deleted ", true);
int do_vni(int argc, char **argv)
{
ll_init_map(&rth);
+ timestamp = 0;
if (argc > 0) {
if (strcmp(*argv, "add") == 0)