mrouted and DVMRP

For direct communication of two multicast participants on the same subnet, no multicast routing protocols are necessary; IGMP completely suffices. As soon as the multicast traffic traverses intermediate routers, multicast routing (signaling) becomes mandatory to forward this traffic successfully. Static multicast routing entries do not scale at all. mrouted is the dominant UNIX multicast routing daemon, currently version 3.9-beta3, and was developed by Steve Deering and Bill Fenner. This tool compiles well on all platforms; however, it requires a patch on Linux gateways and a change to the Makefile of older OpenBSD versions (as described later in this chapter).

mrouted is based on DVMRP and consists of three binaries: mrouted, map-mbone, and mrinfo (which is an ancillary tool). In contrast, DVMRP is a protocol for densely distributed multicast subscribers in high-bandwidth LAN environments and uses the flood-and-prune or implicit join method. For a detailed explanation of the protocol, consult RFC 1075.

mrouted and the MBONE

Although Cisco does not natively support DVMRP, mrouted cooperates with the Cisco IOS DVMRP interoperability implementation of PIM. That is why PIM is configured in all the following labs involving Cisco routers.

MBONE is the former multicast testbed of the Internet research community. It is based on DVMRP and has more or less been replaced by PIM-based modern architectures such as the European research network GEANT, the M6BONE, or the Internet2 "Abilene" Project.

MBONE tunneling was an approach analogous to IPv6 tunnel connections to the 6BONE (IPv6 backbone). An Internet (isolated multicast islands) not yet or only partially capable of native multicast routing delivers unicast tunnel traffic between multicast realms. The same is true for IPv6. Not all Internet routers can deal with IPv6 yet; therefore, the traffic is encapsulated into IPv4 headers and delivered that way. Essentially, these are either IP-IP or Generic Routing Encapsulation (GRE) tunnels. mrouted provides its own tunnel setup (IP-IP) and facilitates DVMRP. DVMRP is plagued by the usual scalability and convergence problems of all distance-vector routing protocols. Figure 14-2 illustrates the traditional MBONE architecture.

Figure 14-2. Traditional MBONE Architecture

graphics/14fig02.gif


Although MBONE is outdated and not maintained anymore, mrouted and DVMRP still are a viable solution for smaller networks based on UNIX gateways. mrouted includes native IP-IP tunnel support (as long as it is supported by the underlying operating system).

NOTE

mtrace and mstat are additional useful tools that are available on some systems to debug multicast problems. The mrouted default configuration file is /etc/mrouted.conf. Consult the excellent manual page and command-line help for further information, especially how to send UNIX signals to the daemon to dump status information (SIGUSR1, SIGUSR2).


Cisco IOS architecture supports DVMRP only for backward compatibility for mrouted gateways and MBONE tunnel connections. If you want to hook up to the MBONE, contact your Internet service provider (ISP) or research networks in your vicinity to provide you with a DVMRP tunnel neighbor address.

Lab 14-1: DVMRP via mrouted

This lab facilitates the topology in Figure 14-3, in which we observe the DVMRP dialogue between all four multicast gateways and one redundant DVMRP tunnel between ganymed and scar (Example 14-4). The threshold in Example 14-4 is DVMRP's way of implementing TTL scoping, as described earlier in this chapter. The scar configuration, as shown in Example 14-3, has not changed.

Figure 14-3. mrouted Lab Topology

graphics/14fig03.gif


Note that some operating systems require a default routing entry for multicast prefixes, such as route add -net 224.0.0.0 netmask 240.0.0.0 eth0, to deal with multicast groups properly when not using a multicast routing daemon such as mrouted or pimd.

NOTE

To be able to compile mrouted from sources on older OpenBSD versions, you must add-DRAW_OUTPUT_IS_RAW to the CFLAGS line in the Makefile, as follows: CFLAGS= -O ${MCAST_INCLUDE} ${SNMPDEF} ${RSRRDEF} -DRAW_OUTPUT_IS_RAW. Thanks to Bill Fenner for pointing this out.


CAUTION

When configuring mrouted tunnels on Linux, do not forget to load the tunnel kernel module (insmod ipip).


Example 14-4. mrouted Tunnel Setup on Ganymed

