]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Fix register receive pointer arithmetic
authorDonald Sharp <sharpd@cumulusnetwroks.com>
Fri, 24 Jun 2016 00:42:19 +0000 (20:42 -0400)
committerDonald Sharp <sharpd@cumulusnetwroks.com>
Fri, 24 Jun 2016 00:42:19 +0000 (20:42 -0400)
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 <sharpd@cumulusnetworks.com>
pimd/pim_register.c

index 75c1ba8717c94e2904af08e2d22c93f7a1812e3d..07f9652fe80758da394a4c3be6c53f2ab7a9f893 100644 (file)
@@ -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;