mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 05:21:31 +00:00
nhrpd: add NHS details in NAT Extension header
Hub uses this to check if is itself behind a NAT Signed-off-by: Reuben Dowle <reuben.dowle@4rf.com>
This commit is contained in:
parent
1bd508da17
commit
94eae49d01
@ -162,7 +162,7 @@ static int nhrp_reg_send_req(struct thread *t)
|
||||
struct interface *ifp = nhs->ifp;
|
||||
struct nhrp_interface *nifp = ifp->info;
|
||||
struct nhrp_afi_data *if_ad = &nifp->afi[nhs->afi];
|
||||
union sockunion *dst_proto;
|
||||
union sockunion *dst_proto, nhs_proto;
|
||||
struct zbuf *zb;
|
||||
struct nhrp_packet_header *hdr;
|
||||
struct nhrp_extension_header *ext;
|
||||
@ -214,9 +214,22 @@ static int nhrp_reg_send_req(struct thread *t)
|
||||
nhrp_ext_request(zb, hdr, ifp);
|
||||
|
||||
/* Cisco NAT detection extension */
|
||||
if (sockunion_family(&r->proto_addr) != AF_UNSPEC) {
|
||||
nhs_proto = r->proto_addr;
|
||||
} else if (sockunion_family(&nhs->proto_addr) != AF_UNSPEC) {
|
||||
nhs_proto = nhs->proto_addr;
|
||||
} else {
|
||||
/* cisco magic: If NHS is not known then use all 0s as
|
||||
* client protocol address in NAT Extension header
|
||||
*/
|
||||
memset(&nhs_proto, 0, sizeof(nhs_proto));
|
||||
sockunion_family(&nhs_proto) = afi2family(nhs->afi);
|
||||
}
|
||||
|
||||
hdr->flags |= htons(NHRP_FLAG_REGISTRATION_NAT);
|
||||
ext = nhrp_ext_push(zb, hdr, NHRP_EXTENSION_NAT_ADDRESS);
|
||||
cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS, &nifp->nbma, &if_ad->addr);
|
||||
/* push NHS details */
|
||||
cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS, &r->peer->vc->remote.nbma, &nhs_proto);
|
||||
cie->prefix_length = 8 * sockunion_get_addrlen(&if_ad->addr);
|
||||
cie->mtu = htons(if_ad->mtu);
|
||||
nhrp_ext_complete(zb, ext);
|
||||
|
Loading…
Reference in New Issue
Block a user