Add per interface support for tx_queue_len, Linux only.

Update the ifconfig example output.
This commit is contained in:
Matthew Kent 2009-08-09 15:20:25 -07:00
parent c007175b21
commit 83996dda13
4 changed files with 20 additions and 2 deletions

View File

@ -1081,6 +1081,11 @@ use vars qw(%classes %cmds);
desc => '', desc => '',
plat => 'DFL' plat => 'DFL'
}, },
{
name => 'tx_queue_len', type => 'Int',
desc => '',
plat => 'L'
},
], ],
NetInterfaceStat => [ NetInterfaceStat => [
{ {

View File

@ -65,7 +65,8 @@ iflist.each do |ifname|
" overruns:" + ifstat.tx_overruns.to_s + " overruns:" + ifstat.tx_overruns.to_s +
" carrier:" + ifstat.tx_carrier.to_s " carrier:" + ifstat.tx_carrier.to_s
puts "\t" + "collisions:" + ifstat.tx_collisions.to_s puts "\t" + "collisions:" + ifstat.tx_collisions.to_s +
" txqueuelen:" + ifconfig.tx_queue_len.to_s
rx_bytes = ifstat.rx_bytes rx_bytes = ifstat.rx_bytes
tx_bytes = ifstat.tx_bytes tx_bytes = ifstat.tx_bytes

View File

@ -613,6 +613,7 @@ typedef struct {
flags, flags,
mtu, mtu,
metric; metric;
int tx_queue_len;
} sigar_net_interface_config_t; } sigar_net_interface_config_t;
SIGAR_DECLARE(int) SIGAR_DECLARE(int)

View File

@ -1640,6 +1640,17 @@ int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
ifconfig->metric = ifr.ifr_metric ? ifr.ifr_metric : 1; ifconfig->metric = ifr.ifr_metric ? ifr.ifr_metric : 1;
} }
#if defined(SIOCGIFTXQLEN)
if (!ioctl(sock, SIOCGIFTXQLEN, &ifr)) {
ifconfig->tx_queue_len = ifr.ifr_qlen;
}
else {
ifconfig->tx_queue_len = -1; /* net-tools behaviour */
}
#else
ifconfig->tx_queue_len = -1;
#endif
close(sock); close(sock);
/* XXX can we get a better description like win32? */ /* XXX can we get a better description like win32? */