]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: Fix register message checksum
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 8 Jun 2016 15:47:33 +0000 (11:47 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 8 Jun 2016 16:21:59 +0000 (12:21 -0400)
The register message checksum was being calculated over
the first 4 bytes of the packet, instead of the first
8 bytes.  From the RFC:

PIM Version, Type, Reserved, Checksum
        Described in Section 4.9. Note that in order to reduce
        encapsulation overhead, the checksum for Registers is done only
        on the first 8 bytes of the packet, including the PIM header and
        the next 4 bytes, excluding the data packet portion.  For
        interoperability reasons, a message carrying a checksum
        calculated over the entire PIM Register message should also be
        accepted.  When calculating the checksum, the IPv6 pseudoheader
        "Upper-Layer Packet Length" is set to 8.

Ticket: CM-11265
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_register.c

index 406f91494a0d6a3c1893d283ddad7e50084ddcdc..2d0de586d77ebb627f5122bb984101142c989082 100644 (file)
@@ -88,7 +88,7 @@ pim_register_send (const struct ip *ip_hdr, struct pim_rpf *rpg)
   plen = ntohs(ip_hdr->ip_len);
   memcpy(b1, (const unsigned char *)ip_hdr, plen);
 
-  pim_msg_build_header(buffer, plen + PIM_MSG_HEADER_LEN, PIM_MSG_TYPE_REGISTER);
+  pim_msg_build_header(buffer, plen + PIM_MSG_REGISTER_LEN, PIM_MSG_TYPE_REGISTER);
 
   if (pim_msg_send(pinfo->pim_sock_fd,
                   rpg->rpf_addr,