more net_route stuff
This commit is contained in:
		
							parent
							
								
									962c8cfd1b
								
							
						
					
					
						commit
						d36d72b16c
					
				| @ -1379,29 +1379,25 @@ int sigar_cpu_info_list_get(sigar_t *sigar, | |||||||
|     return SIGAR_OK; |     return SIGAR_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #define rt_s_addr(sa) ((struct sockaddr_in *)(sa))->sin_addr.s_addr | ||||||
|  | 
 | ||||||
| int sigar_net_route_list_get(sigar_t *sigar, | int sigar_net_route_list_get(sigar_t *sigar, | ||||||
|                              sigar_net_route_list_t *routelist) |                              sigar_net_route_list_t *routelist) | ||||||
| { | { | ||||||
| #if 0 /*defined(SIGAR_FREEBSD5)*/
 | #if defined(SIGAR_FREEBSD5) | ||||||
|     size_t needed; |     size_t needed; | ||||||
|     int mib[6]; |     int bit; | ||||||
|     char *buf, *next, *lim; |     char *buf, *next, *lim; | ||||||
|     struct rt_msghdr *rtm; |     struct rt_msghdr *rtm; | ||||||
|  |     int mib[6] = { CTL_NET, PF_ROUTE, 0, 0, NET_RT_DUMP, 0 }; | ||||||
| 
 | 
 | ||||||
|     mib[0] = CTL_NET; |     if (sysctl(mib, NMIB(mib), NULL, &needed, NULL, 0) < 0) { | ||||||
|     mib[1] = PF_ROUTE; |  | ||||||
|     mib[2] = 0; /* protocol */ |  | ||||||
|     mib[3] = 0; /* wildcard address family */ |  | ||||||
|     mib[4] = NET_RT_DUMP; |  | ||||||
|     mib[5] = 0; /* no flags */ |  | ||||||
| 
 |  | ||||||
|     if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) { |  | ||||||
|         return errno; |         return errno; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     buf = malloc(needed); |     buf = malloc(needed); | ||||||
| 
 | 
 | ||||||
|     if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) { |     if (sysctl(mib, NMIB(mib), buf, &needed, NULL, 0) < 0) { | ||||||
|         free(buf); |         free(buf); | ||||||
|         return errno; |         return errno; | ||||||
|     } |     } | ||||||
| @ -1414,6 +1410,10 @@ int sigar_net_route_list_get(sigar_t *sigar, | |||||||
|         sigar_net_route_t *route; |         sigar_net_route_t *route; | ||||||
|         rtm = (struct rt_msghdr *)next; |         rtm = (struct rt_msghdr *)next; | ||||||
| 
 | 
 | ||||||
|  |         if (rtm->rtm_type != RTM_GET) { | ||||||
|  |             continue; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         sa = (struct sockaddr *)(rtm + 1); |         sa = (struct sockaddr *)(rtm + 1); | ||||||
| 
 | 
 | ||||||
|         if (sa->sa_family != AF_INET) { |         if (sa->sa_family != AF_INET) { | ||||||
| @ -1425,6 +1425,32 @@ int sigar_net_route_list_get(sigar_t *sigar, | |||||||
|         SIGAR_ZERO(route); |         SIGAR_ZERO(route); | ||||||
| 
 | 
 | ||||||
|         route->flags = rtm->rtm_flags; |         route->flags = rtm->rtm_flags; | ||||||
|  | 
 | ||||||
|  |         for (bit=RTA_DST; | ||||||
|  |              bit && ((char *)sa < lim); | ||||||
|  |              bit <<= 1) | ||||||
|  |         { | ||||||
|  |             if ((rtm->rtm_addrs & bit) == 0) { | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             switch (bit) { | ||||||
|  |               case RTA_DST: | ||||||
|  |                 route->destination = rt_s_addr(sa); | ||||||
|  |                 break; | ||||||
|  |               case RTA_GATEWAY: | ||||||
|  |                 if (sa->sa_family == AF_INET) { | ||||||
|  |                     route->gateway = rt_s_addr(sa); | ||||||
|  |                 } | ||||||
|  |                 break; | ||||||
|  |               case RTA_NETMASK: | ||||||
|  |                 route->mask = rt_s_addr(sa); | ||||||
|  |                 break; | ||||||
|  |               case RTA_IFA: | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             sa = (struct sockaddr *)((char *)sa + SA_SIZE(sa)); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     free(buf); |     free(buf); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Doug MacEachern
						Doug MacEachern