documentation:examples:multicast_with_pim-sm
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
documentation:examples:multicast_with_pim-sm [2019/11/06 09:18] – [Router 2] olivier | documentation:examples:multicast_with_pim-sm [2019/11/08 15:18] – [Checking pimd behavior] olivier | ||
---|---|---|---|
Line 23: | Line 23: | ||
Start the lab with 4 routers simulating an e1000 NIC (vtnet interface and they didn't support mcast routing on FreeBSD): | Start the lab with 4 routers simulating an e1000 NIC (vtnet interface and they didn't support mcast routing on FreeBSD): | ||
< | < | ||
- | BSDRP-lab-bhyve.sh -n 4 -e -i BSDRP-1.702-full-amd64-serial.img.xz | + | tools/BSDRP-lab-bhyve.sh -n 4 -e -i BSDRP-1.96-full-amd64-serial.img.xz |
BSD Router Project (http:// | BSD Router Project (http:// | ||
Setting-up a virtual lab with 4 VM(s): | Setting-up a virtual lab with 4 VM(s): | ||
- | - Working directory: /tmp/BSDRP | + | - Working directory: /root/BSDRP-VMs |
- | - Each VM have 1 core(s) and 256M RAM | + | - Each VM has 1 core and 512M RAM |
- Emulated NIC: e1000 | - Emulated NIC: e1000 | ||
- Switch mode: bridge + tap | - Switch mode: bridge + tap | ||
- 0 LAN(s) between all VM | - 0 LAN(s) between all VM | ||
- Full mesh Ethernet links between each VM | - Full mesh Ethernet links between each VM | ||
- | VM 1 have the following NIC: | + | VM 1 has the following NIC: |
- | - vtnet0 | + | - em0 connected to VM 2 |
- | - vtnet1 | + | - em1 connected to VM 3 |
- | - vtnet2 | + | - em2 connected to VM 4 |
- | VM 2 have the following NIC: | + | VM 2 has the following NIC: |
- | - vtnet0 | + | - em0 connected to VM 1 |
- | - vtnet1 | + | - em1 connected to VM 3 |
- | - vtnet2 | + | - em2 connected to VM 4 |
- | VM 3 have the following NIC: | + | VM 3 has the following NIC: |
- | - vtnet0 | + | - em0 connected to VM 1 |
- | - vtnet1 | + | - em1 connected to VM 2 |
- | - vtnet2 | + | - em2 connected to VM 4 |
- | VM 4 have the following NIC: | + | VM 4 has the following NIC: |
- | - vtnet0 | + | - em0 connected to VM 1 |
- | - vtnet1 | + | - em1 connected to VM 2 |
- | - vtnet2 | + | - em2 connected to VM 3 |
- | For connecting to VM' | + | To connect |
- | - VM 1 : cu -l /dev/nmdm1B | + | - VM 1 : cu -l /dev/nmdm-BSDRP.1B |
- | - VM 2 : cu -l /dev/nmdm2B | + | - VM 2 : cu -l /dev/nmdm-BSDRP.2B |
- | - VM 3 : cu -l /dev/nmdm3B | + | - VM 3 : cu -l /dev/nmdm-BSDRP.3B |
- | - VM 4 : cu -l /dev/nmdm4B | + | - VM 4 : cu -l /dev/nmdm-BSDRP.4B |
</ | </ | ||
Line 66: | Line 66: | ||
| | ||
| | ||
- | hostname | + | service |
service netif restart | service netif restart | ||
service routing restart | service routing restart | ||
Line 88: | Line 88: | ||
EOF | EOF | ||
- | hostname | + | service |
service netif restart | service netif restart | ||
service routing restart | service routing restart | ||
Line 99: | Line 99: | ||
< | < | ||
- | sysrc hostname=VM3 | + | sysrc hostname=VM3 |
- | sysrc ifconfig_em1=" | + | |
- | sysrc ifconfig_em2=" | + | |
- | sysrc defaultrouter="10.0.23.2" | + | |
- | sysrc pimd_enable=YES | + | |
cat > / | cat > / | ||
Line 110: | Line 110: | ||
EOF | EOF | ||
- | hostname | + | service |
service netif restart | service netif restart | ||
service routing restart | service routing restart | ||
Line 119: | Line 119: | ||
< | < | ||
- | sysrc hostname=VM4 | + | sysrc hostname=VM4 |
- | sysrc gateway_enable=NO | + | |
- | sysrc ipv6_gateway_enable=NO | + | |
- | sysrc ifconfig_em2=" | + | |
- | sysrc defaultrouter="10.0.34.254" | + | |
- | hostname | + | service |
service netif restart | service netif restart | ||
service routing restart | service routing restart | ||
config save | config save | ||
+ | </ | ||
+ | |||
+ | ===== Checking NIC drivers and Bhyve compatibility with multicast ===== | ||
+ | |||
+ | Before to star with advanced routing setup, just start to test simple multicast between 2 relatives host: Some NIC (vtnet) or some hypervisors network setup aren't compliant with very simple multicast. | ||
+ | |||
+ | On VM1, start a mcast generator (client emitting mcast): | ||
+ | < | ||
+ | [root@VM1]~# | ||
+ | ------------------------------------------------------------ | ||
+ | Client connecting to 239.1.1.1, UDP port 5001 | ||
+ | Sending 1470 byte datagrams, IPG target: 11215.21 us (kalman adjust) | ||
+ | Setting multicast TTL to 32 | ||
+ | UDP buffer size: 9.00 KByte (default) | ||
+ | ------------------------------------------------------------ | ||
+ | [ 3] local 10.0.12.1 port 46636 connected with 239.1.1.1 port 5001 | ||
+ | [ ID] Interval | ||
+ | [ 3] 0.0- 1.0 sec 131 KBytes | ||
+ | [ 3] 1.0- 2.0 sec 128 KBytes | ||
+ | [ 3] 2.0- 3.0 sec 128 KBytes | ||
+ | [ 3] 0.0- 3.5 sec 446 KBytes | ||
+ | [ 3] Sent 311 datagrams | ||
+ | (...) | ||
+ | </ | ||
+ | |||
+ | On the direct connected VM2, start a mcast listener (server receiving), it should receive multicast flow | ||
+ | |||
+ | < | ||
+ | [root@VM2]~# | ||
+ | ------------------------------------------------------------ | ||
+ | Server listening on UDP port 5001 | ||
+ | Binding to local address 239.1.1.1 | ||
+ | Joining multicast group 239.1.1.1 | ||
+ | Receiving 1470 byte datagrams | ||
+ | UDP buffer size: 41.1 KByte (default) | ||
+ | ------------------------------------------------------------ | ||
+ | [ 3] local 239.1.1.1 port 5001 connected with 192.168.100.149 port 35181 | ||
+ | [ ID] Interval | ||
+ | [ 3] 0.0- 1.0 sec 129 KBytes | ||
+ | [ 3] 1.0- 2.0 sec 128 KBytes | ||
+ | [ 3] 2.0- 3.0 sec 128 KBytes | ||
+ | [ 3] 3.0- 4.0 sec 128 KBytes | ||
+ | [ 3] 4.0- 5.0 sec 128 KBytes | ||
+ | [ 3] 5.0- 6.0 sec 129 KBytes | ||
+ | [ 3] 6.0- 7.0 sec 128 KBytes | ||
+ | (...) | ||
+ | </ | ||
+ | => Notice the mcast receiver is correctly receiving at 1Mb/s. | ||
+ | |||
+ | Here is a non working example: | ||
+ | < | ||
+ | [root@VM2]~# | ||
+ | ------------------------------------------------------------ | ||
+ | Server listening on UDP port 5001 | ||
+ | Binding to local address 239.1.1.1 | ||
+ | Joining multicast group 239.1.1.1 | ||
+ | Receiving 1470 byte datagrams | ||
+ | UDP buffer size: 41.1 KByte (default) | ||
+ | ------------------------------------------------------------ | ||
</ | </ | ||
Line 138: | Line 197: | ||
< | < | ||
[root@VM2]~# | [root@VM2]~# | ||
- | Virtual Interface Table | + | Virtual Interface Table ====================================================== |
- | | + | Vif Local Address |
- | | + | --- --------------- |
- | | + | |
- | | + | 1 10.0.23.2 |
+ | 2 10.0.12.254 | ||
- | Multicast Routing Table | + | |
- | | + | |
- | --------------------------(*, | + | Multicast Routing Table ====================================================== |
+ | --------------------------------- (*,*,G) ------------------------------------ | ||
Number of Groups: 0 | Number of Groups: 0 | ||
Number of Cache MIRRORs: 0 | Number of Cache MIRRORs: 0 | ||
+ | ------------------------------------------------------------------------------ | ||
</ | </ | ||
- | => VM2 sees VM3 | + | => VM2 sees VM3 as PIM neighbor |
< | < | ||
[root@VM3]~# | [root@VM3]~# | ||
- | Virtual Interface Table | + | Virtual Interface Table ====================================================== |
- | | + | Vif Local Address |
- | | + | --- --------------- |
- | | + | |
- | | + | 1 10.0.34.254 |
+ | 2 10.0.23.3 | ||
- | Multicast Routing Table | + | |
- | | + | |
- | --------------------------(*, | + | Multicast Routing Table ====================================================== |
+ | --------------------------------- (*,*,G) ------------------------------------ | ||
Number of Groups: 0 | Number of Groups: 0 | ||
Number of Cache MIRRORs: 0 | Number of Cache MIRRORs: 0 | ||
+ | ------------------------------------------------------------------------------ | ||
</ | </ | ||
- | => VM3 sees VM2. | + | => VM3 sees VM2 as PIM Designated Router neighbor. |
==== Does PIM daemon locally register to PIM mcast group ? ==== | ==== Does PIM daemon locally register to PIM mcast group ? ==== | ||
Line 306: | Line 371: | ||
Vif Local Address | Vif Local Address | ||
--- --------------- | --- --------------- | ||
- | 0 10.0.12.2 | + | 0 10.0.12.254 |
1 10.0.23.2 | 1 10.0.23.2 | ||
- | 2 10.0.12.2 | + | 2 10.0.12.254 |
| | ||
Line 316: | Line 381: | ||
Source | Source | ||
--------------- | --------------- | ||
- | 10.0.12.1 | + | 10.0.12.1 |
- | Joined | + | Joined |
Pruned | Pruned | ||
Leaves | Leaves | ||
Asserted oifs: ... | Asserted oifs: ... | ||
- | Outgoing oifs: ..o | + | Outgoing oifs: ... |
Incoming | Incoming | ||
TIMERS: | TIMERS: | ||
- | | + | |
--------------------------------- (*,*,G) ------------------------------------ | --------------------------------- (*,*,G) ------------------------------------ | ||
Number of Groups: 1 | Number of Groups: 1 | ||
- | Number of Cache MIRRORs: | + | Number of Cache MIRRORs: |
------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||
</ | </ | ||
Line 339: | Line 404: | ||
IPv4 Virtual Interface Table | IPv4 Virtual Interface Table | ||
| | ||
- | 0 | + | 0 |
1 | 1 | ||
- | 2 | + | 2 |
IPv4 Multicast Forwarding Table | IPv4 Multicast Forwarding Table | ||
| | ||
- | | + | |
Line 351: | Line 416: | ||
IPv6 Multicast Forwarding Table is empty | IPv6 Multicast Forwarding Table is empty | ||
+ | |||
</ | </ | ||
- | VM2 had update its mroute table for adding a source for group 239.1.1.1 comming from vif0 (toward VM1). | + | VM2 had update its mroute table for adding a source for group 239.1.1.1 comming from ' |
==== 3. Start a mcast receiver (IPerf server) on VM4 ==== | ==== 3. Start a mcast receiver (IPerf server) on VM4 ==== | ||
Line 389: | Line 455: | ||
< | < | ||
- | [root@VM3]~# | + | [root@VM3]~# |
Virtual Interface Table ====================================================== | Virtual Interface Table ====================================================== | ||
Vif Local Address | Vif Local Address | ||
--- --------------- | --- --------------- | ||
0 10.0.23.3 | 0 10.0.23.3 | ||
- | 1 10.0.34.3 | + | 1 10.0.34.254 |
2 10.0.23.3 | 2 10.0.23.3 | ||
Line 412: | Line 478: | ||
TIMERS: | TIMERS: | ||
- | | + | |
----------------------------------- (S,G) ------------------------------------ | ----------------------------------- (S,G) ------------------------------------ | ||
Source | Source | ||
Line 425: | Line 491: | ||
TIMERS: | TIMERS: | ||
- | 195 50 0 | + | 200 55 0 |
--------------------------------- (*,*,G) ------------------------------------ | --------------------------------- (*,*,G) ------------------------------------ | ||
Number of Groups: 1 | Number of Groups: 1 | ||
Line 439: | Line 505: | ||
IPv4 Virtual Interface Table | IPv4 Virtual Interface Table | ||
| | ||
- | 0 | + | 0 |
- | 1 | + | 1 |
2 | 2 | ||
IPv4 Multicast Forwarding Table | IPv4 Multicast Forwarding Table | ||
| | ||
- | | + | |
Line 451: | Line 517: | ||
IPv6 Multicast Forwarding Table is empty | IPv6 Multicast Forwarding Table is empty | ||
- | |||
</ | </ | ||
- | VM3 correctly learn that there is a subscriber to group 239.1.1.1 on interface vif1 (toward VM4). | + | VM3 correctly learn that there is a subscriber to group 239.1.1.1 on interface vif1 (toward VM4) and the source is on vif0 (toward VM2). |
documentation/examples/multicast_with_pim-sm.txt · Last modified: 2019/11/08 19:22 by olivier