User Tools

Site Tools


documentation:examples:multicast_with_pim-sm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
documentation:examples:multicast_with_pim-sm [2019/11/08 10:57] – [4. Check VM3 correctly notice this mcast subscriber] olivierdocumentation:examples:multicast_with_pim-sm [2025/06/11 23:20] (current) – [PIM neighbors] olivier
Line 130: Line 130:
 </code> </code>
  
 +===== 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):
 +<code>
 +[root@VM1]~# iperf -c 239.1.1.1 -u -T 32 -t 3000 -i 1
 +------------------------------------------------------------
 +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       Transfer     Bandwidth
 +[  3]  0.0- 1.0 sec   131 KBytes  1.07 Mbits/sec
 +[  3]  1.0- 2.0 sec   128 KBytes  1.05 Mbits/sec
 +[  3]  2.0- 3.0 sec   128 KBytes  1.05 Mbits/sec
 +[  3]  0.0- 3.5 sec   446 KBytes  1.05 Mbits/sec
 +[  3] Sent 311 datagrams
 +(...)
 +</code>
 +
 +On the direct connected VM2, start to check if in non-promiscious mode it sees mcast packets comming:
 +<code>
 +[root@VM2]~# tcpdump -pni em0 -c 2
 +tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 +listening on em0, link-type EN10MB (Ethernet), capture size 262144 bytes
 +15:22:32.517270 IP 10.0.12.1.33482 > 239.1.1.1.5001: UDP, length 1470
 +15:22:32.528668 IP 10.0.12.1.33482 > 239.1.1.1.5001: UDP, length 1470
 +2 packets captured
 +2 packets received by filter
 +0 packets dropped by kernel
 +</code>
 +
 +=> VM2 is receiving mcast packets from 10.0.12.1 to mcast group 239.1.1.1.
 +Now on VM2 start a mcast listener (server receiving), it should receive multicast flow
 +
 +<code>
 +[root@VM2]~# iperf -s -u -B 239.1.1.1%em0 -i 1
 +------------------------------------------------------------
 +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       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
 +[  3]  0.0- 1.0 sec   129 KBytes  1.06 Mbits/sec   0.038 ms  107/  197 (54%)
 +[  3]  1.0- 2.0 sec   128 KBytes  1.05 Mbits/sec   0.054 ms    0/   89 (0%)
 +[  3]  2.0- 3.0 sec   128 KBytes  1.05 Mbits/sec   0.021 ms    0/   89 (0%)
 +[  3]  3.0- 4.0 sec   128 KBytes  1.05 Mbits/sec   0.025 ms    0/   89 (0%)
 +[  3]  4.0- 5.0 sec   128 KBytes  1.05 Mbits/sec   0.024 ms    0/   89 (0%)
 +[  3]  5.0- 6.0 sec   129 KBytes  1.06 Mbits/sec   0.024 ms    0/   90 (0%)
 +[  3]  6.0- 7.0 sec   128 KBytes  1.05 Mbits/sec   0.024 ms    0/   89 (0%)
 +(...)
 +</code>
 +=> Notice the mcast receiver is correctly receiving at 1Mb/s.
 +
 +Here is a non working example (here because source interface not given, and it uses the other one):
 +<code>
 +[root@VM2]~# iperf -s -u -B 239.1.1.1 -i 1
 +------------------------------------------------------------
 +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)
 +------------------------------------------------------------
 +(...)
 +</code>
 +
 +=> Here it doesn't receive traffic and stay in "waiting" mode forever.
 ===== Checking pimd behavior ===== ===== Checking pimd behavior =====
  
Line 137: Line 211:
  
 <code> <code>
-[root@VM2]~# pimd -r 
-Virtual Interface Table ====================================================== 
-Vif  Local Address    Subnet              Thresh  Flags      Neighbors 
----  ---------------  ------------------  ------  ---------  ----------------- 
-  0  10.0.12.254      10.0.12/24                DR NO-NBR 
-  1  10.0.23.2        10.0.23/24                PIM        10.0.23.3 
-  2  10.0.12.254      register_vif0            1 
  
