]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/commitdiff
iproute: "ip mroute show" doesn't show all output interfaces
authorMark Borst <mark@borst.org>
Wed, 2 Dec 2009 00:15:15 +0000 (16:15 -0800)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Wed, 2 Dec 2009 00:15:15 +0000 (16:15 -0800)
The command "ip mroute show" will only show the first Oif.

mark@flappie:~$ ip mroute show
(192.168.1.1, 224.0.0.123)       Iif: _rename    Oifs: eth1

mark@flappie:~$ cat /proc/net/ip_mr_cache
Group    Origin   Iif     Pkts    Bytes    Wrong Oifs
7B0000E0 0101A8C0 2          0        0        0  0:1    1:1

This shows 2 Oifs here. However, ipmroute.c, function read_mroute_list(), uses sscanf() with a %s mask for oiflist, which stops after the first whitespace (i.e. after Oif 0:1). The patch below fixes this to read until the newline (though I'm not sure whether this is the proper way to fix it).

After this patch:
mark@flappie:~/iproute-20090324/ip$ ./ip mroute show
(192.168.1.1, 224.0.0.123)       Iif: _rename    Oifs: eth1 eth0

This patch originally submitted as http://bugs.debian.org/550097

Signed-off-by: Andreas Henriksson <andreas@fatal.se>
ip/ipmroute.c

index 8f4b0612c5d78525f7d54cb2bd2afebc12a89963..977143cc3dfa9495e3277224473fc9d7f45409ec 100644 (file)
@@ -95,7 +95,8 @@ static void read_mroute_list(FILE *ofp)
                char obuf[256];
 
                oiflist[0] = 0;
-               if (sscanf(buf, "%x%x%d%u%u%u%s", maddr.data, msrc.data, &vifi,
+               if (sscanf(buf, "%x%x%d%u%u%u %[^\n]",
+                          maddr.data, msrc.data, &vifi,
                           &pkts, &b, &w, oiflist) < 6)
                        continue;