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.
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.
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:
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
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
-> 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]
[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
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.
0 comments:
Post a Comment