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