/* * Output /proc/net/netstat */ static int netstat_seq_show(struct seq_file *seq, void *v) { int i; seq_puts(seq, "TcpExt:"); for (i = 0; snmp4_net_list[i].name != NULL; i++) seq_printf(seq, " %s", snmp4_net_list[i].name); seq_puts(seq, "\nTcpExt:"); for (i = 0; snmp4_net_list[i].name != NULL; i++) seq_printf(seq, " %lu", fold_field((void **) net_statistics, snmp4_net_list[i].entry)); seq_puts(seq, "\nIpExt:"); for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++) seq_printf(seq, " %s", snmp4_ipextstats_list[i].name); seq_puts(seq, "\nIpExt:"); for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++) seq_printf(seq, " %lu", fold_field((void **)ip_statistics, snmp4_ipextstats_list[i].entry)); seq_putc(seq, '\n'); return 0; }
/* * Called from the PROCfs module. This outputs /proc/net/snmp. */ static int snmp_seq_show(struct seq_file *seq, void *v) { int i; seq_puts(seq, "Ip: Forwarding DefaultTTL"); for (i = 0; snmp4_ipstats_list[i].name != NULL; i++) seq_printf(seq, " %s", snmp4_ipstats_list[i].name); seq_printf(seq, "\nIp: %d %d", ipv4_devconf.forwarding ? 1 : 2, sysctl_ip_default_ttl); for (i = 0; snmp4_ipstats_list[i].name != NULL; i++) seq_printf(seq, " %lu", fold_field((void **) ip_statistics, snmp4_ipstats_list[i].entry)); seq_puts(seq, "\nIcmp:"); for (i = 0; snmp4_icmp_list[i].name != NULL; i++) seq_printf(seq, " %s", snmp4_icmp_list[i].name); seq_puts(seq, "\nIcmp:"); for (i = 0; snmp4_icmp_list[i].name != NULL; i++) seq_printf(seq, " %lu", fold_field((void **) icmp_statistics, snmp4_icmp_list[i].entry)); seq_puts(seq, "\nTcp:"); for (i = 0; snmp4_tcp_list[i].name != NULL; i++) seq_printf(seq, " %s", snmp4_tcp_list[i].name); seq_puts(seq, "\nTcp:"); for (i = 0; snmp4_tcp_list[i].name != NULL; i++) { /* MaxConn field is signed, RFC 2012 */ if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN) seq_printf(seq, " %ld", fold_field((void **) tcp_statistics, snmp4_tcp_list[i].entry)); else seq_printf(seq, " %lu", fold_field((void **) tcp_statistics, snmp4_tcp_list[i].entry)); } seq_puts(seq, "\nUdp:"); for (i = 0; snmp4_udp_list[i].name != NULL; i++) seq_printf(seq, " %s", snmp4_udp_list[i].name); seq_puts(seq, "\nUdp:"); for (i = 0; snmp4_udp_list[i].name != NULL; i++) seq_printf(seq, " %lu", fold_field((void **) udp_statistics, snmp4_udp_list[i].entry)); seq_putc(seq, '\n'); return 0; }
int snmp_get_info(char *buffer, char **start, off_t offset, int length) { extern int sysctl_ip_default_ttl; int len, i; len = sprintf (buffer, "Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates\n" "Ip: %d %d", ipv4_devconf.forwarding ? 1 : 2, sysctl_ip_default_ttl); for (i=0; i<offsetof(struct ip_mib, __pad)/sizeof(unsigned long); i++) len += sprintf(buffer+len, " %lu", fold_field((unsigned long*)ip_statistics, sizeof(struct ip_mib), i)); len += sprintf (buffer + len, "\nIcmp: InMsgs InErrors InDestUnreachs InTimeExcds InParmProbs InSrcQuenchs InRedirects InEchos InEchoReps InTimestamps InTimestampReps InAddrMasks InAddrMaskReps OutMsgs OutErrors OutDestUnreachs OutTimeExcds OutParmProbs OutSrcQuenchs OutRedirects OutEchos OutEchoReps OutTimestamps OutTimestampReps OutAddrMasks OutAddrMaskReps\n" "Icmp:"); for (i=0; i<offsetof(struct icmp_mib, __pad)/sizeof(unsigned long); i++) len += sprintf(buffer+len, " %lu", fold_field((unsigned long*)icmp_statistics, sizeof(struct icmp_mib), i)); len += sprintf (buffer + len, "\nTcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts\n" "Tcp:"); for (i=0; i<offsetof(struct tcp_mib, __pad)/sizeof(unsigned long); i++) len += sprintf(buffer+len, " %lu", fold_field((unsigned long*)tcp_statistics, sizeof(struct tcp_mib), i)); len += sprintf (buffer + len, "\nUdp: InDatagrams NoPorts InErrors OutDatagrams\n" "Udp:"); for (i=0; i<offsetof(struct udp_mib, __pad)/sizeof(unsigned long); i++) len += sprintf(buffer+len, " %lu", fold_field((unsigned long*)udp_statistics, sizeof(struct udp_mib), i)); len += sprintf (buffer + len, "\n"); if (offset >= len) { *start = buffer; return 0; } *start = buffer + offset; len -= offset; if (len > length) len = length; if (len < 0) len = 0; return len; }
static int xfrm_statistics_seq_show(struct seq_file *seq, void *v) { struct net *net = seq->private; int i; for (i=0; xfrm_mib_list[i].name; i++) seq_printf(seq, "%-24s\t%lu\n", xfrm_mib_list[i].name, fold_field((void **)net->mib.xfrm_statistics, xfrm_mib_list[i].entry)); return 0; }
static void icmp_put(struct seq_file *seq) { int i; seq_puts(seq, "\nIcmp: InMsgs InErrors"); for (i=0; icmpmibmap[i].name != NULL; i++) seq_printf(seq, " In%s", icmpmibmap[i].name); seq_printf(seq, " OutMsgs OutErrors"); for (i=0; icmpmibmap[i].name != NULL; i++) seq_printf(seq, " Out%s", icmpmibmap[i].name); seq_printf(seq, "\nIcmp: %lu %lu", fold_field((void **) icmp_statistics, ICMP_MIB_INMSGS), fold_field((void **) icmp_statistics, ICMP_MIB_INERRORS)); for (i=0; icmpmibmap[i].name != NULL; i++) seq_printf(seq, " %lu", fold_field((void **) icmpmsg_statistics, icmpmibmap[i].index)); seq_printf(seq, " %lu %lu", fold_field((void **) icmp_statistics, ICMP_MIB_OUTMSGS), fold_field((void **) icmp_statistics, ICMP_MIB_OUTERRORS)); for (i=0; icmpmibmap[i].name != NULL; i++) seq_printf(seq, " %lu", fold_field((void **) icmpmsg_statistics, icmpmibmap[i].index | 0x100 )); }
static void icmpmsg_put(struct seq_file *seq) { #define PERLINE 16 int j, i, count; static int out[PERLINE]; count = 0; for (i = 0; i < ICMPMSG_MIB_MAX; i++) { if (fold_field((void **) icmpmsg_statistics, i)) out[count++] = i; if (count < PERLINE) continue; seq_printf(seq, "\nIcmpMsg:"); for (j = 0; j < PERLINE; ++j) seq_printf(seq, " %sType%u", i & 0x100 ? "Out" : "In", i & 0xff); seq_printf(seq, "\nIcmpMsg: "); for (j = 0; j < PERLINE; ++j) seq_printf(seq, " %lu", fold_field((void **) icmpmsg_statistics, out[j])); seq_putc(seq, '\n'); } if (count) { seq_printf(seq, "\nIcmpMsg:"); for (j = 0; j < count; ++j) seq_printf(seq, " %sType%u", out[j] & 0x100 ? "Out" : "In", out[j] & 0xff); seq_printf(seq, "\nIcmpMsg:"); for (j = 0; j < count; ++j) seq_printf(seq, " %lu", fold_field((void **) icmpmsg_statistics, out[j])); } #undef PERLINE }
int netstat_get_info(char *buffer, char **start, off_t offset, int length) { int len, i; len = sprintf(buffer, "TcpExt: SyncookiesSent SyncookiesRecv SyncookiesFailed" " EmbryonicRsts PruneCalled RcvPruned OfoPruned" " OutOfWindowIcmps LockDroppedIcmps ArpFilter" " TW TWRecycled TWKilled" " PAWSPassive PAWSActive PAWSEstab" " DelayedACKs DelayedACKLocked DelayedACKLost" " ListenOverflows ListenDrops" " TCPPrequeued TCPDirectCopyFromBacklog" " TCPDirectCopyFromPrequeue TCPPrequeueDropped" " TCPHPHits TCPHPHitsToUser" " TCPPureAcks TCPHPAcks" " TCPRenoRecovery TCPSackRecovery" " TCPSACKReneging" " TCPFACKReorder TCPSACKReorder TCPRenoReorder TCPTSReorder" " TCPFullUndo TCPPartialUndo TCPDSACKUndo TCPLossUndo" " TCPLoss TCPLostRetransmit" " TCPRenoFailures TCPSackFailures TCPLossFailures" " TCPFastRetrans TCPForwardRetrans TCPSlowStartRetrans" " TCPTimeouts" " TCPRenoRecoveryFail TCPSackRecoveryFail" " TCPSchedulerFailed TCPRcvCollapsed" " TCPDSACKOldSent TCPDSACKOfoSent TCPDSACKRecv TCPDSACKOfoRecv" " TCPAbortOnSyn TCPAbortOnData TCPAbortOnClose" " TCPAbortOnMemory TCPAbortOnTimeout TCPAbortOnLinger" " TCPAbortFailed TCPMemoryPressures\n" "TcpExt:"); for (i=0; i<offsetof(struct linux_mib, __pad)/sizeof(unsigned long); i++) len += sprintf(buffer+len, " %lu", fold_field((unsigned long*)net_statistics, sizeof(struct linux_mib), i)); len += sprintf (buffer + len, "\n"); if (offset >= len) { *start = buffer; return 0; } *start = buffer + offset; len -= offset; if (len > length) len = length; if (len < 0) len = 0; return len; }
int afinet6_get_snmp(char *buffer, char **start, off_t offset, int length) { int len = 0; int i; for (i=0; i<sizeof(snmp6_list)/sizeof(snmp6_list[0]); i++) len += sprintf(buffer+len, "%-32s\t%ld\n", snmp6_list[i].name, fold_field(snmp6_list[i].ptr, snmp6_list[i].mibsize)); len -= offset; if (len > length) len = length; if(len < 0) len = 0; *start = buffer + offset; return len; }