From: Donald Sharp Date: Fri, 24 Jun 2016 00:42:19 +0000 (-0400) Subject: pimd: Fix register receive pointer arithmetic X-Git-Tag: frr-2.0-rc1~498 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=83d8ff0074871c557555cd8448bb8cf1b0e6f923;p=mirror%2Ffrr.git pimd: Fix register receive pointer arithmetic When receiving the register packet from another pim neighbor at the RP, we were adding an incorrect amount of bytes to find the start of the ip_hdr of the encapsulated data. This commit fixes this issue. Signed-off-by: Donald Sharp --- diff --git a/pimd/pim_register.c b/pimd/pim_register.c index 75c1ba8717..07f9652fe8 100644 --- a/pimd/pim_register.c +++ b/pimd/pim_register.c @@ -193,11 +193,18 @@ pim_register_recv (struct interface *ifp, * We need to know the inner source and dest */ bits = (uint32_t *)tlv_buf; - ip_hdr = (struct ip *)(tlv_buf + PIM_MSG_REGISTER_LEN); + + /* + * tlv_buf points to the start of the |B|N|... Reserved + * Line above. So we need to add 4 bytes to get to the + * start of the actual Encapsulated data. + */ +#define PIM_MSG_REGISTER_BIT_RESERVED_LEN 4 + ip_hdr = (struct ip *)(tlv_buf + PIM_MSG_REGISTER_BIT_RESERVED_LEN); //hlen = (ip_hdr->ip_hl << 2) | PIM_MSG_REGISTER_LEN; //msg = (uint8_t *)tlv_buf + hlen; - group = ip_hdr->ip_src; - source = ip_hdr->ip_dst; + source = ip_hdr->ip_src; + group = ip_hdr->ip_dst; if (I_am_RP (group) && (dest_addr.s_addr == ((RP (group))->rpf_addr.s_addr))) { sentRegisterStop = 0;