implemented openbsd netspeed functions
implemented the netspeed functionality for openbsd. furthermore the static keyword was removed of the interval variable in config.def.h for usage as extern variable.
This commit is contained in:
		
				
					committed by
					
						
						Aaron Marcher
					
				
			
			
				
	
			
			
			
						parent
						
							176d8ff874
						
					
				
				
					commit
					22175f0d57
				
			@@ -49,5 +49,63 @@
 | 
			
		||||
		return fmt_scaled((txbytes - oldtxbytes) / interval * 1000);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__OpenBSD__)
 | 
			
		||||
	/* unimplemented */
 | 
			
		||||
	#include <string.h>
 | 
			
		||||
	#include <ifaddrs.h>
 | 
			
		||||
	#include <sys/types.h>
 | 
			
		||||
	#include <sys/socket.h>
 | 
			
		||||
	#include <net/if.h>
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	netspeed_rx(const char *interface)
 | 
			
		||||
	{
 | 
			
		||||
		struct ifaddrs *ifal, *ifa;
 | 
			
		||||
		struct if_data *ifd;
 | 
			
		||||
		static uint64_t oldrxbytes;
 | 
			
		||||
		uint64_t rxbytes = 0;
 | 
			
		||||
		const char *rxs;
 | 
			
		||||
		extern const unsigned int interval;
 | 
			
		||||
 | 
			
		||||
		if (getifaddrs(&ifal) == -1) {
 | 
			
		||||
			warn("getifaddrs failed");
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		for (ifa = ifal; ifa; ifa = ifa->ifa_next) {
 | 
			
		||||
			if (!strcmp(ifa->ifa_name, interface) &&
 | 
			
		||||
			   (ifd = (struct if_data *)ifa->ifa_data)) {
 | 
			
		||||
				rxbytes += ifd->ifi_ibytes;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		freeifaddrs(ifal);
 | 
			
		||||
 | 
			
		||||
		rxs = oldrxbytes ? fmt_scaled((rxbytes - oldrxbytes) /
 | 
			
		||||
		                              interval * 1000) : NULL;
 | 
			
		||||
		return (oldrxbytes = rxbytes, rxs);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const char *
 | 
			
		||||
	netspeed_tx(const char *interface)
 | 
			
		||||
	{
 | 
			
		||||
		struct ifaddrs *ifal, *ifa;
 | 
			
		||||
		struct if_data *ifd;
 | 
			
		||||
		static uint64_t oldtxbytes;
 | 
			
		||||
		uint64_t txbytes = 0;
 | 
			
		||||
		const char *txs;
 | 
			
		||||
		extern const unsigned int interval;
 | 
			
		||||
 | 
			
		||||
		if (getifaddrs(&ifal) == -1) {
 | 
			
		||||
			warn("getifaddrs failed");
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		for (ifa = ifal; ifa; ifa = ifa->ifa_next) {
 | 
			
		||||
			if (!strcmp(ifa->ifa_name, interface) &&
 | 
			
		||||
			   (ifd = (struct if_data *)ifa->ifa_data)) {
 | 
			
		||||
				txbytes += ifd->ifi_obytes;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		freeifaddrs(ifal);
 | 
			
		||||
 | 
			
		||||
		txs = oldtxbytes ? fmt_scaled((txbytes - oldtxbytes) /
 | 
			
		||||
		                              interval * 1000) : NULL;
 | 
			
		||||
		return (oldtxbytes = txbytes, txs);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user