From f7f9a3770e5fed62d642a8feef9f972710aeba7b Mon Sep 17 00:00:00 2001 From: Amol Lad Date: Sat, 17 Oct 2020 11:02:19 +0530 Subject: [PATCH] nhrpd: Set correct prefix length in nhrp registration RFC2332 section 5.2.1 states (regarding the uniqueness bit) that: Note that when this bit is set in an NHRP Registration Request, only a single CIE may be specified in the NHRP Registration Request and that CIE must have the Prefix Length field set to 0xFF. the prefix length is the widest acceptable destination protocol address prefix. However, if "Uniqueness" bit is set then it must be 255 This patch implements this requirement, which fixes interoperability with Cisco NHRP hub routers. Signed-off-by: Reuben Dowle --- nhrpd/nhrp_nhs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) mode change 100644 => 100755 nhrpd/nhrp_nhs.c diff --git a/nhrpd/nhrp_nhs.c b/nhrpd/nhrp_nhs.c old mode 100644 new mode 100755 index 085cab347f..3b604593c8 --- a/nhrpd/nhrp_nhs.c +++ b/nhrpd/nhrp_nhs.c @@ -197,7 +197,8 @@ static int nhrp_reg_send_req(struct thread *t) /* FIXME: push CIE for each local protocol address */ cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS, NULL, NULL); - cie->prefix_length = 0xff; + /* RFC2332 5.2.1 if unique is set then prefix length must be 0xff */ + cie->prefix_length = (if_ad->flags & NHRP_IFF_REG_NO_UNIQUE) ? 8 * sockunion_get_addrlen(dst_proto) : 0xff; cie->holding_time = htons(if_ad->holdtime); cie->mtu = htons(if_ad->mtu); -- 2.39.5