- Vif  SSM Group        Sources+root@VM2:~ # pimctl show
  
-Multicast Routing Table ====================================================== +PIM Interface Table 
---------------------------------- (*,*,G) ------------------------------------ +Interface         State     Address            Priority  Hello  Nbr  DR Address      DR Priori 
-Number of Groups: 0 +ty 
-Number of Cache MIRRORs: 0 +em0               Up        10.0.12.2                     30    0  10.0.12.2 
-------------------------------------------------------------------------------+ 1 
 +em1               Up        10.0.23.2                     30    1  10.0.23.3 
 + 1 
 + 
 +PIM Neighbor Table 
 +Interface         Address            Priority  Mode  Uptime/Expires 
 +em1               10.0.23.3                  DR    0h2m51s/0h1m25s 
 + 
 +Multicast Routing Table 
 +Source            Group            RP Address       Flags 
 +10.0.12.1         239.1.1.1        10.0.23.2        SG 
 + 
 + 
 +Number of Groups        1 
 +Number of Cache MIRRORs : 0 
 + 
 +PIM Candidate Rendez-Vous Point Table 
 +Group Address     RP Address       Prio  Holdtime  Expires 
 +232.0.0.0/      169.254.0.1           Forever  Never 
 +224.0.0.0/      10.0.23.2                 150  0h1m45s 
 + 
 +Current BSR address: 10.0.23.3 
 + 
 +PIM Rendez-Vous Point Set Table 
 +Group Address     RP Address       Prio  Holdtime  Type 
 +232.0.0.0/      169.254.0.1           Forever  Static 
 +224.0.0.0/      10.0.23.2                 105  Dynamic
 </code> </code>
  
Line 157: Line 250:
  
 <code> <code>
-[root@VM3]~# pimd -r +root@VM3:~ # pimctl show 
-Virtual Interface Table ====================================================== + 
-Vif  Local Address    Subnet              Thresh  Flags      Neighbors +PIM Interface Table 
----  ---------------  ------------------  ------  ---------  ----------------- +Interface         State     Address            Priority  Hello  Nbr  DR Address      DR Priori 
-  0  10.0.23.3        10.0.23/24               1  DR PIM     10.0.23.2 +ty 
-   10.0.34.254      10.0.34/24               1  DR NO-NBR +em1               Up        10.0.23.3                     30    1  10.0.23.3 
-  2  10.0.23.3        register_vif0            1+ 1 
 +em2               Up        10.0.34.3                     30    0  10.0.34.3 
 + 1 
 + 
 +PIM Neighbor Table 
 +Interface         Address            Priority  Mode  Uptime/Expires 
 +em1               10.0.23.2                 1        0h3m55s/0h1m15s 
 + 
 +Multicast Routing Table 
 +Source            Group            RP Address       Flags 
 + 
 +Number of Groups        : 0 
 +Number of Cache MIRRORs : 0 
 + 
 +PIM Candidate Rendez-Vous Point Table 
 +Group Address     RP Address       Prio  Holdtime  Expires 
 +232.0.0.0/8       169.254.0.1         1   Forever  Never 
 +224.0.0.0/      10.0.23.2                 150  0h2m25s
  
- Vif  SSM Group        Sources+Current BSR address: 10.0.23.3
  
-Multicast Routing Table ====================================================== +PIM Rendez-Vous Point Set Table 
---------------------------------- (*,*,G) ------------------------------------ +Group Address     RP Address       Prio  Holdtime  Type 
-Number of Groups: +232.0.0.0/      169.254.0.1           Forever  Static 
-Number of Cache MIRRORs: 0 +224.0.0.0/      10.0.23.2                 145  Dynamic
-------------------------------------------------------------------------------+
 </code> </code>
  
documentation/examples/multicast_with_pim-sm.1573207071.txt.gz · Last modified: 2019/11/08 10:57 by olivier

Except where otherwise noted, content on this wiki is licensed under the following license: BSD 2-Clause
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki