summaryrefslogtreecommitdiffstats
path: root/ldpd
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2019-01-22 20:50:33 +0100
committerRenato Westphal <renato@opensourcerouting.org>2019-01-22 21:10:07 +0100
commit2d2011708dcc6c01ea3a7b0885b7d1e2e6458872 (patch)
treefd277291201ba3a22c1ef70ba047caa07367ef5f /ldpd
parentMerge pull request #3559 from opensourcerouting/zapi-sanity-checks (diff)
downloadfrr-2d2011708dcc6c01ea3a7b0885b7d1e2e6458872.tar.xz
frr-2d2011708dcc6c01ea3a7b0885b7d1e2e6458872.zip
ldpd: fix corner case in which we wouldn't respect the max pdu length
The calculation to know when an LDP PDU went past the maximum negotiated PDU length was wrong because it wasn't taking the "Version" and "PDU Length" fields into account (total of four bytes). Fix this. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'ldpd')
-rw-r--r--ldpd/labelmapping.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ldpd/labelmapping.c b/ldpd/labelmapping.c
index 944f93331..5e1b422a4 100644
--- a/ldpd/labelmapping.c
+++ b/ldpd/labelmapping.c
@@ -37,7 +37,7 @@ enqueue_pdu(struct nbr *nbr, uint16_t type, struct ibuf *buf, uint16_t size)
struct ldp_hdr *ldp_hdr;
ldp_hdr = ibuf_seek(buf, 0, sizeof(struct ldp_hdr));
- ldp_hdr->length = htons(size);
+ ldp_hdr->length = htons(size - LDP_HDR_DEAD_LEN);
evbuf_enqueue(&nbr->tcp->wbuf, buf);
}
@@ -65,7 +65,7 @@ send_labelmessage(struct nbr *nbr, uint16_t type, struct mapping_head *mh)
/* real size will be set up later */
err |= gen_ldp_hdr(buf, 0);
- size = LDP_HDR_PDU_LEN;
+ size = LDP_HDR_SIZE;
first = 0;
}