- 论坛徽章:
- 0
|
回复 1# lantian0811
内核对于一些统计,都是采用这种方法来做的,算是一种标准方式了。你列的那些信息是,是关于网络层snmp统计的信息,也可以通过netstat 指令看到这些统计值。关于这些统计的意义,你可以查看相应的宏定义,都有详细的注释,例如:
IPSTATS_MIB_INTRUNCATEDPKTS, /* InTruncatedPkts */
而关于宏的实现,也可以跟一下,大致就是找到结构的某个成员,然后更新它的值,这种统计,一般都是Per-CPU变量:- IP_UPD_PO_STATS_BH(dev_net(dev), IPSTATS_MIB_IN, skb->len);
- #define IP_UPD_PO_STATS_BH(net, field, val) SNMP_UPD_PO_STATS_BH((net)->mib.ip_statistics, field, val)
- #define SNMP_UPD_PO_STATS_BH(mib, basefield, addend) \
- do { \
- __typeof__(mib[0]) ptr = per_cpu_ptr(mib[!in_softirq()], raw_smp_processor_id());\
- ptr->mibs[basefield##PKTS]++; \
- ptr->mibs[basefield##OCTETS] += addend;\
- } while (0)
复制代码 |
评分
-
查看全部评分
|