Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Mar 2007 12:50:12 +0000
From:      "Bruce M. Simpson" <bms@FreeBSD.org>
To:        Yar Tikhiy <yar@comp.chem.msu.su>
Cc:        freebsd-net@freebsd.org
Subject:   Re: Generic ioctl and ether_ioctl don't agree
Message-ID:  <45F7EF84.5070700@FreeBSD.org>
In-Reply-To: <20070314102023.GB1766@comp.chem.msu.su>
References:  <20070314102023.GB1766@comp.chem.msu.su>

next in thread | previous in thread | raw e-mail | index | archive | help
Yar Tikhiy wrote:
> Hi folks,
>
> Quite a while ago I noticed that our ioctl handlers get the ioctl
> command via u_long, but ether_ioctl()'s command argument is int.
> This disarray dates back to 1998, when ioctl functions started to
> take u_long as the command, but ether_ioctl() was never fixed.
> Fortunately, our ioctl command coding still fits in 32 bits, or
> else we would've got problems on 64-bit arch'es already.  I'd like
> to fix this long-standing bug some day after RELENG_7 is branched.
> Of course, this will break ABI to network modules on all 64-bit
> arch'es.  BTW, the same applies to other L2 layers, such as firewire,
> which seems to have been cloned from if_ethersubr.c.
>   
This is one of those annoying things which breaks compatibility with 
external modules.

I'm not sure about this, though. I was getting sign extension warnings 
on amd64 last week when I was testing the IGMPv3 aware mtest(8). Perhaps 
if we're fixing these ABIs, we should commit to an explicit C99 type 
with known bit width, i.e. uint32_t.

I would be much happier if we began using C99 types in the code.

Just my 2c.
BMS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45F7EF84.5070700>