Jürgen Keil wrote:
> Garrett D'Amore wrote:
>   
>> Jürgen Keil wrote:
>>     
>>> What about SIOCGLIFFLAGS ?
>>>
>>> # pkgrm SUNWvirtinst ...
>>> ...
>>> SIOCGLIFFLAGS: invalid argument
>>>       
>> Crap.  I thought I tested this in my test program.  I missed lifreq for 
>> reasons unbeknownst to me.  I'm going to fix it.
>>  Stay tuned.
>>     
>
> Seems that the putbacks for 6711665 / 6711691 have been backed out
> last night...
>   

Yes, I had a conversation with the gatekeepers yesterday, and we agreed 
that the best approach was to back out the fix.

At the moment, I'll probably reintroduce the fix for 6711691, which is 
not impacted by this problem.

The fix for 6711665 I'm not sure about.  One approach is to provide a 
compatibility macro (e.g.  #define IOCCOMPATSZ(x)  (sizeof (x) & 0xff)) 
and use it to define the known bad ioctls.  The problem is that this 
fixes the ioctls that are defined in ON, it doesn't help ioctls using 
these macros and defined elsewhere.  (Note that nobody should be using 
these macros!  They aren't part of any public API, and the header 
explicitly states that only sizes up to 255 bytes can be encoded.  I 
didn't expect anyone to violate those comments, which is what caught me 
off guard.)

Anyone that needs this functionality in 3rd party code should not 
#include <sys/ioccom.h>, but should provide their own private versions.

Anyway, the options for dealing with this long term are:

1) Leave it the way it is, and anyone that wants correct encoding (e.g. 
OSS) will have to define their own private versions.   The disadvantage 
here is that common tools like truss will not be able to decode the 
ioctls.  But nothing new breaks.

2) Rename the macros so nobody can use them outside of ON.  This would 
force busted code to be fixed.  The old broken 0xff mask would have to 
stay in place though, since the ioctl values are fixed.  (IMO, the old 
busted codes should be changed to use _IOCN(), since clearly there is no 
relationship to the size of the structure and the actual ioctl code.  
sys/sockio.h misuses most of these ioctl values rather badly.)  This may 
break compilation of old code, but it will break detectably.

3) Introduce new fixed versions, and address (using IOCN(), or some 
other approach such as the IOCCOMPATSZ() wrapper) the legacy macros so 
that the bad definitions in ON (sys/sockio.h in particular) can get 
fixed.   This could introduce incompatibility for 3rd party code using 
the sys/ioccom.h header directly to define new ioctl codes.

4) Using a combination of solutions above, the macros are renamed with 
new definitions (with the wider mask), and the old definitions are 
removed, and the code in ON is fixed.  This avoids undetected 
incompatibility, allowing new code to use common macros, but also makes 
it slightly harder when porting code from BSD.  (Macro names would have 
to be changed.)  There would still be breakage, but it would be detected 
at compile time.

I'm leaning towards #4.  I'll probably have to run a fast track at ARC 
to approve removal of the old macros, although it shouldn't be too 
controversial since the macros in question technically aren't part of 
any public API.

Thoughts?

    -- Garrett

> Another consumer of SIOCGLIFFLAGS was the tcpdump binary
> from the companion CD, which now failed with:
>
> # /opt/sfw/sbin/tcpdump 
> tcpdump: SIOCGLIFFLAGS: lo0: Invalid argument
>  
>  
> This message posted from opensolaris.org
> _______________________________________________
> opensolaris-code mailing list
> opensolaris-code@opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/opensolaris-code
>   

_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to