Re: [pim] Implementation Question
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [pim] Implementation Question



Nikhil Ninan wrote:
Hello there,
I am researching into PIM-SM protocol behaviour. This requires me to create PIM-SM messsages to be used in my test-bed. For the life of me, I cant get the PIM-SM checksum value calculated properly. In the specification it says, that checksum is the one's complement of the PIM message. Does that include the IP header and if so, what about the checksum field within the IP header. Any help would be much appreaciated.

First of all, the IP header checksum should be taken care of by the operating system. If this is IPv4 PIM, the PIM checksum is based on just the PIM message itself (for IPv6 there is a pseudo header with info from IP header as well), see 4.9 in RFC 4601.

I think the following code should work for the checksum. It's based
on some code from libnet and pim6sd. I cooked this together now and
have not tested it. You would call pim_cksum() with pointer to PIM
header where the PIM payload follows directly behind in the same
buffer.

Stig

/* thanks to libnet code */
uint32_t in_cksum(uint16_t *addr, size_t len) {
    uint32_t sum = 0;

    while (len > 1) {
        sum += *addr++;
        len -= 2;
    }
    if (len == 1)
        sum += *addr;

    return (sum);
}

void pim_cksum(struct pim *pim, size_t len) {
    uint32_t sum;

    pim->pim_cksum = 0;
    /* pad with 0 if odd len, assuming buffer large enough */
    if (len % 2)
        ((char *)pim)[len] = 0;
    sum = in_cksum((uint16_t *)pim, len);
    sum = (sum >> 16) + (sum & 0xffff);
    sum += sum >> 16;
    pim->pim_cksum = ~sum & 0xffff;
}

Stig

Cheers
Nikhil Ninan

_______________________________________________
pim mailing list
pim at ietf.org
https://www1.ietf.org/mailman/listinfo/pim


_______________________________________________
pim mailing list
pim at ietf.org
https://www1.ietf.org/mailman/listinfo/pim




Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.