* fhandler_procnet.cc (get_scope): New static function to evaluate
scope. (dad_to_flags): New static array to convert Windows DAD state to Linux values. (format_procnet_ifinet6): Drop asking for IfIndex, just use Ipv6IfIndex. Use get_scope and dad_to_flags to generate more accurate linux-like output.
This commit is contained in:
parent
bbfcc68ad2
commit
c9227bf8a7
|
@ -1,3 +1,13 @@
|
|||
2008-06-10 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_procnet.cc (get_scope): New static function to evaluate
|
||||
scope.
|
||||
(dad_to_flags): New static array to convert Windows DAD state to
|
||||
Linux values.
|
||||
(format_procnet_ifinet6): Drop asking for IfIndex, just use Ipv6IfIndex.
|
||||
Use get_scope and dad_to_flags to generate more accurate linux-like
|
||||
output.
|
||||
|
||||
2008-06-10 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* net.cc (if_nametoindex): Fix typo in call to get_adapters_addresses.
|
||||
|
|
|
@ -229,6 +229,31 @@ fhandler_procnet::fill_filebuf ()
|
|||
return true;
|
||||
}
|
||||
|
||||
/* Return the same scope values as Linux. */
|
||||
static unsigned int
|
||||
get_scope (struct in6_addr *addr)
|
||||
{
|
||||
if (IN6_IS_ADDR_LOOPBACK (addr))
|
||||
return 0x10;
|
||||
if (IN6_IS_ADDR_LINKLOCAL (addr))
|
||||
return 0x20;
|
||||
if (IN6_IS_ADDR_SITELOCAL (addr))
|
||||
return 0x40;
|
||||
if (IN6_IS_ADDR_V4COMPAT (addr))
|
||||
return 0x80;
|
||||
return 0x0;
|
||||
}
|
||||
|
||||
/* Convert DAD state into Linux compatible values. */
|
||||
static unsigned int dad_to_flags[] =
|
||||
{
|
||||
0x02, /* Invalid -> NODAD */
|
||||
0x40, /* Tentative -> TENTATIVE */
|
||||
0xc0, /* Duplicate to PERMANENT | TENTATIVE */
|
||||
0x20, /* Deprecated -> DEPRECATED */
|
||||
0x80 /* Preferred -> PERMANENT */
|
||||
};
|
||||
|
||||
static _off64_t
|
||||
format_procnet_ifinet6 (char *&filebuf)
|
||||
{
|
||||
|
@ -262,11 +287,11 @@ format_procnet_ifinet6 (char *&filebuf)
|
|||
filebuf[filesize++] = ' ';
|
||||
filesize += sprintf (filebuf + filesize,
|
||||
"%02lx %02x %02x %02x %s\n",
|
||||
pap->IfIndex ?: pap->Ipv6IfIndex,
|
||||
pap->Ipv6IfIndex,
|
||||
ip_addr_prefix (pua, pap->FirstPrefix),
|
||||
((struct sockaddr_in6 *)
|
||||
pua->Address.lpSockaddr)->sin6_scope_id,
|
||||
pua->DadState,
|
||||
get_scope (&((struct sockaddr_in6 *)
|
||||
pua->Address.lpSockaddr)->sin6_addr),
|
||||
dad_to_flags [pua->DadState],
|
||||
pap->AdapterName);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue