In order to troubleshoot a certain class of networking issues
it is extremely useful to collect the tcp and ip statistics
exported by /proc/net/netstat
Signed-off-by: Michele Baldessari <michele@xxxxxxxxxx>
---
src/pmdas/linux/GNUmakefile | 7 +-
src/pmdas/linux/clusters.h | 2 +
src/pmdas/linux/help | 126 ++++++++
src/pmdas/linux/pmda.c | 609 +++++++++++++++++++++++++++++++++++++
src/pmdas/linux/proc_net_netstat.c | 353 +++++++++++++++++++++
src/pmdas/linux/proc_net_netstat.h | 150 +++++++++
src/pmdas/linux/root_linux | 119 ++++++++
7 files changed, 1364 insertions(+), 2 deletions(-)
create mode 100644 src/pmdas/linux/proc_net_netstat.c
create mode 100644 src/pmdas/linux/proc_net_netstat.h
diff --git a/src/pmdas/linux/GNUmakefile b/src/pmdas/linux/GNUmakefile
index 08a00f347e4c..4a0cc4f7b980 100644
--- a/src/pmdas/linux/GNUmakefile
+++ b/src/pmdas/linux/GNUmakefile
@@ -34,7 +34,8 @@ CFILES = pmda.c \
proc_scsi.c proc_cpuinfo.c proc_net_tcp.c \
proc_slabinfo.c sem_limits.c msg_limits.c shm_limits.c \
proc_uptime.c proc_sys_fs.c proc_vmstat.c \
- sysfs_kernel.c linux_table.c numa_meminfo.c
+ sysfs_kernel.c linux_table.c numa_meminfo.c \
+ proc_net_netstat.c
HFILES = clusters.h indom.h convert.h \
proc_stat.h proc_meminfo.h proc_loadavg.h \
@@ -44,7 +45,8 @@ HFILES = clusters.h indom.h convert.h \
proc_scsi.h proc_cpuinfo.h proc_net_tcp.h \
proc_slabinfo.h sem_limits.h msg_limits.h shm_limits.h \
proc_uptime.h proc_sys_fs.h proc_vmstat.h \
- sysfs_kernel.h linux_table.h numa_meminfo.h
+ sysfs_kernel.h linux_table.h numa_meminfo.h \
+ proc_net_netstat.h
VERSION_SCRIPT = exports
HELPTARGETS = help.dir help.pag
@@ -107,6 +109,7 @@ pmda.o proc_cpuinfo.o proc_stat.o: proc_cpuinfo.h
pmda.o proc_loadavg.o: proc_loadavg.h
pmda.o proc_meminfo.o: proc_meminfo.h
pmda.o proc_net_dev.o: proc_net_dev.h
+pmda.o proc_net_netstat.o: proc_net_netstat.h
pmda.o proc_net_rpc.o: proc_net_rpc.h
pmda.o proc_net_snmp.o: proc_net_snmp.h
pmda.o proc_net_sockstat.o: proc_net_sockstat.h
diff --git a/src/pmdas/linux/clusters.h b/src/pmdas/linux/clusters.h
index 45b95117476c..3343f3fe5f61 100644
--- a/src/pmdas/linux/clusters.h
+++ b/src/pmdas/linux/clusters.h
@@ -73,6 +73,8 @@ enum {
CLUSTER_INTERRUPT_OTHER,/* 50 /proc/interrupts percpu interrupts */
PROC_PID_FD, /* 51 /proc/<pid>/fd -> proc PMDA */
CLUSTER_LV, /* 52 /dev/mapper */
+ CLUSTER_NET_NETSTAT, /* 53 /proc/net/netstat */
+
NUM_CLUSTERS /* one more than highest numbered cluster */
};
diff --git a/src/pmdas/linux/help b/src/pmdas/linux/help
index de117e5675bf..aa0095aa5b35 100644
--- a/src/pmdas/linux/help
+++ b/src/pmdas/linux/help
@@ -872,6 +872,132 @@ tools running on IRIX.
@ network.udplite.sndbuferrors count of udplite send buffer errors
@ network.udplite.incsumerrors count of udplite in checksum errors
+@ network.ip.innoroutes Number of IP datagrams discarded due to no routes in
forwarding path
+@ network.ip.intruncatedpkts Number of IP datagrams discarded due to frame not
carrying enough data
+@ network.ip.inmcastpkts Number of received IP multicast datagrams
+@ network.ip.outmcastpkts Number of sent IP multicast datagrams
+@ network.ip.inbcastpkts Number of received IP broadcast datagrams
+@ network.ip.outbcastpkts Number of sent IP bradcast datagrams
+@ network.ip.inoctets Number of received octets
+@ network.ip.outoctets Number of sent octets
+@ network.ip.inmcastoctets Number of received IP multicast octets
+@ network.ip.outmcastoctets Number of sent IP multicast octets
+@ network.ip.inbcastoctets Number of received IP broadcast octets
+@ network.ip.outbcastoctets Number of sent IP broadcast octets
+@ network.ip.csumerrors Number of IP datagrams with checksum errors
+@ network.ip.noectpkts Number of packets received with NOECT
+@ network.ip.ect1pkts Number of packets received with ECT(1)
+@ network.ip.ect0pkts Number of packets received with ECT(0)
+@ network.ip.cepkts Number of packets received with Congestion Experimented
+
+@ network.tcp.syncookiessent Number of sent SYN cookies
+@ network.tcp.syncookiesrecv Number of received SYN cookies
+@ network.tcp.syncookiesfailed Number of failed SYN cookies
+@ network.tcp.embryonicrsts Number of resets received for embryonic SYN_RECV
sockets
+@ network.tcp.prunecalled Number of packets pruned from receive queue because
of socket buffer overrun
+@ network.tcp.rcvpruned Number of packets pruned from receive queue
+@ network.tcp.ofopruned Number of packets dropped from out-of-order queue
because of socket buffer overrun
+@ network.tcp.outofwindowicmps Number of dropped out of window ICMPs
+@ network.tcp.lockdroppedicmps Number of dropped ICMP because socket was locked
+@ network.tcp.arpfilter Number of arp packets filtered
+@ network.tcp.timewaited Number of TCP sockets finished time wait in fast timer
+@ network.tcp.timewaitrecycled Number of time wait sockets recycled by time
stamp
+@ network.tcp.timewaitkilled Number of TCP sockets finished time wait in slow
timer
+@ network.tcp.pawspassiverejected Number of passive connections rejected
because of timestamp
+@ network.tcp.pawsactiverejected Number of active connections rejected because
of timestamp
+@ network.tcp.pawsestabrejected Number of packets rejects in established
connections because of timestamp
+@ network.tcp.delayedacks Number of delayed acks sent
+@ network.tcp.delayedacklocked Number of delayed acks further delayed because
of locked socket
+@ network.tcp.delayedacklost Number of times quick ack mode was activated times
+@ network.tcp.listenoverflows Number of times the listen queue of a socket
overflowed
+@ network.tcp.listendrops Number of SYNs to LISTEN sockets dropped
+@ network.tcp.prequeued Number of packets directly queued to recvmsg prequeue
+@ network.tcp.directcopyfrombacklog Number of bytes directly in process
context from backlog
+@ network.tcp.directcopyfromprequeue Number of bytes directly received in
process context from prequeue
+@ network.tcp.prequeueddropped Number of packets dropped from prequeue
+@ network.tcp.hphits Number of packet headers predicted
+@ network.tcp.hphitstouser Number of packets header predicted and directly
queued to user
+@ network.tcp.pureacks Number of acknowledgments not containing data payload
received
+@ network.tcp.hpacks Number of predicted acknowledgments
+@ network.tcp.renorecovery Number of times recovered from packet loss due to
fast retransmit
+@ network.tcp.sackrecovery Number of times recovered from packet loss by
selective acknowledgements
+@ network.tcp.sackreneging Number of bad SACK blocks received
+@ network.tcp.fackreorder Number of times detected reordering using FACK
+@ network.tcp.sackreorder Number of times detected reordering using SACK
+@ network.tcp.renoreorder Number of times detected reordering using reno fast
retransmit
+@ network.tcp.tsreorder Number of times detected reordering times using time
stamp
+@ network.tcp.fullundo Number of congestion windows fully recovered without
slow start
+@ network.tcp.partialundo Number of congestion windows partially recovered
using Hoe heuristic
+@ network.tcp.dsackundo Number of congestion windows recovered without slow
start using DSACK
+@ network.tcp.lossundo Number of congestion windows recovered without slow
start after partial ack
+@ network.tcp.lostretransmit Number of retransmits lost
+@ network.tcp.renofailures Number of timeouts after reno fast retransmit
+@ network.tcp.sackfailures Number of timeouts after SACK recovery
+@ network.tcp.lossfailures Number of timeouts in loss state
+@ network.tcp.fastretrans Number of fast retransmits
+@ network.tcp.forwardretrans Number of forward retransmits
+@ network.tcp.slowstartretrans Number of retransmits in slow start
+@ network.tcp.timeouts Number of other TCP timeouts
+@ network.tcp.lossprobes Number of sent TCP loss probes
+@ network.tcp.lossproberecovery Number of TCP loss probe recoveries
+@ network.tcp.renorecoveryfail Number of reno fast retransmits failed
+@ network.tcp.sackrecoveryfail Number of SACK retransmits failed
+@ network.tcp.schedulerfail Number of times receiver scheduled too late for
direct processing
+@ network.tcp.rcvcollapsed Number of packets collapsed in receive queue due to
low socket buffer
+@ network.tcp.dsackoldsent Number of DSACKs sent for old packets
+@ network.tcp.dsackofosent Number of DSACKs sent for out of order packets
+@ network.tcp.dsackrecv Number of DSACKs received
+@ network.tcp.dsackoforecv Number of DSACKs for out of order packets received
+@ network.tcp.abortondata Number of connections reset due to unexpected data
+@ network.tcp.abortonclose Number of connections reset due to early user close
+@ network.tcp.abortonmemory Number of connections aborted due to memory
pressure
+@ network.tcp.abortontimeout Number of connections aborted due to timeout
+@ network.tcp.abortonlinger Number of connections aborted after user close in
linger timeout
+@ network.tcp.abortfailed Number of times unable to send RST due to no memory
+@ network.tcp.memorypressures Numer of times TCP ran low on memory
+@ network.tcp.sackdiscard Number of SACKs discarded
+@ network.tcp.dsackignoredold Number of ignored old duplicate SACKs
+@ network.tcp.dsackignorednoundo Number of ignored duplicate SACKs with
undo_marker not set
+@ network.tcp.spuriousrtos Number of FRTO's successfully detected spurious RTOs
+@ network.tcp.md5notfound Number of times MD5 hash expected but not found
+@ network.tcp.md5unexpected Number of times MD5 hash unexpected but found
+@ network.tcp.sackshifted Number of SACKs shifted
+@ network.tcp.sackmerged Number of SACKs merged
+@ network.tcp.sackshiftfallback Number of SACKs fallbacks
+@ network.tcp.backlogdrop Number of frames dropped because of full backlog
queue
+@ network.tcp.minttldrop Number of frames dropped when TTL is under the minimum
+@ network.tcp.deferacceptdrop Number of dropped ACK frames when socket is in
SYN-RECV state
+Due to SYNACK retrans count lower than defer_accept value
+
+@ network.tcp.iprpfilter Number of packets dropped in input path because of
rp_filter settings
+@ network.tcp.timewaitoverflow Number of occurences of time wait bucket
overflow
+@ network.tcp.reqqfulldocookies Number of times a SYNCOOKIE was replied to
client
+@ network.tcp.reqqfulldrop Number of times a SYN request was dropped due to
disabled syncookies
+@ network.tcp.retransfail Number of failed tcp_retransmit_skb() calls
+@ network.tcp.rcvcoalesce Number of times tried to coalesce the receive queue
+@ network.tcp.ofoqueue Number of packets queued in OFO queue
+@ network.tcp.ofodrop Number of packets meant to be queued in OFO but dropped
because socket rcvbuf limit hit
+@ network.tcp.ofomerge Number of packets in OFO that were merged with other
packets
+@ network.tcp.challengeack Number of challenge ACKs sent (RFC 5961 3.2)
+@ network.tcp.synchallenge Number of challenge ACKs sent in response to SYN
packets
+@ network.tcp.fastopenactive Number of successful active fast opens
+@ network.tcp.fastopenactivefail Number of fast open attempts failed due to
remote not accepting it or time outs
+@ network.tcp.fastopenpassive Number of successful passive fast opens
+@ network.tcp.fastopenpassivefail Number of passive fast open attempts failed
+@ network.tcp.fastopenlistenoverflow Number of times the fastopen listen queue
overflowed
+@ network.tcp.fastopencookiereqd Number of fast open cookies requested
+@ network.tcp.spuriosrtxhostqueues Number of times detected that the fast
clone is not yet freed in tcp_transmit_skb()
+@ network.tcp.busypollrxpackets Number of low latency application-fetched
packets
+@ network.tcp.autocorking Number of times stack detected skb was underused and
its flush was deferred
+@ network.tcp.fromzerowindowadv Number of times window went from zero to
non-zero
+@ network.tcp.tozerowindowadv Number of times window went from non-zero to zero
+@ network.tcp.wantzerowindowadv Number of times zero window announced
+@ network.tcp.synretrans Number of SYN-SYN/ACK retransmits to break down
retransmissions in SYN, fast/timeout retransmits
+@ network.tcp.origdatasent Number of outgoing packets with original data
+Excluding retransmission but including data-in-SYN). This counter is different
from
+TcpOutSegs because TcpOutSegs also tracks pure ACKs. TCPOrigDataSent is
+more useful to track the TCP retransmission rate.
+
@ pmda.uname identity and type of current system
Identity and type of current system. The concatenation of the values
returned from utsname(2), also similar to uname -a.
diff --git a/src/pmdas/linux/pmda.c b/src/pmdas/linux/pmda.c
index 85097c20475e..33ec40de3fc4 100644
--- a/src/pmdas/linux/pmda.c
+++ b/src/pmdas/linux/pmda.c
@@ -48,6 +48,7 @@
#include "proc_net_sockstat.h"
#include "proc_net_tcp.h"
#include "proc_partitions.h"
+#include "proc_net_netstat.h"
#include "proc_net_snmp.h"
#include "proc_scsi.h"
#include "proc_slabinfo.h"
@@ -96,6 +97,7 @@ int _pm_idletime_size; /* size in bytes of the idle cputime
metric */
proc_vmstat_t _pm_proc_vmstat;
proc_net_snmp_t _pm_proc_net_snmp;
pmdaInstid _pm_proc_net_snmp_indom_id[NR_ICMPMSG_COUNTERS];
+proc_net_netstat_t _pm_proc_net_netstat;
/*
* Metric Instance Domains (statically initialized ones only)
@@ -2323,6 +2325,605 @@ static pmdaMetric metrictab[] = {
{ PMDA_PMID(CLUSTER_NET_SNMP,89), PM_TYPE_U64, ICMPMSG_INDOM,
PM_SEM_COUNTER,
PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+/*
+ * network netstat cluster
+ */
+
+/* network.ip.innoroutes */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INNOROUTES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,0), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.intruncatedpkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INTRUNCATEDPKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,1), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.inmcastpkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTPKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,2), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.outmcastpkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTPKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,3), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.inbcastpkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTPKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,4), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.outbcastpkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTPKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,5), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.inoctets */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INOCTETS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,6), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.outoctets */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTOCTETS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,7), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.inmcastoctets */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTOCTETS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,8), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.outmcastoctets */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTOCTETS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,9), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.inbcastoctets */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTOCTETS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,10), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.outbcastoctets */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTOCTETS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,11), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.csumerrors */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CSUMERRORS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,12), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.noectpkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_NOECTPKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,13), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.ect1pkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT1PKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,14), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.ect0pkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT0PKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,15), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.ip.cepkts */
+ { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CEPKTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,16), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.syncookiessent */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESSENT],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,17), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.syncookiesrecv */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESRECV],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,18), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.syncookiesfailed */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESFAILED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,19), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.embryonicrsts */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_EMBRYONICRSTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,20), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.prunecalled */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PRUNECALLED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,21), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.rcvpruned */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_RCVPRUNED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,22), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.ofopruned */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OFOPRUNED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,23), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.outofwindowicmps */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OUTOFWINDOWICMPS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,24), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.lockdroppedicmps */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LOCKDROPPEDICMPS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,25), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.arpfilter */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_ARPFILTER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,26), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.timewaited */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,27), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.timewaitrecycled */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITRECYCLED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,28), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.timewaitkilled */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITKILLED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,29), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.pawspassiverejected */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSPASSIVEREJECTED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,30), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.pawsactiverejected */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSACTIVEREJECTED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,31), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.pawsestabrejected */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSESTABREJECTED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,32), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.delayedacks */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,33), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.delayedacklocked */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOCKED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,34), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.delayedacklost */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOST],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,35), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.listenoverflows */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENOVERFLOWS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,36), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.listendrops */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENDROPS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,37), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.prequeued */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,38), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.directcopyfrombacklog */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMBACKLOG],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,39), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.directcopyfromprequeue */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMPREQUEUE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,40), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.prequeuedropped */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUEDROPPED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,41), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.hphits*/
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,42), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.hphitstouser */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITSTOUSER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,43), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.pureacks */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPUREACKS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,44), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.hpacks */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPACKS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,45), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.renorecovery */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERY],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,46), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackrecovery */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERY],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,47), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackreneging */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRENEGING],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,48), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fackreorder */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFACKREORDER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,49), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackreorder */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKREORDER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,50), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.renoreorder */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOREORDER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,51), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.tsreorder */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTSREORDER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,52), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fullundo */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFULLUNDO],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,53), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.partialundo */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPARTIALUNDO],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,54), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.dsackundo */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKUNDO],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,55), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.lossundo */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSUNDO],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,56), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.lostretransmit */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSTRETRANSMIT],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,57), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.renofailures */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOFAILURES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,58), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackfailures */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKFAILURES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,59), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.lossfailures */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSFAILURES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,60), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fastretrans */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTRETRANS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,61), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.forwardretrans */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFORWARDRETRANS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,62), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.slowstartretrans */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSLOWSTARTRETRANS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,63), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.timeouts */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEOUTS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,64), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.lossprobes */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,65), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.lossproberecovery */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBERECOVERY],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,66), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.renorecoveryfail */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERYFAIL],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,67), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackrecoveryfail */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERYFAIL],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,68), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.schedulerfailed */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSCHEDULERFAILED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,69), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.rcvcollapsed */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOLLAPSED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,70), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.dsackoldsent */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOLDSENT],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,71), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.dsackofosent */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFOSENT],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,72), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.dsackrecv */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKRECV],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,73), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.dsackoforecv */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFORECV],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,74), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.abortondata */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONDATA],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,75), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.abortonclose */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONCLOSE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,76), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.abortonmemory */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONMEMORY],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,77), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.abortontimeout */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONTIMEOUT],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,78), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.abortonlinger */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONLINGER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,79), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.abortfailed */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTFAILED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,80), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.memorypressures */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMEMORYPRESSURES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,81), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackdiscard */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKDISCARD],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,82), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.dsackignoredold */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDOLD],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,83), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.dsackignorednoundo */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDNOUNDO],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,84), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.spuriousrtos */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUSRTOS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,85), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.md5notfound */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5NOTFOUND],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,86), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.md5unexpected */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5UNEXPECTED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,87), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackshifted */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,88), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackmerged */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKMERGED],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,89), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.sackshiftfallback */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTFALLBACK],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,90), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.backlogdrop */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPBACKLOGDROP],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,91), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.minttldrop */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMINTTLDROP],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,92), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.deferacceptdrop */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDEFERACCEPTDROP],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,93), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.iprpfilter */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_IPRPFILTER],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,94), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.timewaitoverflow */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEWAITOVERFLOW],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,95), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.reqqfulldocookies */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDOCOOKIES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,96), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.reqqfulldrop */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDROP],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,97), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.retransfail */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRETRANSFAIL],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,98), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.rcvcoalesce */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOALESCE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,99), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.ofoqueue */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOQUEUE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,100), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.ofodrop */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFODROP],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,101), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.ofomerge */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOMERGE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,102), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.challengeack */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPCHALLENGEACK],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,103), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.synchallenge */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNCHALLENGE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,104), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fastopenactive */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,105), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fastopenactivefail */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVEFAIL],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,106), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fastopenpassive */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVE],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,107), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fastopenpassivefail */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVEFAIL],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,108), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fastopenlistenoverflow */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENLISTENOVERFLOW],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,109), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fastopencookiereqd */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENCOOKIEREQD],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,110), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.spuriousrtxhostqueues */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUS_RTX_HOSTQUEUES],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,111), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.busypollrxpackets */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_BUSYPOLLRXPACKETS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,112), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.autocorking */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPAUTOCORKING],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,113), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.fromzerowindowadv */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFROMZEROWINDOWADV],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,114), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.tozerowindowadv */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTOZEROWINDOWADV],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,115), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.wantzerowindowadv */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPWANTZEROWINDOWADV],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,116), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.synretrans */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNRETRANS],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,117), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
+/* network.tcp.origdatasent */
+ { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPORIGDATASENT],
+ { PMDA_PMID(CLUSTER_NET_NETSTAT,118), PM_TYPE_U64, PM_INDOM_NULL,
PM_SEM_COUNTER,
+ PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },
+
/* hinv.map.scsi */
{ NULL,
{ PMDA_PMID(CLUSTER_SCSI,0), PM_TYPE_STRING, SCSI_INDOM,
PM_SEM_DISCRETE,
@@ -3164,6 +3765,9 @@ linux_refresh(pmdaExt *pmda, int *need_refresh)
if (need_refresh[CLUSTER_NET_TCP])
refresh_proc_net_tcp(&proc_net_tcp);
+ if (need_refresh[CLUSTER_NET_NETSTAT])
+ refresh_proc_net_netstat(&_pm_proc_net_netstat);
+
if (need_refresh[CLUSTER_SLAB])
refresh_proc_slabinfo(&proc_slabinfo);
@@ -3296,6 +3900,11 @@ linux_fetchCallBack(pmdaMetric *mdesc, unsigned int
inst, pmAtomValue *atom)
return 0; /* no value available on this kernel */
}
else
+ if (idp->cluster == CLUSTER_NET_NETSTAT) {
+ if (*(__uint64_t *)mdesc->m_user == (__uint64_t)-1)
+ return 0; /* no value available on this kernel */
+ }
+ else
if (idp->cluster == CLUSTER_NET_NFS) {
/*
* check if rpc stats are available
diff --git a/src/pmdas/linux/proc_net_netstat.c
b/src/pmdas/linux/proc_net_netstat.c
new file mode 100644
index 000000000000..801f582b8355
--- /dev/null
+++ b/src/pmdas/linux/proc_net_netstat.c
@@ -0,0 +1,353 @@
+/*
+ * Copyright (c) 2014 Red Hat.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include "pmapi.h"
+#include "impl.h"
+#include "pmda.h"
+#include "proc_net_netstat.h"
+
+extern proc_net_netstat_t _pm_proc_net_netstat;
+
+typedef struct {
+ const char *field;
+ __uint64_t *offset;
+} netstat_fields_t;
+
+netstat_fields_t netstat_ip_fields[] = {
+ { .field = "InNoRoutes",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INNOROUTES] },
+ { .field = "InTruncatedPkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INTRUNCATEDPKTS] },
+ { .field = "InMcastPkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTPKTS] },
+ { .field = "OutMcastPkts ",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTPKTS] },
+ { .field = "InBcastPkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTPKTS] },
+ { .field = "OutBcastPkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTPKTS] },
+ { .field = "InOctets",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INOCTETS] },
+ { .field = "OutOctets",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTOCTETS] },
+ { .field = "InMcastOctets",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTOCTETS] },
+ { .field = "OutMcastOctets",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTOCTETS] },
+ { .field = "InBcastOctets",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTOCTETS] },
+ { .field = "OutBcastOctets",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTOCTETS] },
+ { .field = "InCsumErrors",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CSUMERRORS] },
+ { .field = "InNoECTPkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_NOECTPKTS] },
+ { .field = "InECT1Pkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT1PKTS] },
+ { .field = "InECT0Pkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT0PKTS] },
+ { .field = "InCEPkts",
+ .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CEPKTS] }
+};
+
+
+netstat_fields_t netstat_tcp_fields[] = {
+ { .field = "SyncookiesSent",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESSENT] },
+ { .field = "SyncookiesRecv",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESRECV] },
+ { .field = "SyncookiesFailed",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESFAILED]
},
+ { .field = "EmbryonicRsts",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_EMBRYONICRSTS] },
+ { .field = "PruneCalled",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PRUNECALLED] },
+ { .field = "RcvPruned",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_RCVPRUNED] },
+ { .field = "OfoPruned",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OFOPRUNED] },
+ { .field = "OutOfWindowIcmps",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OUTOFWINDOWICMPS]
},
+ { .field = "LockDroppedIcmps",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LOCKDROPPEDICMPS]
},
+ { .field = "ArpFilter",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_ARPFILTER] },
+ { .field = "TW",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITED] },
+ { .field = "TWRecycled",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITRECYCLED]
},
+ { .field = "TWKilled",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITKILLED] },
+ { .field = "PAWSPassive",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSPASSIVEREJECTED] },
+ { .field = "PAWSActive",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSACTIVEREJECTED] },
+ { .field = "PAWSEstab",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSESTABREJECTED]
},
+ { .field = "DelayedACKs",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKS] },
+ { .field = "DelayedACKLocked",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOCKED]
},
+ { .field = "DelayedACKLost",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOST] },
+ { .field = "ListenOverflows",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENOVERFLOWS] },
+ { .field = "ListenDrops",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENDROPS] },
+ { .field = "TCPPrequeued",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUED] },
+ { .field = "TCPDirectCopyFromBacklog",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMBACKLOG] },
+ { .field = "TCPDirectCopyFromPrequeue",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMPREQUEUE] },
+ { .field = "TCPPrequeueDropped",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUEDROPPED] },
+ { .field = "TCPHPHits",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITS] },
+ { .field = "TCPHPHitsToUser",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITSTOUSER] },
+ { .field = "TCPPureAcks",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPUREACKS] },
+ { .field = "TCPHPAcks",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPACKS] },
+ { .field = "TCPRenoRecovery",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERY] },
+ { .field = "TCPSackRecovery",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERY] },
+ { .field = "TCPSACKReneging",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRENEGING] },
+ { .field = "TCPFACKReorder",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFACKREORDER] },
+ { .field = "TCPSACKReorder",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKREORDER] },
+ { .field = "TCPRenoReorder",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOREORDER] },
+ { .field = "TCPTSReorder",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTSREORDER] },
+ { .field = "TCPFullUndo",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFULLUNDO] },
+ { .field = "TCPPartialUndo",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPARTIALUNDO] },
+ { .field = "TCPDSACKUndo",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKUNDO] },
+ { .field = "TCPLossUndo",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSUNDO] },
+ { .field = "TCPLostRetransmit",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSTRETRANSMIT]
},
+ { .field = "TCPRenoFailures",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOFAILURES] },
+ { .field = "TCPSackFailures",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKFAILURES] },
+ { .field = "TCPLossFailures",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSFAILURES] },
+ { .field = "TCPFastRetrans",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTRETRANS] },
+ { .field = "TCPForwardRetrans",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFORWARDRETRANS]
},
+ { .field = "TCPSlowStartRetrans",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSLOWSTARTRETRANS] },
+ { .field = "TCPTimeouts",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEOUTS] },
+ { .field = "TCPLossProbes",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBES] },
+ { .field = "TCPLossProbeRecovery",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBERECOVERY] },
+ { .field = "TCPRenoRecoveryFail",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERYFAIL] },
+ { .field = "TCPSackRecoveryFail",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERYFAIL] },
+ { .field = "TCPSchedulerFailed",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSCHEDULERFAILED] },
+ { .field = "TCPRcvCollapsed",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOLLAPSED] },
+ { .field = "TCPDSACKOldSent",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOLDSENT] },
+ { .field = "TCPDSACKOfoSent",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFOSENT] },
+ { .field = "TCPDSACKRecv",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKRECV] },
+ { .field = "TCPDSACKOfoRecv",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFORECV] },
+ { .field = "TCPAbortOnData",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONDATA] },
+ { .field = "TCPAbortOnClose",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONCLOSE] },
+ { .field = "TCPAbortOnMemory",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONMEMORY]
},
+ { .field = "TCPAbortOnTimeout",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONTIMEOUT]
},
+ { .field = "TCPAbortOnLinger",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONLINGER]
},
+ { .field = "TCPAbortFailed",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTFAILED] },
+ { .field = "TCPMemoryPressures",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMEMORYPRESSURES] },
+ { .field = "TCPSACKDiscard",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKDISCARD] },
+ { .field = "TCPDSACKIgnoredOld",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDOLD] },
+ { .field = "TCPDSACKIgnoredNoUndo",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDNOUNDO] },
+ { .field = "TCPSpuriousRTOs",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUSRTOS] },
+ { .field = "TCPMD5NotFound",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5NOTFOUND] },
+ { .field = "TCPMD5Unexpected",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5UNEXPECTED]
},
+ { .field = "TCPSackShifted",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTED] },
+ { .field = "TCPSackMerged",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKMERGED] },
+ { .field = "TCPSackShiftFallback",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTFALLBACK]
},
+ { .field = "TCPBacklogDrop",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPBACKLOGDROP] },
+ { .field = "TCPMinTTLDrop",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMINTTLDROP] },
+ { .field = "TCPDeferAcceptDrop",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDEFERACCEPTDROP] },
+ { .field = "IPReversePathFilter",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_IPRPFILTER] },
+ { .field = "TCPTimeWaitOverflow",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEWAITOVERFLOW] },
+ { .field = "TCPReqQFullDoCookies",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDOCOOKIES] },
+ { .field = "TCPReqQFullDrop",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDROP] },
+ { .field = "TCPRetransFail",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRETRANSFAIL] },
+ { .field = "TCPRcvCoalesce",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOALESCE] },
+ { .field = "TCPOFOQueue",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOQUEUE] },
+ { .field = "TCPOFODrop",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFODROP] },
+ { .field = "TCPOFOMerge",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOMERGE] },
+ { .field = "TCPChallengeACK",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPCHALLENGEACK] },
+ { .field = "TCPSYNChallenge",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNCHALLENGE] },
+ { .field = "TCPFastOpenActive",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVE]
},
+ { .field = "TCPFastOpenPassive",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVEFAIL] },
+ { .field = "TCPFastOpenPassiveFail",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVEFAIL] },
+ { .field = "TCPFastOpenListenOverflow",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENLISTENOVERFLOW] },
+ { .field = "TCPFastOpenCookieReqd",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENCOOKIEREQD] },
+ { .field = "TCPSpuriousRtxHostQueues",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUS_RTX_HOSTQUEUES] },
+ { .field = "BusyPollRxPackets",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_BUSYPOLLRXPACKETS]
},
+ { .field = "TCPAutoCorking",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPAUTOCORKING] },
+ { .field = "TCPFromZeroWindowAdv",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFROMZEROWINDOWADV] },
+ { .field = "TCPToZeroWindowAdv",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTOZEROWINDOWADV] },
+ { .field = "TCPWantZeroWindowAdv",
+ .offset =
&_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPWANTZEROWINDOWADV] },
+ { .field = "TCPSynRetrans",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNRETRANS] },
+ { .field = "TCPOrigDataSent",
+ .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPORIGDATASENT] }
+};
+
+static void
+get_fields(netstat_fields_t *fields, char *header, char *buffer)
+{
+ int i, j, count;
+ char *p, *indices[NETSTAT_MAX_COLUMNS];
+
+ /* first get pointers to each of the column headings */
+ strtok(header, " ");
+ for (i = 0; i < NETSTAT_MAX_COLUMNS; i++) {
+ if ((p = strtok(NULL, " \n")) == NULL)
+ break;
+ indices[i] = p;
+ }
+ count = i;
+
+ /*
+ * Extract values via back-referencing column headings.
+ * "i" is the last found index, which we use for a bit
+ * of optimisation for the (common) in-order maps case
+ * (where "in order" means in the order defined by the
+ * passed in "fields" table which typically matches the
+ * kernel - but may be out-of-order for older kernels).
+ */
+ strtok(buffer, " ");
+ for (i = j = 0; j < count && fields[i].field; j++, i++) {
+ if ((p = strtok(NULL, " \n")) == NULL)
+ break;
+ if (strcmp(fields[i].field, indices[j]) == 0)
+ *fields[i].offset = strtoull(p, NULL, 10);
+ else {
+ for (i = 0; fields[i].field; i++) {
+ if (strcmp(fields[i].field, indices[j]) != 0)
+ continue;
+ *fields[i].offset = strtoull(p, NULL, 10);
+ break;
+ }
+ if (fields[i].field == NULL) /* not found, ignore */
+ i = 0;
+ }
+ }
+}
+
+
+#define NETSTAT_IP_OFFSET(ii, pp) (int64_t *)((char *)pp + \
+ (__psint_t)netstat_ip_fields[ii].offset -
(__psint_t)&_pm_proc_net_netstat.ip)
+#define NETSTAT_TCP_OFFSET(ii, pp) (int64_t *)((char *)pp + \
+ (__psint_t)netstat_tcp_fields[ii].offset -
(__psint_t)&_pm_proc_net_netstat.tcp)
+
+static void
+init_refresh_proc_net_netstat(proc_net_netstat_t *netstat)
+{
+ int i;
+
+ /* initially, all marked as "no value available" */
+ for (i = 0; netstat_ip_fields[i].field != NULL; i++)
+ *(NETSTAT_IP_OFFSET(i, netstat->ip)) = -1;
+ for (i = 0; netstat_tcp_fields[i].field != NULL; i++)
+ *(NETSTAT_TCP_OFFSET(i, netstat->tcp)) = -1;
+}
+
+int
+refresh_proc_net_netstat(proc_net_netstat_t *netstat)
+{
+ /* Need a sufficiently large value to hold a full line */
+ char header[2048];
+ char values[2048];
+ FILE *fp;
+
+ init_refresh_proc_net_netstat(netstat);
+ if ((fp = fopen("/proc/net/netstat", "r")) == NULL)
+ return -oserror();
+ while (fgets(header, sizeof(header), fp) != NULL) {
+ if (fgets(values, sizeof(values), fp) != NULL) {
+ if (strncmp(values, "IpExt:", 6) == 0)
+ get_fields(netstat_ip_fields, header, values);
+ else if (strncmp(values, "TcpExt:", 7) == 0)
+ get_fields(netstat_tcp_fields, header, values);
+ else
+ __pmNotifyErr(LOG_ERR, "Unrecognised /proc/net/netstat row:
%s\n", values);
+ }
+ }
+ fclose(fp);
+ return 0;
+}
diff --git a/src/pmdas/linux/proc_net_netstat.h
b/src/pmdas/linux/proc_net_netstat.h
new file mode 100644
index 000000000000..4a5a9c893a11
--- /dev/null
+++ b/src/pmdas/linux/proc_net_netstat.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2014 Red Hat.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#define NETSTAT_MAX_COLUMNS 256 /* arbitrary upper bound (228 observed as
of 22/04/2014)*/
+
+enum {
+ _PM_NETSTAT_IPEXT_INNOROUTES = 0,
+ _PM_NETSTAT_IPEXT_INTRUNCATEDPKTS,
+ _PM_NETSTAT_IPEXT_INMCASTPKTS,
+ _PM_NETSTAT_IPEXT_OUTMCASTPKTS,
+ _PM_NETSTAT_IPEXT_INBCASTPKTS,
+ _PM_NETSTAT_IPEXT_OUTBCASTPKTS,
+ _PM_NETSTAT_IPEXT_INOCTETS,
+ _PM_NETSTAT_IPEXT_OUTOCTETS,
+ _PM_NETSTAT_IPEXT_INMCASTOCTETS,
+ _PM_NETSTAT_IPEXT_OUTMCASTOCTETS,
+ _PM_NETSTAT_IPEXT_INBCASTOCTETS,
+ _PM_NETSTAT_IPEXT_OUTBCASTOCTETS,
+ _PM_NETSTAT_IPEXT_CSUMERRORS,
+ _PM_NETSTAT_IPEXT_NOECTPKTS,
+ _PM_NETSTAT_IPEXT_ECT1PKTS,
+ _PM_NETSTAT_IPEXT_ECT0PKTS,
+ _PM_NETSTAT_IPEXT_CEPKTS,
+ _PM_NETSTAT_IPEXT_NFIELDS /* must be last */
+};
+
+enum {
+ _PM_NETSTAT_TCPEXT_SYNCOOKIESSENT = 0,
+ _PM_NETSTAT_TCPEXT_SYNCOOKIESRECV,
+ _PM_NETSTAT_TCPEXT_SYNCOOKIESFAILED,
+ _PM_NETSTAT_TCPEXT_EMBRYONICRSTS,
+ _PM_NETSTAT_TCPEXT_PRUNECALLED,
+ _PM_NETSTAT_TCPEXT_RCVPRUNED,
+ _PM_NETSTAT_TCPEXT_OFOPRUNED,
+ _PM_NETSTAT_TCPEXT_OUTOFWINDOWICMPS,
+ _PM_NETSTAT_TCPEXT_LOCKDROPPEDICMPS,
+ _PM_NETSTAT_TCPEXT_ARPFILTER,
+ _PM_NETSTAT_TCPEXT_TIMEWAITED,
+ _PM_NETSTAT_TCPEXT_TIMEWAITRECYCLED,
+ _PM_NETSTAT_TCPEXT_TIMEWAITKILLED,
+ _PM_NETSTAT_TCPEXT_PAWSPASSIVEREJECTED,
+ _PM_NETSTAT_TCPEXT_PAWSACTIVEREJECTED,
+ _PM_NETSTAT_TCPEXT_PAWSESTABREJECTED,
+ _PM_NETSTAT_TCPEXT_DELAYEDACKS,
+ _PM_NETSTAT_TCPEXT_DELAYEDACKLOCKED,
+ _PM_NETSTAT_TCPEXT_DELAYEDACKLOST,
+ _PM_NETSTAT_TCPEXT_LISTENOVERFLOWS,
+ _PM_NETSTAT_TCPEXT_LISTENDROPS,
+ _PM_NETSTAT_TCPEXT_TCPPREQUEUED,
+ _PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMBACKLOG,
+ _PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMPREQUEUE,
+ _PM_NETSTAT_TCPEXT_TCPPREQUEUEDROPPED,
+ _PM_NETSTAT_TCPEXT_TCPHPHITS,
+ _PM_NETSTAT_TCPEXT_TCPHPHITSTOUSER,
+ _PM_NETSTAT_TCPEXT_TCPPUREACKS,
+ _PM_NETSTAT_TCPEXT_TCPHPACKS,
+ _PM_NETSTAT_TCPEXT_TCPRENORECOVERY,
+ _PM_NETSTAT_TCPEXT_TCPSACKRECOVERY,
+ _PM_NETSTAT_TCPEXT_TCPSACKRENEGING,
+ _PM_NETSTAT_TCPEXT_TCPFACKREORDER,
+ _PM_NETSTAT_TCPEXT_TCPSACKREORDER,
+ _PM_NETSTAT_TCPEXT_TCPRENOREORDER,
+ _PM_NETSTAT_TCPEXT_TCPTSREORDER,
+ _PM_NETSTAT_TCPEXT_TCPFULLUNDO,
+ _PM_NETSTAT_TCPEXT_TCPPARTIALUNDO,
+ _PM_NETSTAT_TCPEXT_TCPDSACKUNDO,
+ _PM_NETSTAT_TCPEXT_TCPLOSSUNDO,
+ _PM_NETSTAT_TCPEXT_TCPLOSTRETRANSMIT,
+ _PM_NETSTAT_TCPEXT_TCPRENOFAILURES,
+ _PM_NETSTAT_TCPEXT_TCPSACKFAILURES,
+ _PM_NETSTAT_TCPEXT_TCPLOSSFAILURES,
+ _PM_NETSTAT_TCPEXT_TCPFASTRETRANS,
+ _PM_NETSTAT_TCPEXT_TCPFORWARDRETRANS,
+ _PM_NETSTAT_TCPEXT_TCPSLOWSTARTRETRANS,
+ _PM_NETSTAT_TCPEXT_TCPTIMEOUTS,
+ _PM_NETSTAT_TCPEXT_TCPLOSSPROBES,
+ _PM_NETSTAT_TCPEXT_TCPLOSSPROBERECOVERY,
+ _PM_NETSTAT_TCPEXT_TCPRENORECOVERYFAIL,
+ _PM_NETSTAT_TCPEXT_TCPSACKRECOVERYFAIL,
+ _PM_NETSTAT_TCPEXT_TCPSCHEDULERFAILED,
+ _PM_NETSTAT_TCPEXT_TCPRCVCOLLAPSED,
+ _PM_NETSTAT_TCPEXT_TCPDSACKOLDSENT,
+ _PM_NETSTAT_TCPEXT_TCPDSACKOFOSENT,
+ _PM_NETSTAT_TCPEXT_TCPDSACKRECV,
+ _PM_NETSTAT_TCPEXT_TCPDSACKOFORECV,
+ _PM_NETSTAT_TCPEXT_TCPABORTONDATA,
+ _PM_NETSTAT_TCPEXT_TCPABORTONCLOSE,
+ _PM_NETSTAT_TCPEXT_TCPABORTONMEMORY,
+ _PM_NETSTAT_TCPEXT_TCPABORTONTIMEOUT,
+ _PM_NETSTAT_TCPEXT_TCPABORTONLINGER,
+ _PM_NETSTAT_TCPEXT_TCPABORTFAILED,
+ _PM_NETSTAT_TCPEXT_TCPMEMORYPRESSURES,
+ _PM_NETSTAT_TCPEXT_TCPSACKDISCARD,
+ _PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDOLD,
+ _PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDNOUNDO,
+ _PM_NETSTAT_TCPEXT_TCPSPURIOUSRTOS,
+ _PM_NETSTAT_TCPEXT_TCPMD5NOTFOUND,
+ _PM_NETSTAT_TCPEXT_TCPMD5UNEXPECTED,
+ _PM_NETSTAT_TCPEXT_SACKSHIFTED,
+ _PM_NETSTAT_TCPEXT_SACKMERGED,
+ _PM_NETSTAT_TCPEXT_SACKSHIFTFALLBACK,
+ _PM_NETSTAT_TCPEXT_TCPBACKLOGDROP,
+ _PM_NETSTAT_TCPEXT_TCPMINTTLDROP,
+ _PM_NETSTAT_TCPEXT_TCPDEFERACCEPTDROP,
+ _PM_NETSTAT_TCPEXT_IPRPFILTER,
+ _PM_NETSTAT_TCPEXT_TCPTIMEWAITOVERFLOW,
+ _PM_NETSTAT_TCPEXT_TCPREQQFULLDOCOOKIES,
+ _PM_NETSTAT_TCPEXT_TCPREQQFULLDROP,
+ _PM_NETSTAT_TCPEXT_TCPRETRANSFAIL,
+ _PM_NETSTAT_TCPEXT_TCPRCVCOALESCE,
+ _PM_NETSTAT_TCPEXT_TCPOFOQUEUE,
+ _PM_NETSTAT_TCPEXT_TCPOFODROP,
+ _PM_NETSTAT_TCPEXT_TCPOFOMERGE,
+ _PM_NETSTAT_TCPEXT_TCPCHALLENGEACK,
+ _PM_NETSTAT_TCPEXT_TCPSYNCHALLENGE,
+ _PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVE,
+ _PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVEFAIL,
+ _PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVE,
+ _PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVEFAIL,
+ _PM_NETSTAT_TCPEXT_TCPFASTOPENLISTENOVERFLOW,
+ _PM_NETSTAT_TCPEXT_TCPFASTOPENCOOKIEREQD,
+ _PM_NETSTAT_TCPEXT_TCPSPURIOUS_RTX_HOSTQUEUES,
+ _PM_NETSTAT_TCPEXT_BUSYPOLLRXPACKETS,
+ _PM_NETSTAT_TCPEXT_TCPAUTOCORKING,
+ _PM_NETSTAT_TCPEXT_TCPFROMZEROWINDOWADV,
+ _PM_NETSTAT_TCPEXT_TCPTOZEROWINDOWADV,
+ _PM_NETSTAT_TCPEXT_TCPWANTZEROWINDOWADV,
+ _PM_NETSTAT_TCPEXT_TCPSYNRETRANS,
+ _PM_NETSTAT_TCPEXT_TCPORIGDATASENT,
+ _PM_NETSTAT_TCPEXT_NFIELDS /* must be last */
+};
+
+
+typedef struct {
+ __uint64_t ip[_PM_NETSTAT_IPEXT_NFIELDS];
+ __uint64_t tcp[_PM_NETSTAT_TCPEXT_NFIELDS];
+} proc_net_netstat_t;
+
+extern int refresh_proc_net_netstat(proc_net_netstat_t *);
diff --git a/src/pmdas/linux/root_linux b/src/pmdas/linux/root_linux
index 5f0058fb8f11..9f233471cd4b 100644
--- a/src/pmdas/linux/root_linux
+++ b/src/pmdas/linux/root_linux
@@ -501,6 +501,23 @@ network.ip {
fragoks 60:14:16
fragfails 60:14:17
fragcreates 60:14:18
+ innoroutes 60:53:00
+ intruncatedpkts 60:53:01
+ inmcastpkts 60:53:02
+ outmcastpkts 60:53:03
+ inbcastpkts 60:53:04
+ outbcastpkts 60:53:05
+ inoctets 60:53:06
+ outoctets 60:53:07
+ inmcastoctets 60:53:08
+ outmcastoctets 60:53:09
+ inbcastoctets 60:53:10
+ outbcastoctets 60:53:11
+ csumerrors 60:53:12
+ noectpkts 60:53:13
+ ect1pkts 60:53:14
+ ect0pkts 60:53:15
+ cepkts 60:53:16
}
network.icmp {
@@ -549,6 +566,108 @@ network.tcp {
inerrs 60:14:62
outrsts 60:14:63
incsumerrors 60:14:64
+ syncookiessent 60:53:17
+ syncookiesrecv 60:53:18
+ syncookiesfailed 60:53:19
+ embryonicrsts 60:53:20
+ prunecalled 60:53:21
+ rcvpruned 60:53:22
+ ofopruned 60:53:23
+ outofwindowicmps 60:53:24
+ lockdroppedicmps 60:53:25
+ arpfilter 60:53:26
+ timewaited 60:53:27
+ timewaitrecycled 60:53:28
+ timewaitkilled 60:53:29
+ pawspassiverejected 60:53:30
+ pawsactiverejected 60:53:31
+ pawsestabrejected 60:53:32
+ delayedacks 60:53:33
+ delayedacklocked 60:53:34
+ delayedacklost 60:53:35
+ listenoverflows 60:53:36
+ listendrops 60:53:37
+ prequeued 60:53:38
+ directcopyfrombacklog 60:53:39
+ directcopyfromprequeue 60:53:40
+ prequeueddropped 60:53:41
+ hphits 60:53:42
+ hphitstouser 60:53:43
+ pureacks 60:53:44
+ hpacks 60:53:45
+ renorecovery 60:53:46
+ sackrecovery 60:53:47
+ sackreneging 60:53:48
+ fackreorder 60:53:49
+ sackreorder 60:53:50
+ renoreorder 60:53:51
+ tsreorder 60:53:52
+ fullundo 60:53:53
+ partialundo 60:53:54
+ dsackundo 60:53:55
+ lossundo 60:53:56
+ lostretransmit 60:53:57
+ renofailures 60:53:58
+ sackfailures 60:53:59
+ lossfailures 60:53:60
+ fastretrans 60:53:61
+ forwardretrans 60:53:62
+ slowstartretrans 60:53:63
+ timeouts 60:53:64
+ lossprobes 60:53:65
+ lossproberecovery 60:53:66
+ renorecoveryfail 60:53:67
+ sackrecoveryfail 60:53:68
+ schedulerfail 60:53:69
+ rcvcollapsed 60:53:70
+ dsackoldsent 60:53:71
+ dsackofosent 60:53:72
+ dsackrecv 60:53:73
+ dsackoforecv 60:53:74
+ abortondata 60:53:75
+ abortonclose 60:53:76
+ abortonmemory 60:53:77
+ abortontimeout 60:53:78
+ abortonlinger 60:53:79
+ abortfailed 60:53:80
+ memorypressures 60:53:81
+ sackdiscard 60:53:82
+ dsackignoredold 60:53:83
+ dsackignorednoundo 60:53:84
+ spuriousrtos 60:53:85
+ md5notfound 60:53:86
+ md5unexpected 60:53:87
+ sackshifted 60:53:88
+ sackmerged 60:53:89
+ sackshiftfallback 60:53:90
+ backlogdrop 60:53:91
+ minttldrop 60:53:92
+ deferacceptdrop 60:53:93
+ iprpfilter 60:53:94
+ timewaitoverflow 60:53:95
+ reqqfulldocookies 60:53:96
+ reqqfulldrop 60:53:97
+ retransfail 60:53:98
+ rcvcoalesce 60:53:99
+ ofoqueue 60:53:100
+ ofodrop 60:53:101
+ ofomerge 60:53:102
+ challengeack 60:53:103
+ synchallenge 60:53:104
+ fastopenactive 60:53:105
+ fastopenactivefail 60:53:106
+ fastopenpassive 60:53:107
+ fastopenpassivefail 60:53:108
+ fastopenlistenoverflow 60:53:109
+ fastopencookiereqd 60:53:110
+ spuriosrtxhostqueues 60:53:111
+ busypollrxpackets 60:53:112
+ autocorking 60:53:113
+ fromzerowindowadv 60:53:114
+ tozerowindowadv 60:53:115
+ wantzerowindowadv 60:53:116
+ synretrans 60:53:117
+ origdatasent 60:53:118
}
network.udp {
--
1.9.0
|