From owner-freebsd-net@FreeBSD.ORG Thu Mar 15 11:14:04 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BE05816A400; Thu, 15 Mar 2007 11:14:04 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.freebsd.org (Postfix) with ESMTP id 0529E13C43E; Thu, 15 Mar 2007 11:14:03 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.4) with ESMTP id l2FBE1Ps030670; Thu, 15 Mar 2007 14:14:01 +0300 (MSK) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.4/Submit) id l2FBE11w030669; Thu, 15 Mar 2007 14:14:01 +0300 (MSK) (envelope-from yar) Date: Thu, 15 Mar 2007 14:14:00 +0300 From: Yar Tikhiy To: "Bruce M. Simpson" Message-ID: <20070315111400.GC28354@comp.chem.msu.su> Mail-Followup-To: Yar Tikhiy , "Bruce M. Simpson" , freebsd-arch@FreeBSD.org References: <20070314102023.GB1766@comp.chem.msu.su> <45F7EF84.5070700@FreeBSD.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <45F7EF84.5070700@FreeBSD.org> User-Agent: Mutt/1.5.9i Cc: freebsd-net@FreeBSD.org, freebsd-arch@FreeBSD.org Subject: Re: Generic ioctl and ether_ioctl don't agree X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Mar 2007 11:14:04 -0000 On Wed, Mar 14, 2007 at 12:50:12PM +0000, Bruce M. Simpson wrote: > 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. This is a point to discuss in -arch as it's closely related to the generic ioctl interface. Let's move this thread to -arch. It's been a vague issue to me whether to use a fixed-width type or a basic type in particular kernel code. Of course, it's better to use a fixed-width type when it comes to network packets or hardware registers. OTOH, errno is int. But not all cases are that simple. Do we have a guideline for that? -- Yar