ospf ptp link sending unicast packets instead of multicast; peer address config not required

Senthil Kumar Nagappan sknagappan at yahoo.com
Sat May 8 18:26:49 CEST 2021


 For unnumbered ptp interface, if it had borrowed an address with /32, then bird currently wont send hello packets and wont try to form adj. 
    On Saturday, May 8, 2021, 09:33:37 PM GMT+5:30, Joakim Tjernlund <joakim.tjernlund at infinera.com> wrote:  
 
 On Sat, 2021-05-08 at 17:45 +0200, Joakim Tjernlund wrote:
> On Fri, 2021-05-07 at 14:03 +0000, Senthil Kumar Nagappan wrote:
> > Hi Jocke,
> > 
> > yes i missed to take care of the ospfv3/ipv6 cases wherever im sending using allospfrouters as src ip.
> > your are right, mcast changes in packet.c is mostly hack since im not comfortable with the bird code since i have only 1 week of bird code experience.
> > reason i did not change inside ospf_send_to() is,since dst address is one of the parameter to the function and i don't want to override inside it. 
> > In Hello.c, ospf_send_hello they do some what similar, checking different interface types before they call ospf_send_to()
> 
> Ondrej, what is your preference? Perhaps you want to do the impl. yourself?
> 
> 
>   Jocke

Meanwhile I did this:
--- a/proto/ospf/packet.c
+++ b/proto/ospf/packet.c
@@ -415,7 +415,7 @@ ospf_rx_hook(sock *sk, uint len)
      * that (src_local || dst_local), therefore we are eliminating all
      * such cases.
      */
-    if (dst_mcast && !src_local)
+    if (ifa->type != OSPF_IT_PTP && dst_mcast && !src_local)
      return 1;
    if (!dst_mcast && !dst_local)
      return 1;
@@ -430,7 +430,7 @@ ospf_rx_hook(sock *sk, uint len)
      * RFC 5340 says that local (non-vlink) packets use
      * link-local src address, but does not enforce it. Strange.
      */
-    if (dst_mcast && !src_local)
+    if (ifa->type != OSPF_IT_PTP && dst_mcast && !src_local)
      LOG_PKT_WARN("Multicast packet received from non-link-local %I via %s",
                  sk->faddr, ifa->ifname);
  }
@@ -654,6 +654,12 @@ ospf_send_to(struct ospf_iface *ifa, ip_addr dst)
  struct ospf_packet *pkt = (struct ospf_packet *) sk->tbuf;
  uint plen = ntohs(pkt->length);
 
+  /* RFC : On physical point-to-point networks, the IP destination
+  * is always set to the address AllSPFRouters.
+  */
+  if (ifa->type == OSPF_IT_PTP)
+    dst = ifa->all_routers;
+
  if (ospf_is_v2(ifa->oa->po))
    ospf_pkt_finalize2(ifa, pkt, &plen);
  else


In your patch you also have:
--- a/proto/ospf/iface.c
+++ b/proto/ospf/iface.c
@@ -535,6 +535,9 @@ ospf_iface_stubby(struct ospf_iface_patt *ip, struct ifa *addr)
  if (ip->type == OSPF_IT_VLINK)
    return 0;
 
+  if (ip->type == OSPF_IT_PTP)
+    return 0;
+

What is that about? Is it unrelated to AllSPFRouters change?

 Jocke
  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20210508/b4a27f7a/attachment.htm>


More information about the Bird-users mailing list