<div dir="ltr">Hi there!<br><br>Firstly, sorry for my French ;)<br><br>Recently I tried to test BFD implementation in 1.4.0 BIRD release. <br><br>Case is "OSPF ECMP with less-second failover". On one side - Extreme Networks switches, other side - several boxes with Debian and BIRD, of course.<br>
<br>So, I find out several annoying things.<br><br>First thing: BIRD BFD implementation uses non-RFC5881 source UDP port for outgoing packets. Here some tcpdump:<br>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br>
20:34:21.355747 <BIRD_BOX_MAC> > <EXTREME_SW_MAC>, ethertype 802.1Q (0x8100), length 70: vlan <vlan>, p 0, ethertype IPv4, (tos 0xc0, ttl 255, id 20806, offset 0, flags [none], proto UDP (17), length 52)<br>
    <BIRD_BOX_IP>.39156 > <EXTREME_SW_IP>.3784: BFDv1, length: 24<br>Control, State Init, Flags: [none], Diagnostic: No Diagnostic (0x00)<br>Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 24<br>
My Discriminator: 0x8a82eb8a, Your Discriminator: 0x00000002<br> Desired min Tx Interval:    1000 ms<br> Required min Rx Interval:     10 ms<br> Required min Echo Interval:    0 ms<br>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br>
<br>I saw many messages in switch logs: <br><br>> <Warn:BFD.RxPktInv> Received BFD an invalid packet on VLAN <vlan> Error:Invalid UDP src port Number<div><br></div><div>BFD session between BIRD and Extreme Networks switch can't be established.</div>
<div><br>So, src port for outgoing BFD-packet from BIRD is 39156, when RFC5881 contains:<br>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br>4. Encapsulation<br><br>   BFD Control packets MUST be transmitted in UDP packets with<br>
   destination port 3784, within an IPv4 or IPv6 packet.  The source<br>   port MUST be in the range 49152 through 65535.<br>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<div><br></div><div>Ok, fixing (only for test purposes): </div>
<div>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br></div><div><div>root@debian-1:~# sysctl net.ipv4.ip_local_port_range</div><div>net.ipv4.ip_local_port_range = 32768<span class="" style="white-space:pre">       </span>61000</div>
<div>root@debian-1:~# sysctl -w net.ipv4.ip_local_port_range="49152 65535"<br></div><div>net.ipv4.ip_local_port_range = 49152 65535</div><div>root@debian-1:~# sysctl net.ipv4.ip_local_port_range</div><div>net.ipv4.ip_local_port_range = 49152<span class="" style="white-space:pre">    </span>65535</div>
</div><div>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br></div><div><br></div><div>After this BFD session was estabilished. </div><div><br></div><div>Of course, net.ipv4.ip_local_port_range tuning seems to be not usable in production environment, and need to be fixed in BIRD, I think. Just because some network hardware vendors interprets RFC's exactly as written ;)</div>








<div><br></div><div>But now - second thing: 'protocol bfd' block in bird.conf useless. Here part of config:</div><div><div>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br></div></div><div><div>protocol bfd FOR_OSPF {</div>
<div><span class="" style="white-space:pre">    </span>interface <BIRD_BOX_IP>/32 {</div><div><span class="" style="white-space:pre">         </span>interval 50 ms;</div><div><span class="" style="white-space:pre">            </span>min rx interval 50 ms;    # presence of this string by the docs does not matter</div>








<div><span class="" style="white-space:pre">            </span>min tx interval 50 ms;    # presence of this string by the docs does not matter</div>







<div><span class="" style="white-space:pre">            </span>multiplier 3;</div><div><span class="" style="white-space:pre">      </span>};</div><div><span class="" style="white-space:pre"> </span>neighbor <EXTREME_SW_IP> dev "<BIRD_BOX_IP>" local <BIRD_BOX_IP>;   # presence of this string by the docs does not matter</div>








<div>};</div></div><div><div>protocol ospf OSPF1 {</div><div><span class="" style="white-space:pre">...</span></div><div><span class="" style="white-space:pre">        </span>area 0.0.0.0 {<br></div><div><span class="" style="white-space:pre">           </span>interface <BIRD_BOX_IP>/32 {</div>
<div>...<br></div><div><span class="" style="white-space:pre">                        </span>bfd;</div><div><span class="" style="white-space:pre">               </span>};</div><div><span class="" style="white-space:pre"> </span>};</div><div>...<br></div>
<div>};<br></div></div><div><div>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br></div></div><div><br></div><div>And what I see with tcpdump:</div><div><div>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=</div>
</div><div><div>13:09:05.433336 <BIRD_BOX_MAC> > <EXTREME_SW_MAC>, ethertype 802.1Q (0x8100), length 70: vlan <vlan>, p 0, ethertype IPv4, (tos 0xc0, ttl 255, id 6662, offset 0, flags [none], proto UDP (17), length 52)</div>
<div>    <BIRD_BOX_IP>.62698 > <EXTREME_SW_IP>.3784: BFDv1, length: 24</div><div><span class="" style="white-space:pre">   </span>Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)</div><div><span class="" style="white-space:pre"> </span>Detection Timer Multiplier: 5 (500 ms Detection time), BFD Length: 24</div>
<div><span class="" style="white-space:pre">    </span>My Discriminator: 0x35e75227, Your Discriminator: 0x00000007</div><div><span class="" style="white-space:pre">       </span>  Desired min Tx Interval:     100 ms</div><div><span class="" style="white-space:pre">   </span>  Required min Rx Interval:     10 ms</div>
<div><span class="" style="white-space:pre">    </span>  Required min Echo Interval:    0 ms</div></div><div><div>=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br></div></div><div><br></div><div>There is no any configured intervals and multiplier. Just default values. I think this is not correct.</div>
<div><br></div><div>Maybe I misconfigure BIRD? Please advise.  </div><div><br></div><div>Thanks for attention.</div></div></div>