Robert Gordon wrote:
>
> I think this:
>
> 1460         } else {
> 1461                 if ((addr & 0x00ffffff) == 0)
> 1462                         mask = 0xff000000;
> 1463                 else if ((addr & 0x0000ffff) == 0)
> 1464                         mask = 0xffff0000;
> 1465                 else if ((addr & 0x000000ff) == 0)
> 1466                         mask = 0xffffff00;
> 1467                 else
> 1468                         mask = 0xffffffff;
> 1469         }
>
> reads better as:
>
>             if (IN_CLASSA(addr))
>                 mask =  IN_CLASSA_NET;
>             else if (IN_CLASSB(addr))
>                 mask =  IN_CLASSB_NET;
>             else if (IN_CLASSC(addr))
>                 mask =  IN_CLASSC_NET;
>             else
>                 mask = IP_HOST_MASK;

Might read better, but appears not to work correctly:


You can see the difference with the first test:

addr & 0x00ffffff == 0
versus
addr & 0x80000000U == 0

The first says disallow any addr which have any bits set in the lower
3 octets.

The second says only allow addr which have 0x80 set in the upper
octect and ignore anything in the lower 3.

I think you could say this:


    if ((addr & IN_CLASSA_HOST) == 0) {
        mask =    IN_CLASSA_NET;
    } else if ((addr & IN_CLASSB_HOST) == 0) {
        mask =    IN_CLASSB_NET;
    } else if ((addr & IN_CLASSC_HOST) == 0) {
        mask =    IN_CLASSC_NET;
    } else {
                mask = IN_CLASSE_NET;
    }


And that pans out via the attached test case...




Some test outout before the 3rd try:

============

[th199096 at warlock ~/src]> ./a.out 192.168.2.1
192.168.2.1 yields 3232236033 and that reverse maps to  192.168.2.1

old way::
16777215 that reverse maps to  0.255.255.255
65535 that reverse maps to  0.0.255.255
255 that reverse maps to  0.0.0.255
Is single IP!

We would apply the following netmask (4294967295):  255.255.255.255

new way::
2147483648 that reverse maps to  128.0.0.0
3221225472 that reverse maps to  192.0.0.0
3758096384 that reverse maps to  224.0.0.0
Is class C!

We would apply the following netmask (4294967040):  255.255.255.0
[th199096 at warlock ~/src]> ./a.out 192.168.2.0
192.168.2.0 yields 3232236032 and that reverse maps to  192.168.2.0

old way::
16777215 that reverse maps to  0.255.255.255
65535 that reverse maps to  0.0.255.255
255 that reverse maps to  0.0.0.255
Is class C!

We would apply the following netmask (4294967040):  255.255.255.0

new way::
2147483648 that reverse maps to  128.0.0.0
3221225472 that reverse maps to  192.0.0.0
3758096384 that reverse maps to  224.0.0.0
Is class C!

We would apply the following netmask (4294967040):  255.255.255.0
[th199096 at warlock ~/src]> ./a.out 192.168.0.0
192.168.0.0 yields 3232235520 and that reverse maps to  192.168.0.0

old way::
16777215 that reverse maps to  0.255.255.255
65535 that reverse maps to  0.0.255.255
255 that reverse maps to  0.0.0.255
Is class B!

We would apply the following netmask (4294901760):  255.255.0.0

new way::
2147483648 that reverse maps to  128.0.0.0
3221225472 that reverse maps to  192.0.0.0
3758096384 that reverse maps to  224.0.0.0
Is class C!

We would apply the following netmask (4294967040):  255.255.255.0
[th199096 at warlock ~/src]> ./a.out 192.0.0.0
192.0.0.0 yields 3221225472 and that reverse maps to  192.0.0.0

old way::
16777215 that reverse maps to  0.255.255.255
65535 that reverse maps to  0.0.255.255
255 that reverse maps to  0.0.0.255
Is class A!

We would apply the following netmask (4278190080):  255.0.0.0

new way::
2147483648 that reverse maps to  128.0.0.0
3221225472 that reverse maps to  192.0.0.0
3758096384 that reverse maps to  224.0.0.0
Is class C!

We would apply the following netmask (4294967040):  255.255.255.0

Reply via email to