[root@ganymed:~#] cat /etc/mrouted.conf

#

# DVMRP IP-IP tunnel ganymed <--> scar with a multicast rate_limit of 500 kbps

tunnel 192.168.1.254 192.168.14.254 metric 1 threshold 64 rate_limit 500


If you require DVMRP tunnels from a Linux gateway, mrouted creates DVMRP interfaces automatically at runtime (Example 14-5). Examples 14-6 through 14-9 show various multicast and DVMRP-related commands, debugging of, and output for the UNIX multicast gateways. Finally, Example 14-10 shows sniffer output of the DVMRP protocol operation.

Example 14-5. Automatic Linux DVMRP Tunnel Interface Creation

[root@callisto:~#] ifconfig

...

dvmrp2    Link encap:IPIP Tunnel  HWaddr

          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1480  Metric:1

          RX packets:1 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:76 (76.0 b)  TX bytes:0 (0.0 b)

...


Example 14-6. Scar DVMRP Operation

scar# show ip mroute summary

IP Multicast Routing Table

Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,

       L - Local, P - Pruned, R - RP-bit set, F - Register flag,

       T - SPT-bit set, J - Join SPT, M - MSDP created entry,

       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,

       U - URD, I - Received Source Specific Host Report

Outgoing interface flags: H - Hardware switched

Timers: Uptime/Expires

Interface state: Interface, Next-Hop or VCD, State/Mode



(*, 224.0.1.111), 00:19:03/00:00:00, RP 0.0.0.0, OIF count: 3, flags: DCL

(*, 224.0.1.40), 00:19:03/00:00:00, RP 0.0.0.0, OIF count: 3, flags: DCL

(*, 224.2.2.2), 00:19:03/00:00:00, RP 0.0.0.0, OIF count: 3, flags: DCL

  (192.168.1.1, 224.2.2.2), 00:00:25/00:02:34, OIF count: 1, flags: CL

  (192.168.2.7, 224.2.2.2), 00:01:43/00:01:16, OIF count: 2, flags: CL



scar# show ip mroute

IP Multicast Routing Table

Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,

       L - Local, P - Pruned, R - RP-bit set, F - Register flag,

       T - SPT-bit set, J - Join SPT, M - MSDP created entry,

       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,

       U - URD, I - Received Source Specific Host Report

Outgoing interface flags: H - Hardware switched

Timers: Uptime/Expires

Interface state: Interface, Next-Hop or VCD, State/Mode



(*, 224.0.1.111), 00:18:16/00:00:00, RP 0.0.0.0, flags: DCL

  Incoming interface: Null, RPF nbr 0.0.0.0

  Outgoing interface list:

    Tunnel0, Forward/Dvmrp, 00:17:20/00:00:00

    Ethernet0, Forward/Sparse-Dense, 00:18:16/00:00:00

    Ethernet1, Forward/Sparse-Dense, 00:17:51/00:00:00



(*, 224.0.1.40), 00:18:16/00:00:00, RP 0.0.0.0, flags: DCL

  Incoming interface: Null, RPF nbr 0.0.0.0

  Outgoing interface list:

    Tunnel0, Forward/Dvmrp, 00:17:20/00:00:00

    Ethernet0, Forward/Sparse-Dense, 00:18:16/00:00:00

    Ethernet1, Forward/Sparse-Dense, 00:17:51/00:00:00



(*, 224.2.2.2), 00:18:16/00:00:00, RP 0.0.0.0, flags: DCL

  Incoming interface: Null, RPF nbr 0.0.0.0

  Outgoing interface list:

    Tunnel0, Forward/Dvmrp, 00:17:27/00:00:00

    Ethernet0, Forward/Sparse-Dense, 00:18:16/00:00:00

    Ethernet1, Forward/Sparse-Dense, 00:18:10/00:00:00



(192.168.1.1, 224.2.2.2), 00:02:40/00:00:19, flags: CL

  Incoming interface: Tunnel0, RPF nbr 192.168.1.254, Dvmrp

  Outgoing interface list:

    Ethernet1, Forward/Sparse-Dense, 00:02:32/00:00:00

    Ethernet0, Forward/Sparse-Dense, 00:01:23/00:00:00



(192.168.2.7, 224.2.2.2), 00:00:55/00:02:04, flags: CL

  Incoming interface: Tunnel0, RPF nbr 192.168.1.254, Dvmrp

  Outgoing interface list:

    Ethernet1, Forward/Sparse-Dense, 00:00:28/00:00:00



scar# show ip dvmrp route

DVMRP Routing Table - 6 entries

192.168.1.0/24 [0/2] uptime 00:09:41, expires 00:02:43, poison 0x00000000

    via 192.168.1.254, Tunnel0, [version mrouted 3.255] [flags: GPM]

192.168.2.0/24 [0/2] uptime 00:09:38, expires 00:02:43

    via 192.168.1.254, Tunnel0, [version mrouted 3.255] [flags: GPM]

192.168.7.0/24 [0/3] uptime 00:09:41, expires 00:02:43, poison 0x00020000

    via 192.168.1.254, Tunnel0, [version mrouted 3.255] [flags: GPM]

192.168.14.0/24 [0/3] uptime 00:09:38, expires 00:02:43, poison 0x00010000

    via 192.168.1.254, Tunnel0, [version mrouted 3.255] [flags: GPM]

192.168.80.0/24 [0/2] uptime 00:09:21, expires 00:02:43

    via 192.168.1.254, Tunnel0, [version mrouted 3.255] [flags: GPM]

211.11.117.0/24 [0/2] uptime 00:09:21, expires 00:02:43

    via 192.168.1.254, Tunnel0, [version mrouted 3.255] [flags: GPM]



scar# mrinfo 192.168.1.254

192.168.1.254 [version mrouted 3.255] [flags: GPM]:

  192.168.1.254 -> 192.168.1.1 [1/1]

  192.168.2.254 -> 192.168.2.7 [1/1]

  211.11.117.206 -> 0.0.0.0 [1/1/querier/leaf]

  192.168.80.254 -> 192.168.80.1 [1/1]

  192.168.1.254 -> 192.168.14.254 [1/64/tunnel]

  211.11.117.206 -> 62.178.158.124 [1/64/tunnel/down/leaf]



scar# mstat 192.168.14.254

Type escape sequence to abort.

Mtrace from 192.168.14.254 to 192.168.14.254 via RPF

From source (?) to destination (?)

Waiting to accumulate statistics......

Results after 10 seconds:



  Source        Response Dest    Packet Statistics For     Only For Traffic

192.168.14.254    192.168.14.254    All Multicast Traffic     From 192.168.14.254

     |       __/  rtt 0    ms   Lost/Sent = Pct  Rate     To 0.0.0.0

     v      /     hop 0    ms   ---------------------     --------------------

192.168.14.254  ?

     |      \__   ttl   0

     v         \  hop 0    ms        0         0 pps           0    0 pps

192.168.14.254  192.168.14.254

  Receiver      Query Source



scar# mtrace

Source address or name: 192.168.14.254

Destination address or name: 192.168.1.254

Group address or name:

Multicast request TTL [64]:

Response address for mtrace:

Type escape sequence to abort.

Mtrace from 192.168.14.254 to 192.168.1.254 via RPF

From source (?) to destination (?)

Querying full reverse path...

 0  192.168.1.254

-1  192.168.1.254 DVMRP Wrong interface [192.168.14.0/24]

-2  192.168.1.1 DVMRP  [192.168.14.0/24]


Example 14-7. Callisto mrouted Operation (DVMRP)

[root@callisto~#] ps ax | grep mrouted

 4307 pts/0    S      0:00 mrouted

 5617 pts/2    R      0:00 grep mrouted



[root@callisto:~#] kill -SIGUSR1 4307

[root@callisto:~#] kill -SIGUSR2 4307



[root@callisto:~#] cat /var/tmp/mrouted.cache

mrouted version 3.9-beta3 up  5:54:15 Tue Dec 30 00:42:43 2003



Multicast Routing Cache Table (4 entries)

 Origin             Mcast-group         CTmr     Age      Ptmr Rx IVif Forwvifs

<(prunesrc:vif[idx]/tmr) prunebitmap

>Source             Lifetime SavPkt         Pkts    Bytes RPFf

 192.168.1/24       224.0.1.1        0:03:30  5:53:45        -  -  1

>192.168.1.1         5:53:45      0          175     5600    0

 192.168.1/24       224.2.2.2        0:03:40  1:07:51        -  -  1   0

>192.168.1.1         1:07:51      0         2306   449866    0

>192.168.1.2         1:07:34      0         3816   577632    0

 192.168.2/24       224.2.2.2        0:03:32  0:47:45        -  -  1   0

>192.168.2.7         0:47:45      0         2344   404059    0



[root@callisto:~#] cat /var/tmp/mrouted.dump

mrouted version 3.9-beta3 up  5:54:11 Tue Dec 30 00:42:39 2003

vifs_with_neighbors = 2



Virtual Interface Table

Vif  Name  Local-Address                               M  Thr  Rate   Flags

 0   eth0  192.168.14.1    subnet: 192.168.14/24       1   1      0   querier

                            peers: 192.168.14.254 (12.2) [0] up  2:58:36

           group host (time left): 224.2.2.2       192.168.14.254  ( 0:03:52)

                                   224.0.0.4       192.168.14.1    ( 0:03:52)

                                   224.0.0.2       192.168.14.1    ( 0:03:49)

                     IGMP querier: 192.168.14.1       (this system)

                      Nbr bitmaps: 0x0000000000000001

                   pkts/bytes in : 0/0

                   pkts/bytes out: 3413/619795



 1   eth1  192.168.1.1     subnet: 192.168.1/24        1   1      0   querier

                            peers: 192.168.1.254 (3.255) [1] have-genid up  0:47:54

           group host (time left): 224.2.2.2       192.168.1.1     ( 0:03:43)

                                   239.255.255.250 192.168.1.2     ( 0:03:52)

                                   224.0.1.1       192.168.1.1     ( 0:03:44)

                                   224.0.0.4       192.168.1.1     ( 0:03:49)

                                   224.0.0.2       192.168.1.1     ( 0:03:43)

                     IGMP querier: 192.168.1.1        (this system)

                      Nbr bitmaps: 0x0000000000000002

                   pkts/bytes in : 8820/1461369

                   pkts/bytes out: 0/0





Multicast Routing Table (6 entries)

 Origin-Subnet      From-Gateway    Metric Tmr Fl In-Vif  Out-Vifs

 211.11.117/24      192.168.1.254      2    45 ..   1     0*

 192.168.80/24      192.168.1.254      2    45 ..   1     0*

 192.168.14/24                         1    90 ..   0     1[1]

 192.168.7/24       192.168.14.254     2    45 ..   0     1*

 192.168.2/24       192.168.1.254      2    45 ..   1     0*

 192.168.1/24                          1    90 ..   1     0*


Example 14-8. Castor mrouted Operation (DVMRP)

[root@castor:~#] netstat ?g ?f inet



Virtual Interface Table

 Vif   Thresh   Rate   Local-Address   Remote-Address    Pkts-In   Pkts-Out

  0         1      0   192.168.2.7                          1373       5237

  1         1      0   192.168.7.7                          1007       5174

  2         1      0   192.168.80.1                            0          0



IPv4 Multicast Forwarding Cache

 Origin          Group             Packets In-Vif  Out-Vifs:Ttls

 192.168.2.7     224.2.2.2            4230    0    1:1

 192.168.1.1     224.2.2.2            2347    0    1:1

[root@castor:~#] netstat -gs -f inet

IPv4 multicast forwarding:

        7898 multicast forwarding cache lookups

        3 multicast forwarding cache misses

        3 upcalls to mrouted

        0 upcall queue overflows

        0 upcalls dropped due to full socket buffer

        0 cache cleanups

        3 datagrams with no route for origin

        0 datagrams arrived with bad tunneling

        0 datagrams could not be tunneled

        1006 datagrams arrived on wrong interface

        0 datagrams selectively dropped

        0 datagrams dropped due to queue overflow

        0 datagrams dropped for being too large



[root@castor:~#] map-mbone 192.168.14.254



192.168.7.254 (scar.nerdzone.org): alias for 192.168.14.254



192.168.14.254: <v12.2>

    192.168.14.254:  192.168.1.254 [1/0/tunnel]

                     192.168.14.254 [1/0/querier]

    192.168.7.254:  192.168.7.254 (scar.nerdzone.org) [1/0/querier]



[root@castor:~#] mtrace 192.168.14.254

mtrace: WARNING: no multicast group specified, so no statistics printed

Mtrace from 192.168.14.254 to 192.168.2.7 via group 0.0.0.0

Querying full reverse path...

  0  castor.nerdzone.org (192.168.2.7)

 -1  castor.nerdzone.org (192.168.2.7)  DVMRP  thresh^ 1

 -2  scar.nerdzone.org (192.168.7.254)  PIM  thresh^ 0

 -3  ? (192.168.14.254)

Round trip time 2 ms; total ttl of 1 required.



[root@castor:~#] mrinfo 192.168.14.254

192.168.14.254 (192.168.14.254) [version 12.2]:

  192.168.7.254 -> 0.0.0.0 (local) [1/0/pim/querier]

  192.168.14.254 -> 0.0.0.0 (local) [1/0/pim/querier]

  192.168.14.254 -> 192.168.1.254 (192.168.1.254) [1/0/tunnel]


Example 14-9. Ganymed mrouted Operation (DVMRP)

[root@ganymed:~#] netstat -g -f inet



Virtual Interface Table

 Vif  Thresh  Limit  Local-Address    Remote-Address   Pkt_in  Pkt_out

   0       1      0  192.168.1.254                       1814     2966

   1       1      0  192.168.2.254                       3010     1814

   2       1      0  211.11.117.206                         0        0

   3       1      0  192.168.80.254                         0        0

   4      64    500  192.168.1.254    192.168.14.254        0        0

   5      64    500  211.11.117.206    62.178.158.124       0        0



Multicast Forwarding Cache

 Hash  Origin           Mcastgroup       Traffic  In-Vif  Out-Vifs/Forw-ttl

   90  192.168.2.7      224.2.2.2             2k       1  0/1 4/64

  250  192.168.1.1      224.2.2.2             1k       0  1/1 4/64



Total no. of entries in cache: 2



[root@ganymed:~#] netstat ?gs

multicast routing:

        5 datagrams with no route for origin

        5 upcalls made to mrouted

        0 datagrams with malformed tunnel options

        0 datagrams with no room for tunnel options

        5 datagrams arrived on wrong interface

        0 datagrams dropped due to upcall Q overflow

        0 datagrams dropped due to upcall socket overflow

        0 datagrams cleaned up by the cache

        0 datagrams dropped selectively by ratelimiter

        0 datagrams dropped - bucket Q overflow

        0 datagrams dropped - larger than bkt size

multicast forwarding:

          0 multicast forwarding cache lookups

          0 multicast forwarding cache misses

          0 upcalls to mrouted

          0 upcall queue overflows

          0 upcalls dropped due to full socket buffer

          0 cache cleanups

          0 datagrams with no route for origin

          0 datagrams arrived with bad tunneling

          0 datagrams could not be tunneled

          0 datagrams arrived on wrong interface

          0 datagrams selectively dropped

          0 datagrams dropped due to queue overflow

          0 datagrams dropped for being too large



[root@ganymed:~#] cat /var/tmp/mrouted.cache

mrouted version 3.9-beta3+IOS12 up  1:00:43 Tue Dec 30 00:55:39 2003



Multicast Routing Cache Table (2 entries)

 Origin             Mcast-group         CTmr     Age      Ptmr Rx IVif Forwvifs

<(prunesrc:vif[idx]/tmr) prunebitmap

>Source             Lifetime SavPkt         Pkts    Bytes RPFf

 192.168.7/24       224.0.1.32       0:01:10  0:03:51  0:56:10  0  1P

 192.168.1/24       224.2.2.2        0:01:20  1:00:42        -  -  0   1  4

>192.168.1.1         1:00:42      0         1869   371617    1

 192.168.2/24       224.2.2.2        0:02:30  1:00:42        -  -  1   0  4

>192.168.2.7         1:00:42      0         3065   520226    1

[root@ganymed:~#] cat /var/tmp/mrouted.dump

mrouted version 3.9-beta3+IOS12 up  1:00:40 Tue Dec 30 00:55:36 2003



vifs_with_neighbors = 4



Virtual Interface Table

Vif  Name  Local-Address                               M  Thr  Rate   Flags

 0    ne3  192.168.1.254   subnet: 192.168.1/24        1   1      0

                            peers: 192.168.1.1 (3.255) [3] have-genid up  1:00:44

           group host (time left): 239.255.255.250 192.168.1.2     ( 0:03:23)

                                   224.0.1.1       192.168.1.1     ( 0:03:19)

                                   224.0.0.9       192.168.1.2     ( 0:03:23)

                                   224.2.2.2       192.168.1.2     ( 0:03:19)

                                   224.0.0.2       192.168.1.1     ( 0:03:25)

                                   224.0.0.4       192.168.1.1     ( 0:03:23)

                 IGMP querier: 192.168.1.1      up  0:59:24 last heard  0:01:05 ago

                   Nbr bitmaps: 0x0000000000000008

               pkts/bytes in : 1865/370669

               pkts/bytes out: 3018/512513



 1    ne4  192.168.2.254   subnet: 192.168.2/24        1   1      0

                            peers: 192.168.2.7 (3.255) [1] have-genid up  1:00:46

           group host (time left): 224.2.2.2       192.168.2.7     ( 0:04:04)

                                   224.0.0.4       192.168.2.7     ( 0:04:05)

                                   224.0.0.2       192.168.2.7     ( 0:04:02)

                 IGMP querier: 192.168.2.7      up  1:00:46 last heard  0:00:25 ago

                   Nbr bitmaps: 0x0000000000000002

               pkts/bytes in : 3062/519723

               pkts/bytes out: 1865/370669



 2    ne5  211.11.117.206   subnet: 211.11.117/24        1   1      0   querier leaf

                     IGMP querier: 211.11.117.206      (this system)

                      Nbr bitmaps: 0x0000000000000000

                   pkts/bytes in : 0/0

                   pkts/bytes out: 0/0



 3  vlan0  192.168.80.254  subnet: 192.168.80/24       1   1      0

                            peers: 192.168.80.1 (3.255) [2] have-genid up  1:00:46

           group host (time left): 224.0.0.2       192.168.80.1    ( 0:04:02)

                                   224.0.0.4       192.168.80.1    ( 0:04:01)

                 IGMP querier: 192.168.80.1     up  1:00:46 last heard  0:00:20 ago

                      Nbr bitmaps: 0x0000000000000004

                   pkts/bytes in : 0/0

                   pkts/bytes out: 0/0



 4    ne3  192.168.1.254   tunnel: 192.168.14.254      1  64    500   rexmit_prunes old-tunnel

                            peers: 192.168.14.254 (12.2) [0] up  1:00:51

                      Nbr bitmaps: 0x0000000000000001

                   pkts/bytes in : 0/0

                   pkts/bytes out: 0/0



 5    ne5  211.11.117.206   tunnel: 62.178.158.124      1  64    500   leaf rexmit_prunes

graphics/ccc.gif old-tunnel

                      Nbr bitmaps: 0x0000000000000000

                   pkts/bytes in : 0/0

                   pkts/bytes out: 0/0





Multicast Routing Table (6 entries)

 Origin-Subnet      From-Gateway    Metric Tmr Fl In-Vif  Out-Vifs

 211.11.117/24                         1    50 ..   2    0[3] 1[1] 3* 4[0]

 192.168.80/24                         1    50 ..   3    0[3] 2* 4[0]

 192.168.14/24      192.168.1.1        2    40 ..   0    2*

 192.168.7/24       192.168.2.7        2    35 ..   1    2*

 192.168.2/24                          1    50 ..   1    0[3] 2* 4[0]

 192.168.1/24                          1    50 ..   0    1[1] 2* 3* 4[0]


Example 14-10. What Is Happening on the Multicast LAN (tcpdump Sniffer Output on Castor)

...

23:21:14.363044 192.168.2.254 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]

[ttl 1]

23:21:18.366233 192.168.2.7 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]  [ttl 1]

23:21:24.421728 192.168.2.254 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]

[ttl 1]

23:21:28.424732 192.168.2.7 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]  [ttl 1]

23:21:28.424881 192.168.2.7 > DVMRP.MCAST.NET: igmp dvmrp Report [tos 0xc0]  [ttl 1]

23:21:34.480417 192.168.2.254 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]

[ttl 1]

23:21:38.483146 192.168.2.7 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]  [ttl 1]

23:21:44.153874 192.168.2.254 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]

[ttl 1]

23:21:48.156638 192.168.2.7 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]  [ttl 1]

23:21:54.207863 192.168.2.254 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]

[ttl 1]

23:21:58.211078 192.168.2.7 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]  [ttl 1]

23:22:04.266496 192.168.2.254 > DVMRP.MCAST.NET: igmp dvmrp Probe [tos 0xc0]

[ttl 1]

23:22:04.266958 192.168.2.254 > DVMRP.MCAST.NET: igmp dvmrp Report [tos 0xc0]

[ttl 1]

...

23:57:18.303887 192.168.2.254 > 192.168.2.7: igmp dvmrp Ask-neighbors2 [tos 0xc0]

23:57:18.304018 192.168.2.7 > 192.168.2.254: igmp dvmrp Neighbors2 (v 3.255): [192.168.2.7

graphics/ccc.gif -> 192.168.2.254 (1/1/querier)] [192.168.7.7 -> 0.0.0.0 (1/1/querier)] [tos 0xc0]

...


NOTE

Besides the DVMRP probes and reports in Example 14-10, you also see ASK_NEIGHBORS IGMP messages used by the mrinfo and map-mbone tools.


Native-Multicast Test Applications

As examples of real-world multicast applications, the well-known ntpd (Network Time Protocol daemon) and nte (a multicast whiteboard) were chosen. ntpd was configured to run in multicast mode (224.0.1.1), and nte was configured to utilize 224.2.2.2 and UDP port 34000. This is just for testing purposes. Choose more appropriate addresses according to the IANA assignments discussed at the beginning of this chapter for your deployments. Example 14-11 shows the setup and operation of these tools.

Example 14-11. Setup and Operation of Multicast Test Applications ntp and nte

[root@castor:~#] nte 224.2.2.2/34000 &



[root@callisto:~#] nte 224.2.2.2/34000 &



[root@castor:~#] cat /etc/ntp.conf

manycastclient 224.0.1.1

multicastclient 224.0.1.1

logfile /var/log/ntp.log

driftfile /etc/ntp.drift

authenticate no



[root@castor:~#] ntpd -A -c /etc/ntp.conf



[root@callisto:~#] cat /etc/ntp.conf

manycastserver 224.0.1.1

server ntp2.curie.fr prefer minpoll 10

server ntp.obspm.fr

logfile /var/log/ntp.log

driftfile /etc/ntp.drift

authenticate no



[root@callisto:~#] ntpd -A -c /etc/ntp.conf



[root@castor:~#] netstat -g -f inet



Virtual Interface Table

 Vif   Thresh   Rate   Local-Address   Remote-Address    Pkts-In   Pkts-Out

  0         1      0   192.168.2.7                            73       5387

  1         1      0   192.168.7.7                             0         16

  2         1      0   192.168.80.1                            0          0



IPv4 Multicast Forwarding Cache

 Origin          Group             Packets In-Vif  Out-Vifs:Ttls

 192.168.2.7     224.2.2.2            1997    0    1:1

 192.168.1.1     224.2.2.2              73    0    1:1



[root@castor:~#] netstat -gs -f inet

IPv4 multicast forwarding:

        6064 multicast forwarding cache lookups

        4 multicast forwarding cache misses

        4 upcalls to mrouted

        0 upcall queue overflows

        0 upcalls dropped due to full socket buffer

        0 cache cleanups

        4 datagrams with no route for origin

        0 datagrams arrived with bad tunneling

        0 datagrams could not be tunneled

        0 datagrams arrived on wrong interface

        0 datagrams selectively dropped

        0 datagrams dropped due to queue overflow

        0 datagrams dropped for being too large



[root@callisto:~#] netstat -g

IPv6/IPv4 Group Memberships

Interface       RefCnt Group

--------------- ------ ---------------------

lo              1      ALL-SYSTEMS.MCAST.NET

eth0            1      ALL-ROUTERS.MCAST.NET

eth0            1      DVMRP.MCAST.NET

eth0            1      ALL-SYSTEMS.MCAST.NET

eth1            1      224.2.2.2

eth1            1      NTP.MCAST.NET

eth1            1      ALL-ROUTERS.MCAST.NET

eth1            1      DVMRP.MCAST.NET

eth1            1      ALL-SYSTEMS.MCAST.NET



[root@callisto:~#] tcpdump -i eth1 host 224.0.1.1

tcpdump: listening on eth1

14:14:48.005140 callisto > NTP.MCAST.NET: igmp v2 report NTP.MCAST.NET (DF) [tos 0xc0] 

graphics/ccc.gif [ttl 1]



[root@castor:~#] tcpdump -i xl0 host 224.0.1.1

tcpdump: listening on xl0

14:14:01.031783 castor.nerdzone.org.ntp > NTP.MCAST.NET.ntp:  v4 client strat 0 poll 6

graphics/ccc.gif prec -28 [tos 0x10]  [ttl 1]

14:15:01.575187 castor.nerdzone.org > NTP.MCAST.NET: igmp v2 report NTP.MCAST.NET [ttl 1]


NOTE

When you run into problems with multicast applications, pay close attention to what interface(s) the application actually binds. The mtest package is a great tool to debug such issues.