tcp-ip : snmp
来源:互联网 发布:思途旅游cms 6.0 下载 编辑:程序博客网 时间:2024/06/08 16:13
linux内核没有实现SNMP(SimpleNetwork Management Protocol,简单网络管理协议),只是收集一些MIB(管理信息基)并把它们输出到/proc去。
[ include/uapi/linux/snmp.h ]
/* tcp mib definitions *//* * RFC 1213: MIB-II TCP group * RFC 2012 (updates 1213): SNMPv2-MIB-TCP */enum{TCP_MIB_NUM = 0,TCP_MIB_RTOALGORITHM,/* RtoAlgorithm */TCP_MIB_RTOMIN,/* RtoMin */TCP_MIB_RTOMAX,/* RtoMax */TCP_MIB_MAXCONN,/* MaxConn */TCP_MIB_ACTIVEOPENS,/* ActiveOpens */TCP_MIB_PASSIVEOPENS,/* PassiveOpens */TCP_MIB_ATTEMPTFAILS,/* AttemptFails */TCP_MIB_ESTABRESETS,/* EstabResets */TCP_MIB_CURRESTAB,/* CurrEstab */TCP_MIB_INSEGS,/* InSegs */TCP_MIB_OUTSEGS,/* OutSegs */TCP_MIB_RETRANSSEGS,/* RetransSegs */TCP_MIB_INERRS,/* InErrs */TCP_MIB_OUTRSTS,/* OutRsts */TCP_MIB_CSUMERRORS,/* InCsumErrors */__TCP_MIB_MAX};这个结构是要收集的和TCP有关的信息类型。如:TCP_MIB_INSEGS表示接收到数据包。
[ include/net/snmp.h ]
/* TCP */#define TCP_MIB_MAX__TCP_MIB_MAXstruct tcp_mib {unsigned longmibs[TCP_MIB_MAX];};定义了一个结构,内含一个数组,用来对上面提到的信息类型进行计数。
[ include/net/netns/mib.h ]
struct netns_mib {DEFINE_SNMP_STAT(struct tcp_mib, tcp_statistics);DEFINE_SNMP_STAT(struct ipstats_mib, ip_statistics);DEFINE_SNMP_STAT(struct linux_mib, net_statistics);DEFINE_SNMP_STAT(struct udp_mib, udp_statistics);DEFINE_SNMP_STAT(struct udp_mib, udplite_statistics);DEFINE_SNMP_STAT(struct icmp_mib, icmp_statistics);DEFINE_SNMP_STAT_ATOMIC(struct icmpmsg_mib, icmpmsg_statistics);#if IS_ENABLED(CONFIG_IPV6)struct proc_dir_entry *proc_net_devsnmp6;DEFINE_SNMP_STAT(struct udp_mib, udp_stats_in6);DEFINE_SNMP_STAT(struct udp_mib, udplite_stats_in6);DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics);DEFINE_SNMP_STAT(struct icmpv6_mib, icmpv6_statistics);DEFINE_SNMP_STAT_ATOMIC(struct icmpv6msg_mib, icmpv6msg_statistics);#endif#ifdef CONFIG_XFRM_STATISTICSDEFINE_SNMP_STAT(struct linux_xfrm_mib, xfrm_statistics);#endif};这个结构定义了所有要统计的信息,对TCP:DEFINE_SNMP_STAT(struct tcp_mib, tcp_statistics);这个宏展开如下:
[ include/net/snmp.h ]
#define SNMP_ARRAY_SZ 1#define DEFINE_SNMP_STAT(type, name)\__typeof__(type) __percpu *name[SNMP_ARRAY_SZ]即:
__typeof__(struct tcp_mib) __percpu *tcp_statistics[ 1 ]
如果接收到了一个新的数据段,要增加计数:
[ net/ipv4/tcp_ipv4.c ]
int tcp_v4_rcv(struct sk_buff *skb){...struct net *net = dev_net(skb->dev);// 网络名字空间/* Count it even if it's bad */TCP_INC_STATS_BH(net, TCP_MIB_INSEGS);...}
[ include/net/tcp.h ]
#define TCP_INC_STATS_BH(net, field)SNMP_INC_STATS_BH((net)->mib.tcp_statistics, field)
[ include/net/snmp.h ]
#define SNMP_INC_STATS_BH(mib, field)\__this_cpu_inc(mib[0]->mibs[field])
[ include/net/net_namespace.h ]
struct net {...struct netns_mibmib;...}
最后的展开如下:
__this_cpu_inc( net->mib.tcp_statistics[ 0 ]->mibs[ TCP_MIB_INSEGS ] )
对新接收的数据包进行了计数。
0 0
- TCP/IP-25-SNMP
- tcp-ip : snmp
- TCP/IP详解 卷一 --------SNMP
- 《TCP/IP详解-协议》(25)SNMP协议
- TCP/IP协议族-----24、网络管理(SNMP)
- TCP/IP 详解 卷1 ch25 SNMP:简单网络管理协议
- TCP-IP详解卷1-25:SNMP: 简单网络管理协议(Simple Network Management Protocol)
- 【TCP/IP详解】第25章 SNMP: 简单网络管理协议
- tcp/ip协议学习笔记(9)SNMP简单网络管理协议
- Snmp协议、串口协议、UDP、TCP/IP协议 的学习与总结
- tcp/ip学习笔记--第25章 SNMP simple network management
- TCP/IP
- TCP/IP
- TCP/IP
- TCP/IP
- TCP/IP
- TCP/IP
- TCP/IP
- VB学习笔记——Len函数和LenB函数
- SQL导出txt文件字段用逗号 ,隔开
- 详解“系统应用不能访问sdcard”
- CentOS6.6配置防火墙
- CCS+C6678LE开发记录11:多核协作(IPC)入门
- tcp-ip : snmp
- Linux网络编程之多进程
- ubuntu12.04LTS-ARM平台交叉编译器的制作
- CentOS7.0网络设置和域名绑定
- Shell-计算多行数值求和
- Android Volley完全解析(三),定制自己的Request
- Linux网络编程之多线程
- jquery easyui datagrid 数据绑定java版本
- WIFI从零开始学起 -- 基本内容