Skip to content

Commit

Permalink
ospf: optimization for FRR's P2MP mode
Browse files Browse the repository at this point in the history
	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 <[email protected]>
  • Loading branch information
louberger committed Oct 25, 2022
1 parent 675ba67 commit c706f0e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
7 changes: 7 additions & 0 deletions ospfd/ospf_flood.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
3 changes: 2 additions & 1 deletion ospfd/ospf_packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit c706f0e

Please sign in to comment.