⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcstat.h

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 H
字号:
#ifndef __STATISTICS_H
#define __STATISTICS_H

/*
 * tcc <= 2.01 lacks proper bit-field support.
 * Don't define USE_BSD_FUNC/USE_STATISTICS with this compiler.
 */
#if !defined(OLD_TURBOC)  
  #include <sys/socket.h>
  #include <net/if.h>
  #include <net/if_dl.h>
  #include <net/if_ether.h>
  #include <net/route.h>
  #include <netinet/in.h>
  #include <netinet/in_systm.h>
  #include <netinet/in_var.h>
  #include <netinet/ip.h>
  #include <netinet/ip_var.h>
  #include <netinet/in_pcb.h>
  #include <netinet/tcp.h>
  #include <netinet/tcp_time.h>
  #include <netinet/tcpip.h>
  #include <netinet/udp.h>
  #include <netinet/udp_var.h>
  #include <netinet/tcp_var.h>
  #include <netinet/icmp_var.h>
  #include <netinet/igmp_var.h>
#endif

#if defined(__BORLANDC__)     /* suppress warning */
  struct proc   { int dummy; };
  struct socket { int dummy; };
#endif

/*
 * MAC-layer statistics
 */
struct macstat {
       DWORD  non_ip_recv;            /* # of non-IP packets received */
       DWORD  non_ip_sent;            /*                     sent */
       DWORD  num_tx_err;             /* # of transmission errors */
       DWORD  num_err_type;           /* # of illegal types (not IP/ARP) */
       DWORD  num_llc_frames;         /* # of LLC frames received */

       struct {
         DWORD request_recv;          /* # of ARP requests received */
         DWORD request_sent;          /*                   sent */
         DWORD reply_recv;            /* # of ARP replies received */
         DWORD reply_sent;            /*                  sent */
       } arp;
       struct {
         DWORD request_recv;          /* # of RARP requests received */
         DWORD request_sent;          /*                    sent */
         DWORD reply_recv;            /* # of RARP replies received */
         DWORD reply_sent;            /*                   sent */
       } rarp;
     };

struct pppoestat {
       DWORD  num_disc_recv;
       DWORD  num_sess_recv;
       DWORD  num_disc_sent;
       DWORD  num_sess_sent;
     };

