ifconfig stat显示流程分析

环境:

Freescale i.MX6 CPU

内核版本4.1.15

1、busybox show流程伪代码

struct ifreq ifr;
struct rtnl_link_stats64 stats;

memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, ifname, IFNAMSIZ - 1);

// 获取接口统计信息
if (ioctl(sk, SIOCGIFSTATS, &ifr) < 0)
    goto error;

// 获取接口硬件地址
if (ioctl(sk, SIOCGIFHWADDR, &ifr) < 0)
    goto error;

// 获取接口状态
if (ioctl(sk, SIOCGIFFLAGS, &ifr) < 0)
    goto error;

// 获取接口 IP 地址和掩码
if (ioctl(sk, SIOCGIFADDR, &ifr) < 0)
    goto error;

// 获取接口广播地址
if (ioctl(sk, SIOCGIFBRDADDR, &ifr) < 0)
    goto error;

// 获取接口 MTU 值
if (ioctl(sk, SIOCGIFMTU, &ifr) < 0)
    goto error;

// 打印接口统计信息
if (ioctl(sk, SIOCQSTATS, &ifr) < 0)
    goto error;
sock_set_flag(sk, SOCK_DBG_TRUNC_MSG, 0);
if (ioctl(sk, SIOCGLINKSTATS, &ifr) < 0)
    goto error;
memcpy(&stats, LL_STATS_INFO(&ifr), sizeof(stats));
printf("RX bytes:%llu errors:%d dropped:%d overrun:%d frame:%d\n",
       stats.rx_bytes, stats.rx_errors, stats.rx_dropped,
       stats.rx_over_errors, stats.rx_frame_errors);
printf("TX bytes:%llu errors:%d dropped:%d carrier:%d\n",
       stats.tx_bytes, stats.tx_errors, stats.tx_dropped,
       stats.tx_carrier_errors);

2、ifconfig get stat流程

通过busybox调用ifconfig。显示出当前device包个数统计。

3、dev_seq_printf_stats函数源码(注意,stat并不是在这里输出的,这里只是将stat按照对应格式输出到了seq文件中)

static void dev_seq_printf_stats(struct seq_file *seq, struct net_device *dev)
{
	struct rtnl_link_stats64 temp;
	const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp);

	seq_printf(seq, "%6s: %7llu %7llu %4llu %4llu %4llu %5llu %10llu %9llu "
		   "%8llu %7llu %4llu %4llu %4llu %5llu %7llu %10llu\n",
		   dev->name, stats->rx_bytes, stats->rx_packets,
		   stats->rx_errors,
		   stats->rx_dropped + stats->rx_missed_errors,
		   stats->rx_fifo_errors,
		   stats->rx_length_errors + stats->rx_over_errors +
		    stats->rx_crc_errors + stats->rx_frame_errors,
		   stats->rx_compressed, stats->multicast,
		   stats->tx_bytes, stats->tx_packets,
		   stats->tx_errors, stats->tx_dropped,
		   stats->tx_fifo_errors, stats->collisions,
		   stats->tx_carrier_errors +
		    stats->tx_aborted_errors +
		    stats->tx_window_errors +
		    stats->tx_heartbeat_errors,
		   stats->tx_compressed);
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值