Subject: Re: [PATCH 02/05] ipv6: RFC4214 Support

From: Simon Arlott <[email-masked]>
Date: Wed, 07 Nov 2007 19:38:12 +0000

On 07/11/07 19:32, Templin, Fred L wrote:
>  
> 
>> -----Original Message-----
>> From: Simon Arlott [mailto:[email-masked]] 
>> Sent: Wednesday, November 07, 2007 11:02 AM
>> To: Templin, Fred L
>> Cc: YOSHIFUJI Hideaki / 吉藤英明; [email-masked]; [email-masked]
>> Subject: Re: [PATCH 02/05] ipv6: RFC4214 Support
>> 
>> On 07/11/07 18:52, Templin, Fred L wrote:
>> >> > > > > +	eui[0] = 0;
>> >> > > > > +
>> >> > > > > +	/* Check for RFC3330 global address ranges */
>> >> > > > > +	if (((ipv4 >= 0x01000000) && (ipv4 < 0x0a000000)) ||
>> >> > > > > +	    ((ipv4 >= 0x0b000000) && (ipv4 < 0x7f000000)) ||
>> >> > > > > +	    ((ipv4 >= 0x80000000) && (ipv4 < 0xa9fe0000)) ||
>> >> > > > > +	    ((ipv4 >= 0xa9ff0000) && (ipv4 < 0xac100000)) ||
>> >> > > > > +	    ((ipv4 >= 0xac200000) && (ipv4 < 0xc0a80000)) ||
>> >> > > > > +	    ((ipv4 >= 0xc0a90000) && (ipv4 < 0xc6120000)) ||
>> >> > > > > +	    ((ipv4 >= 0xc6140000) && (ipv4 < 
>> >> 0xe0000000))) eui[0] |=
>> >> > > > > 0x2;
>> >> I don't understand.
>> >> 
>> >> For example, 1.0.0.11 is valid IPv4 global address.
>> >> In little-endian, this is not in the range of
>> >> 0x00000001 <= addr <= 0x0000000a (addr is 0x0b000001).
>> > 
>> > Maybe it is I who did not understand. Can you suggest a 
>> clean solution?
>> 
>> ((ipv4 & htonl(0xFF000000)) == htonl(0x0A000000)) etc.?
> 
> I'm not sure this works when we consider disjoint ranges
> of globally-unique IP prefixes. Do you have a vision for
> how the entire conditional would look like?

You need to match RFC3330 addresses, not anything that isn't.

((ipv4 & htonl(0xFF000000)) == htonl(0x0A000000))
|| ((ipv4 & htonl(0xFFFF0000)) == htonl(0xC0A80000))
|| ((ipv4 & htonl(0xFF000000)) == htonl(0x80000000))
etc.

-- 
Simon Arlott