pcp
[Top] [All Lists]

[RFC] Add /proc/net/netstat support

To: pcp@xxxxxxxxxxx
Subject: [RFC] Add /proc/net/netstat support
From: Michele Baldessari <michele@xxxxxxxxxx>
Date: Thu, 15 May 2014 00:51:37 +0100
Cc: Michele Baldessari <michele@xxxxxxxxxx>
Delivered-to: pcp@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= references:in-reply-to:x-mailer:message-id:date:date:subject :subject:from:from:received:received; s=2010; t=1400111506; bh=H M+CkdUlb/zFLZjgAZoKga5NbGX89fezvPhMRF2ElFQ=; b=SRMWNBfvNWYeUFLII if7uViM4ZNXkvkmo/pteVvYpHufpmZyWbH/EZDFG4Lha0t7FKgP0Jc1piqCri9n1 J+eq+JHTev+H1znERcPNDcuM9vUutLwnOa+lE82m1qlqoHdAuM2ZoaBaOaD+/dqb 1bO+swgqIxAWKf/wqKNGqcvk90=
In-reply-to: <1400111497-2534-1-git-send-email-michele@xxxxxxxxxx>
References: <1400111497-2534-1-git-send-email-michele@xxxxxxxxxx>
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

<Prev in Thread] Current Thread [Next in Thread>