On Sat, Dec 10, 2005 at 11:42:05AM +0900, JINMEI Tatuya / [EMAIL 
PROTECTED]@C#:H wrote:
> >>>>> On Fri, 9 Dec 2005 18:28:14 -0500, 
> >>>>> Roy Smith <[EMAIL PROTECTED]> said:
> 
> > Is there a standard API for getting the prefix given an address and a 
> > prefix length?  I.e., I've got 
> > "FFEE:0200:0045:0000:0000:0000:0123:0012" and 64 and I want to get 
> > "FFEE:0200:0045:0000:0000:0000:0000:0000".
> 
> > I looked in RFC 3493 and 3542 and didn't see anything in either one 
> > that looked like it did this.  Did I just miss it, or does it not 
> > exist?
> 
> There's no standard API for this as far as I know.

Pretty sure there isn't. I don't see the need for it myself, it
is easy enough to implement. I'm sure there are people willing to
share code for this.

For a reasonably quick implementation, you could use memset() for
the 0-bytes, and have an array with the bitmasks for the remainder.

Something like:

struct in6_addr *addr;
uint8_t plen, div8;
uint8_t mask[] = { 0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe };
...
div8 = plen / 8;
if (div8 < 15)
        memset(&addr->s6_addr[1 + div8], 0, 15 - div8);
if (div8 < 16)
        addr->s6_addr[div8] = addr->s6_addr[div8] & mask[plen % 8];

The above is not tested, but should be ok...

Stig
---------------------------------------------------------------------
The IPv6 Users Mailing List
Unsubscribe by sending "unsubscribe users" to [EMAIL PROTECTED]

Reply via email to