]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
iproute2: add support to monitor mdb entries too
authorCong Wang <amwang@redhat.com>
Tue, 11 Dec 2012 22:23:10 +0000 (22:23 +0000)
committerStephen Hemminger <shemminger@vyatta.com>
Wed, 12 Dec 2012 18:27:46 +0000 (10:27 -0800)
This patch implements `bridge monitor mdb`.

Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Cong Wang <amwang@redhat.com>
bridge/br_common.h
bridge/mdb.c
bridge/monitor.c
include/linux/rtnetlink.h

index 892fb76cd427323c86647646f0467ff626da071f..10f6ce91c6629a74ddcabee585ce60c19e902a66 100644 (file)
@@ -3,6 +3,8 @@ extern int print_linkinfo(const struct sockaddr_nl *who,
                          void *arg);
 extern int print_fdb(const struct sockaddr_nl *who,
                     struct nlmsghdr *n, void *arg);
+extern int print_mdb(const struct sockaddr_nl *who,
+                    struct nlmsghdr *n, void *arg);
 
 extern int do_fdb(int argc, char **argv);
 extern int do_mdb(int argc, char **argv);
index 4d8a8966d8dbc6d13166d36004cf55a08a4726ca..121ce9c2e93f0891d31541a4fddbaa324ca61ad4 100644 (file)
@@ -82,8 +82,8 @@ int print_mdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
        int len = n->nlmsg_len;
        struct rtattr * tb[MDBA_MAX+1];
 
-       if (n->nlmsg_type != RTM_GETMDB) {
-               fprintf(stderr, "Not RTM_GETMDB: %08x %08x %08x\n",
+       if (n->nlmsg_type != RTM_GETMDB && n->nlmsg_type != RTM_NEWMDB && n->nlmsg_type != RTM_DELMDB) {
+               fprintf(stderr, "Not RTM_GETMDB, RTM_NEWMDB or RTM_DELMDB: %08x %08x %08x\n",
                        n->nlmsg_len, n->nlmsg_type, n->nlmsg_flags);
 
                return 0;
index 2f6065529b91adf8e68eb21e299869076a20a371..44e14d86114f2bf03d658407660e9d2c52cd70a2 100644 (file)
@@ -68,6 +68,12 @@ int accept_msg(const struct sockaddr_nl *who,
                        fprintf(fp, "[NEIGH]");
                return print_fdb(who, n, arg);
 
+       case RTM_NEWMDB:
+       case RTM_DELMDB:
+               if (prefix_banner)
+                       fprintf(fp, "[MDB]");
+               return print_mdb(who, n, arg);
+
        case 15:
                return show_mark(fp, n);
 
@@ -84,6 +90,7 @@ int do_monitor(int argc, char **argv)
        unsigned groups = ~RTMGRP_TC;
        int llink=0;
        int lneigh=0;
+       int lmdb=0;
 
        rtnl_close(&rth);
 
@@ -97,6 +104,9 @@ int do_monitor(int argc, char **argv)
                } else if (matches(*argv, "fdb") == 0) {
                        lneigh = 1;
                        groups = 0;
+               } else if (matches(*argv, "mdb") == 0) {
+                       lmdb = 1;
+                       groups = 0;
                } else if (strcmp(*argv, "all") == 0) {
                        groups = ~RTMGRP_TC;
                        prefix_banner=1;
@@ -116,6 +126,10 @@ int do_monitor(int argc, char **argv)
                groups |= nl_mgrp(RTNLGRP_NEIGH);
        }
 
+       if (lmdb) {
+               groups |= nl_mgrp(RTNLGRP_MDB);
+       }
+
        if (file) {
                FILE *fp;
                fp = fopen(file, "r");
index 3ea85dcedc17a8ec2b7ba2ff142f3f735994a5fa..87452b4f1062e6fd1da2813f1bfb426efcfc3e47 100644 (file)
@@ -609,6 +609,8 @@ enum rtnetlink_groups {
 #define RTNLGRP_IPV4_NETCONF   RTNLGRP_IPV4_NETCONF
        RTNLGRP_IPV6_NETCONF,
 #define RTNLGRP_IPV6_NETCONF   RTNLGRP_IPV6_NETCONF
+       RTNLGRP_MDB,
+#define RTNLGRP_MDB            RTNLGRP_MDB
        __RTNLGRP_MAX
 };
 #define RTNLGRP_MAX    (__RTNLGRP_MAX - 1)