Subject: Implementors: format used for null Registers?

From: Bill Fenner <[email-masked]>
Date: Fri, 1 Sep 2000 17:06:31 -0700

I'd like to hear from implementors what format they use for null
Registers.  The current spec says "the Multicast data packet portion
contains only a dummy header with S as the source address, G as the
destination address, and a data length of zero."

In particular, what do you use for the first byte of the packet?  Do you
fill in the IP version?  Do you fill it in with zero?  Do you leave an
arbitrary value?

(I'm worried about IPv6 Null Registers, especially if there are
implementations that leave the first byte as arbitrary data)

  Bill

---

From: Ravi Puvvala <[email-masked]>
Date: Fri, 01 Sep 2000 18:02:59 -0700

Bill Fenner writes:

| I'd like to hear from implementors what format they use for null
| Registers.  The current spec says "the Multicast data packet portion
| contains only a dummy header with S as the source address, G as the
| destination address, and a data length of zero."
| 
| In particular, what do you use for the first byte of the packet?  Do you
| fill in the IP version?  Do you fill it in with zero?  Do you leave an
| arbitrary value?

Fill in the IP version.

| (I'm worried about IPv6 Null Registers, especially if there are
| implementations that leave the first byte as arbitrary data)

Ravi

---

From: Pavlin Ivanov Radoslavov <[email-masked]>
Date: Fri, 01 Sep 2000 18:17:18 -0700

> implementations that leave the first byte as arbitrary data)

In pimd (IPv4) from USC the first octet is the the IP version (4)
and the header length (20 >> 2).

In pim6sd from KAME, the first octet is the IP version (6), and
traffic class of 0 (please anyone from KAME correct me if
some other parts of the code modifies it later).

Below is the concrete code for the rest of the fields (in case it
matters).

Pavlin

pimd:
    ip->ip_v     = IPVERSION;
    ip->ip_hl    = (sizeof(struct ip) >> 2);
    ip->ip_tos   = 0;
    ip->ip_id    = 0;
    ip->ip_off   = 0;
    ip->ip_p     = IPPROTO_UDP;		/* XXX: bogus */
    ip->ip_len   = htons(sizeof(struct ip));
    ip->ip_ttl   = MINTTL;
    ip->ip_sum   = 0;
    ip->ip_sum   = inet_cksum((u_int16 *)ip, sizeof(struct ip));

pim6sd:
    ip->ip6_plen= 0;
    ip->ip6_flow=0;
    ip->ip6_vfc = 0x60;
    ip->ip6_hlim = MINHLIM;
    ip->ip6_nxt = IPPROTO_NONE;

---

From: JINMEI Tatuya / 神明達哉<[email-masked]>
Date: Wed, 06 Sep 2000 12:28:45 +0900

>>>>> On Fri, 01 Sep 2000 18:17:18 -0700, 
>>>>> Pavlin Ivanov Radoslavov <[email-masked]> said:

> some other parts of the code modifies it later).

You're 100% correct. Thanks for responding on behalf of KAME and sorry
for my delayed response. I don't know what other implementations
(e.g. mrtd) do this.

I'm not sure about the exact concern of Bill, but since IPv6 PIM is
meaningful only with IPv6 transport, we should restrict the inner
header of an IPv6 PIM register message to an IPv6 (not v4) header, and
vice versa. So it might be useful to clearly state that the version
field of the inner IP header in register should be set properly and
that if a mismatch is found on reception then the register should be
discarded.

					JINMEI, Tatuya
					Communication Platform Lab.
					Corporate R&D Center, Toshiba Corp.
					[email-masked]

---

From: "Brian Haberman" <[email-masked]>
Date: Wed, 06 Sep 2000 07:27:16 -0400

JINMEI Tatuya / 神明達哉 wrote:
...snip...
> that if a mismatch is found on reception then the register should be

That seems like a reasonable approach.  I can incorporate that into
the PIM for IPv6 draft.

Regards,
Brian

-- 
Brian Haberman
Nortel Networks
[email-masked]

---

From: JINMEI Tatuya / 神明達哉<[email-masked]>
Date: Sun, 10 Sep 2000 16:17:52 +0900

>>>>> On Wed, 06 Sep 2000 07:27:16 -0400, 
>>>>> "Brian Haberman" <[email-masked]> said:

> That seems like a reasonable approach.  I can incorporate that into

FYI: I've implemented this in the KAME's implementation.

					JINMEI, Tatuya