[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 6 Jun 2011 22:19:33 +0200
From: Arnd Bergmann <arnd@...db.de>
To: David Miller <davem@...emloft.net>
Cc: eric.dumazet@...il.com, netdev@...r.kernel.org
Subject: Re: [RFC] should we care of COMPAT mode in bridge ?
On Monday 06 June 2011 22:09:58 David Miller wrote:
> From: Arnd Bergmann <arnd@...db.de>
> Date: Mon, 6 Jun 2011 22:06:28 +0200
>
> > On Monday 06 June 2011 21:45:40 Eric Dumazet wrote:
> >> While trying Alexander Holler patch, I found a 32bit brctl program was
> >> not able to work on a 64bit kernel. So I had to switch to another
> >> machine for my tests.
> >>
> >> brctl addbr mybridge
> >> ->
> >> socket(PF_FILE, SOCK_STREAM, 0) = 3
> >> ioctl(3, SIOCSIFBR, 0xffd509c0) = -1 EINVAL (Invalid argument)
> >>
> >> Should we care or not ?
> >>
> >
> > Generally, we try to make all ioctls work in compat mode. For the old
> > bridge ioctls, this is currently impossible because it uses SIOCPRIVATE
> > ioctls, but it would be easy to add an ndo_do_compat_ioctl.
>
> Right, we need to funnel compat ioctls down to the device and add a
> ->ndo_compat_ioctl() or similar, if that is indeed feasible.
I think it would be good to first understand why it doesn't work with the
new style ioctls that are in the kernel. The source code of brctl that
I'm looking at here contains:
int br_add_bridge(const char *brname)
{
int ret;
#ifdef SIOCBRADDBR
ret = ioctl(br_socket_fd, SIOCBRADDBR, brname);
if (ret < 0)
#endif
{
char _br[IFNAMSIZ];
unsigned long arg[3]
= { BRCTL_ADD_BRIDGE, (unsigned long) _br };
strncpy(_br, brname, IFNAMSIZ);
ret = ioctl(br_socket_fd, SIOCSIFBR, arg);
}
return ret < 0 ? errno : 0;
}
This means it should first attempt to call SIOCBRADDBR, which has
32 bit compat support in the kernel. The only reasons I can see why
this would not work are:
* the brctl tool in question is built from really old sources that
don't have the SIOCBRADDBR option.
* it is built against really old kernel headers that do not export
the SIOCBRADDBR definition.
If neither of the two is true, there is probably a bug somewhere that
wants to get fixed.
Arnd
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists