Corinna Vinschen wrote:
The scope values are not always equal to the index, as you can see in your
above output as well for the loopback.  It's also 0 for the addresses
with global scope.  The values are taken from the sin6_scope_id field
returned by the Win32 function GetAdaptersAddresses.  Compare with the
scope values printed by `ipconfig /all'.  Apparently the v6 stack in
XP uses (not quite) arbitrary numbers for local interfaces.  I don't
know the rules behind the choice, but apparently it has been fixed in
Vista.
According to http://msdn.microsoft.com/en-us/library/ms803554.aspx and http://msdn.microsoft.com/en-us/library/aa366357(VS.85).aspx the SCOPE_LEVEL for link local addresses should be 2.

BUT:

The output of ipconfig /all varies between XP and Vista for link local addresses:
Vista: fe80:...%8
XP: fe80:...%4

The same values can be found in the /proc/net/if_inet6 scope field. IMHO this makes it impossible to rely on these values.

Maybe there should be some scope tests (by IN6_IS_ADDR_* macros) in winsup/cygwin/fhandler_procnet.cc to provide a consistent value.

My question: Did I hit a bug? Is there any documentation what's the meaning of the values for scope and interface flags (they don't seem to follow the referenced definitions of the Linux kernel).

The flags field is the DAD state right now.  I'm looking through what I
did when I implemented that but I can't figure out anymore why I put the
DAD state into this field.  It looks like it should actually contain the
interface flags (IFF_* values).  Can somebody confirm or deny that?  If
that's correct, it's probably not a big deal to change that.
Well the DAD field is perfectly OK for me - because it's as close as possible to the original definition. I just could not figure out the meaning at the first glance ;-)

Further it seems that if_indextoname(...) does not work for XP while it works for Vista. Don't know if this problem is related. Did I miss something? I would appreciate any hint.

*How* does it not work.  A *very* simply testcase in plain C might
be helpful...
Try something like:
        int i;
        char name[IFNAMSIZ];
        for(i=0;i<255;i++) {
                if (if_indextoname (i, name)) {
                        printf("Index: %d, Name: %s\n",i, name);
                }
        }


Compare the output between XP and Vista. In my place I get many {UUIDS} on Vista:
Index: 1, Name: {3D4E88D4-6A70-11DB-B1BA-806E6F6E6963}
Index: 2, Name: {2F1F689C-4E19-439F-970B-9D3953DD3745}
Index: 3, Name: {F26D997E-07E4-4F14-9784-6D2C161038B5}
Index: 4, Name: {A3F04F10-FC76-46FC-9E8F-27B734564D1C}
Index: 5, Name: {0BFB37A4-FFB2-4AA9-B2AB-290F24210160}
Index: 6, Name: {D5445FB9-2700-4624-8C7D-A3ABDF67108A}
Index: 7, Name: {4DC0A780-6F97-4FBC-BB56-D161370E236E}
Index: 8, Name: {92F7E3A1-A7C4-4D89-A80F-C62EF31CE0DE}
Index: 9, Name: {333E49EF-C763-4F8B-ADCB-FB700E9E76DB}
Index: 10, Name: {B3B050EF-8A68-4ECC-8FEB-7E6C0EDB93F2}
Index: 11, Name: {3D4E8912-6A70-11DB-B1BA-0014220F8C51}
Index: 12, Name: {3D4E8913-6A70-11DB-B1BA-0014220F8C51}
Index: 13, Name: {65086859-22B7-11DD-BEB6-F5B211E8BF66}
Index: 14, Name: {7BE6018E-84C7-4AA5-80D9-36C0C5611E20}
Index: 15, Name: {4ED2AC47-6055-4483-8441-D89E3B1B3CD3}
Index: 16, Name: {D509BF11-3528-11DD-95EC-00163E6554AE}

On XP the function returns only few interfaces in UUID style and in a fully resolved interface-name-style:

Index: 0, Name: {571E18F0-10E9-4D0F-A998-FE68B6C687EC}
Index: 1, Name: MS TCP Loopback interface

IMHO it should return the same interface name as shown by ipconfig - otherwise there should exist a function to convert the UUID value into a human readable interface name.

Deti

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to