* 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:
Corinna Vinschen 2008-06-10 19:58:58 +00:00
parent bbfcc68ad2
commit c9227bf8a7
2 changed files with 39 additions and 4 deletions

View File

@ -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.

View File

@ -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);
}