/*
 * IP statistics for all in/out messages, <netinet/ip_var.h>
 *
 * ips_total;           - total packets received
 * ips_badsum;          - checksum bad
 * ips_tooshort;        - packet too short
 * ips_toosmall;        - not enough data
 * ips_badhlen;         - ip header length < data size
 * ips_badlen;          - ip length < ip header length
 * ips_fragments;       - fragments received
 * ips_fragdropped;     - frags dropped (dups, out of space)
 * ips_fragtimeout;     - fragments timed out
 * ips_forward;         - packets forwarded
 * ips_cantforward;     - packets rcvd for unreachable dest
 * ips_redirectsent;    - packets forwarded on same net
 * ips_noproto;         - unknown or unsupported protocol
 * ips_delivered;       - datagrams delivered to upper level
 * ips_localout;        - total ip packets generated here
 * ips_odropped;        - lost out packets due to nobufs, etc.
 * ips_idropped;        - lost in packets due to nobufs, etc.  !! added
 * ips_reassembled;     - total packets reassembled ok
 * ips_fragmented;      - datagrams successfully fragmented
 * ips_ofragments;      - output fragments created
 * ips_cantfrag;        - don't fragment flag was set, etc.
 * ips_badoptions;      - error in option processing
 * ips_noroute;         - packets discarded due to no route
 * ips_badvers;         - ip version != 4
 * ips_rawout;          - total raw ip packets generated
 * ips_toolong;         - ip length > max ip packet size
 *
 *
 * UDP statistics, <netinet/udp_var.h>
 *
 * udps_ipackets        - total input packets
 * udps_hdrops          - packet shorter than header
 * udps_badsum          - checksum error
 * udps_badlen          - data length larger than packet
 * udps_noport          - no socket on port
 * udps_noportbcast     - as above, arrived as broadcast
 * udps_fullsock        - not delivered, input socket full
 * udpps_pcbcachemiss   - input packets missing pcb cache
 * udpps_pcbhashmiss    - input packets not for hashed pcb
 * udps_opackets        - total output packets
 *
 *
 * TCP statistics for all connections, <netinet/tcp_var.h>
 *
 * tcps_connattempt     - connections initiated
 * tcps_accepts         - connections accepted
 * tcps_connects        - connections established
 * tcps_drops           - connections dropped
 * tcps_conndrops       - embryonic connections dropped
 * tcps_closed          - conn. closed (includes drops)
 * tcps_segstimed       - segs where we tried to get rtt
 * tcps_rttupdated      - times we succeeded
 * tcps_delack          - delayed acks sent
 * tcps_timeoutdrop     - conn. dropped in rxmt timeout
 * tcps_rexmttimeo      - retransmit timeouts
 * tcps_persisttimeo    - persist timeouts
 * tcps_keeptimeo       - keepalive timeouts
 * tcps_keepprobe       - keepalive probes sent
 * tcps_keepdrops       - connections dropped in keepalive
 *
 * tcps_sndtotal        - total packets sent
 * tcps_sndpack         - data packets sent
 * tcps_sndbyte         - data bytes sent
 * tcps_sndrexmitpack   - data packets retransmitted
 * tcps_sndrexmitbyte   - data bytes retransmitted
 * tcps_sndacks         - ack  -only packets sent
 * tcps_sndprobe        - window probes sent
 * tcps_sndurg          - packets sent with URG only
 * tcps_sndwinup        - window update  -only packets sent
 * tcps_sndctrl         - control (SYN|FIN|RST) packets sent
 *
 * tcps_rcvtotal        - total packets received
 * tcps_rcvpack         - packets received in sequence
 * tcps_rcvbyte         - bytes received in sequence
 * tcps_rcvbadsum       - packets received with ccksum errs
 * tcps_rcvbadoff       - packets received with bad offset
 * tcps_rcvshort        - packets received too short
 * tcps_rcvduppack      - duplicate-only packets received
 * tcps_rcvdupbyte      - duplicate-only bytes received
 * tcps_rcvpartduppack  - packets with some duplicate data
 * tcps_rcvpartdupbyte  - dup. bytes in part-dup. packets
 * tcps_rcvoopack       - out-of-order packets received
 * tcps_rcvoobyte       - out-of-order bytes received
 * tcps_rcvpackafterwin - packets with data after window
 * tcps_rcvbyteafterwin - bytes rcvd after window
 * tcps_rcvafterclose   - packets rcvd after "close"
 * tcps_rcvwinprobe     - rcvd window probe packets
 * tcps_rcvdupack       - rcvd duplicate acks
 * tcps_rcvacktoomuch   - rcvd acks for unsent data
 * tcps_rcvackpack      - rcvd ack packets
 * tcps_rcvackbyte      - bytes acked by rcvd acks
 * tcps_rcvwinupd       - rcvd window update packets
 * tcps_pawsdrop        - segments dropped due to PAWS (protected against wrapped segments)
 * tcps_predack         - times hdr predict ok for acks
 * tcps_preddat         - times hdr predict ok for data pkts
 * tcps_pcbcachemiss    - times missed cache for input segment
 * tcps_cachedrtt       - times cached RTT in route updated
 * tcps_cachedrttvar    - times cached rttvar updated
 * tcps_cachedssthresh  - times cached ssthresh updated
 * tcps_usedrtt         - times RTT initialized from route
 * tcps_usedrttvar      - times RTTVAR initialized from rt
 * tcps_usedssthresh    - times ssthresh initialized from rt
 * tcps_persistdrop     - timeout in persist state
 * tcps_badsyn          - bogus SYN, e.g. premature ACK
 * tcps_mturesent       - resends due to MTU discovery
 * tcps_listendrop      - listen queue overflows
 * #ifdef TCP_FACK
 * tcps_fack_recovery;    - recovery episodes
 * tcps_fack_sndpack;     - data packets sent
 * tcps_fack_sndbyte;     - data bytes sent
 * tcps_fack_sndrexmitpack- data packets retransmitted
 * tcps_fack_sndrexmitbyte- data bytes retransmitted
 * #endif
 *
 *
 * ICMP statistics, in <netinet/icmp_var.h>
 *
 * icps_error           - # of calls to icmp_error
 * icps_oldshort        - no error 'cuz old ip too short
 * icps_oldicmp         - no error 'cuz old was icmp
 * icps_outhist[18+1]   - output counters for ICMP_xx
 * icps_badcode         - icmp_code out of range
 * icps_tooshort        - packet < ICMP_MINLEN
 * icps_checksum        - bad checksum
 * icps_badlen          - calculated bound mismatch
 * icps_reflect         - number of responses
 * icps_inhist[18+1]    - input counters for ICMP_xx
 *
 *
 * IGMP statistics, <netinet/igmp_var.h>
 *
 * igps_rcv_total       - total IGMP messages received
 * igps_rcv_tooshort    - received with too few bytes
 * igps_rcv_badsum      - received with bad checksum
 * igps_rcv_queries     - received membership queries
 * igps_rcv_badqueries  - received invalid queries
 * igps_rcv_reports     - received membership reports
 * igps_rcv_badreports  - received invalid reports
 * igps_rcv_ourreports  - received reports for our groups
 * igps_snd_reports     - sent membership reports
 */

extern int sock_stats (tcp_Socket *s, WORD *days, WORD *inactive,
                       WORD *cwindow, WORD *avg,  WORD *sd);

extern void print_mac_stats (void);
extern void print_arp_stats (void);
extern void print_ip_stats  (void);
extern void print_icmp_stats(void);
extern void print_igmp_stats(void);
extern void print_udp_stats (void);
extern void print_tcp_stats (void);
extern void print_all_stats (void);
extern void reset_stats     (void);


#if defined(USE_STATISTICS)
  #define macstats     NAMESPACE(macstats)
  #define ipstats      NAMESPACE(ipstats)
  #define udpstats     NAMESPACE(udpstats)
  #define tcpstats     NAMESPACE(tcpstats)
  #define icmpstats    NAMESPACE(icmpstats)
  #define igmpstats    NAMESPACE(igmpstats)
  #define pppoestats   NAMESPACE(pppoestats)

  #define STAT(x) x

  extern struct macstat   macstats;
  extern struct ipstat    ipstats;
  extern struct udpstat   udpstats;
  extern struct tcpstat   tcpstats;
  extern struct icmpstat  icmpstats;
  extern struct igmpstat  igmpstats;
  extern struct pppoestat pppoestats;

  extern void update_in_stat  (const void *pkt, WORD proto);
  extern void update_out_stat (const void *pkt, WORD proto);

#else
  #define update_in_stat(ip,pr)  ((void)0)
  #define update_out_stat(ip,pr) ((void)0)
  #define STAT(x)                ((void)0)
#endif

#endif /* !__STATISTICS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -