From 74fc2957ce09a7128dd036ecd19c38c5f4adf1b9 Mon Sep 17 00:00:00 2001 From: Lou Berger Date: Fri, 21 Oct 2022 20:35:13 +0000 Subject: [PATCH] ospf: optimization for FRR's P2MP mode FRR implements a non-standard, but compatible approach for sending update LSAs (it always send to 224.0.0.5) on P2MP interfaces. This change makes it so acks are also sent to 224.0.0.5. Since the acks are multicast, this allows an optimization where we don't send back out the incoming P2MP interface immediately allow time to rx multicast ack from neighbors on the same net that rx'ed the original (multicast) update. Signed-off-by: Lou Berger (cherry picked from commit c706f0e32ba8aa8780a0618b6fbba364c383ae05) --- ospfd/ospf_flood.c | 7 +++++++ ospfd/ospf_packet.c | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c index e686a93ba9..c2af09a679 100644 --- a/ospfd/ospf_flood.c +++ b/ospfd/ospf_flood.c @@ -648,6 +648,13 @@ int ospf_flood_through_interface(struct ospf_interface *oi, OSPF_SEND_PACKET_DIRECT); } } else + /* Optimization: for P2MP interfaces, + don't send back out the incoming interface immediately, + allow time to rx multicast ack to the rx'ed (multicast) + update */ + if (retx_flag != 1 || + oi->type != OSPF_IFTYPE_POINTOMULTIPOINT || inbr == NULL || + oi != inbr->oi) ospf_ls_upd_send_lsa(oi->nbr_self, lsa, OSPF_SEND_PACKET_INDIRECT); diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index 57643f637e..466b5fa2a2 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -4220,7 +4220,8 @@ static void ospf_ls_ack_send_list(struct ospf_interface *oi, struct list *ack, op->length = length; /* Decide destination address. */ - if (oi->type == OSPF_IFTYPE_POINTOPOINT) + if (oi->type == OSPF_IFTYPE_POINTOPOINT || + oi->type == OSPF_IFTYPE_POINTOMULTIPOINT) op->dst.s_addr = htonl(OSPF_ALLSPFROUTERS); else op->dst.s_addr = dst.s_addr; -- 2.39.5