* net.cc (if_nametoindex): Fix typo in call to get_adapters_addresses.
(if_indextoname): Prefer IPv6 loopback device name over IPv4 loopback device name on pre-Vista systems. (if_nameindex): Ditto.
This commit is contained in:
		
							parent
							
								
									7a2c0a0d6b
								
							
						
					
					
						commit
						bbfcc68ad2
					
				| 
						 | 
				
			
			@ -1,3 +1,10 @@
 | 
			
		|||
2008-06-10  Corinna Vinschen  <corinna@vinschen.de>
 | 
			
		||||
 | 
			
		||||
	* net.cc (if_nametoindex): Fix typo in call to get_adapters_addresses.
 | 
			
		||||
	(if_indextoname): Prefer IPv6 loopback device name over IPv4 loopback
 | 
			
		||||
	device name on pre-Vista systems.
 | 
			
		||||
	(if_nameindex): Ditto.
 | 
			
		||||
 | 
			
		||||
2008-06-10  Corinna Vinschen  <corinna@vinschen.de>
 | 
			
		||||
 | 
			
		||||
	* fhandler_procnet.cc (format_procnet_ifinet6): Use sprintf rather than
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2037,7 +2037,7 @@ if_nametoindex (const char *name)
 | 
			
		|||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (wincap.has_gaa_prefixes ()
 | 
			
		||||
      && get_adapters_addresses (&pap, AF_UNSPEC))
 | 
			
		||||
      && get_adapters_addresses (&pa0, AF_UNSPEC))
 | 
			
		||||
    {
 | 
			
		||||
      char lname[IF_NAMESIZE], *c;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2072,6 +2072,19 @@ if_indextoname (unsigned ifindex, char *ifname)
 | 
			
		|||
      for (pap = pa0; pap; pap = pap->Next)
 | 
			
		||||
	if (ifindex == (pap->Ipv6IfIndex ?: pap->IfIndex))
 | 
			
		||||
	  {
 | 
			
		||||
	    /* Unfortunately the pre-Vista IPv6 stack has a distinct loopback
 | 
			
		||||
	       device with the same Ipv6IfIndex as the IfIndex of the IPv4
 | 
			
		||||
	       loopback device, but with a different adapter name.
 | 
			
		||||
	       For consistency with /proc/net/if_inet6, try to find the
 | 
			
		||||
	       IPv6 loopback device and use that adapter name instead.
 | 
			
		||||
	       We identify the loopback device by its IfIndex of 1. */
 | 
			
		||||
	    if (pap->IfIndex == 1 && pap->Ipv6IfIndex == 0)
 | 
			
		||||
	      for (PIP_ADAPTER_ADDRESSES pap2 = pa0; pap2; pap2 = pap2->Next)
 | 
			
		||||
	        if (pap2->Ipv6IfIndex == 1)
 | 
			
		||||
		  {
 | 
			
		||||
		    pap = pap2;
 | 
			
		||||
		    break;
 | 
			
		||||
		  }
 | 
			
		||||
	    name = strcpy (ifname, pap->AdapterName);
 | 
			
		||||
	    break;
 | 
			
		||||
	  }
 | 
			
		||||
| 
						 | 
				
			
			@ -2114,6 +2127,14 @@ if_nameindex (void)
 | 
			
		|||
		  goto outer_loop;
 | 
			
		||||
	      iflist[cnt].if_index = pap->Ipv6IfIndex ?: pap->IfIndex;
 | 
			
		||||
	      strcpy (iflist[cnt].if_name = ifnamelist[cnt], pap->AdapterName);
 | 
			
		||||
	      /* See comment in if_indextoname. */
 | 
			
		||||
	      if (pap->IfIndex == 1 && pap->Ipv6IfIndex == 0)
 | 
			
		||||
		for (PIP_ADAPTER_ADDRESSES pap2 = pa0; pap2; pap2 = pap2->Next)
 | 
			
		||||
		  if (pap2->Ipv6IfIndex == 1)
 | 
			
		||||
		    {
 | 
			
		||||
		      strcpy (ifnamelist[cnt], pap2->AdapterName);
 | 
			
		||||
		      break;
 | 
			
		||||
		    }
 | 
			
		||||
	      ++cnt;
 | 
			
		||||
	    outer_loop:
 | 
			
		||||
	      ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue