> > > > int addr = htonl(ntohl(ip_v4addr(ip)) | (0xffffffff >> ip_bits(ip)));
> >
> > There needs to be a UL on the end of that constant. Otherwise it depends
> > on whether or not the compiler chooses to make it signed or unsigned. Not
> > only that, but shifting by >=32 is undefined... Intel chipsets will go mod
> > 32 and change 32 to 0.
> >
>
> Anyone want to supply a patch?
This has been already fixed. Now it looks like:
unsigned long mask = 0xffffffff;
if (ip_bits(ip) < 32) mask >>= ip_bits(ip); addr = htonl(ntohl(ip_v4addr(ip)) | mask);
---
Tatsuo Ishii