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

📄 tcpdebug.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/*
 * FILENAME: tcpdebug.c
 *
 * Copyright 2000 By InterNiche Technologies Inc. All rights reserved
 *
 *
 * MODULE: MTCP
 *
 * ROUTINES: tcp_stat(), tcp_bsdconnstat(), tcp_bsdsendstat(), tcp_bsdrcvstat()
 *
 * PORTABLE: yes
 */


#include "ipport.h"
#include "mtcp.h"


#ifdef NET_STATS

/* FUNCTION: tcp_stat()
 *
 * The next few routines pretty-print stats. #define-ing ns_printf 
 * away will minmize space at the expense of utility. They support
 * many ancient (but sometimes still usefull) BSD counters.
 *
 * 
 * PARAM1: void * pio
 *
 * RETURNS: 0
 */

int
tcp_stat(void * pio)
{
   /* MIB-2 tcp group counters */ 
   ns_printf(pio,"tcpRtoAlgorithm %lu,\ttcpRtoMin %lu\n",
    tcpmib.tcpRtoAlgorithm, tcpmib.tcpRtoMin);
   ns_printf(pio,"tcpRtoMax %lu,\ttcpMaxConn %lu\n",
    tcpmib.tcpRtoMax, tcpmib.tcpMaxConn);
   ns_printf(pio,"tcpActiveOpens %lu,\ttcpPassiveOpens %lu\n",
    tcpmib.tcpActiveOpens, tcpmib.tcpPassiveOpens);
   ns_printf(pio,"tcpAttemptFails %lu,\ttcpEstabResets %lu\n",
    tcpmib.tcpAttemptFails, tcpmib.tcpEstabResets);
   ns_printf(pio,"tcpCurrEstab %lu,\ttcpInSegs %lu\n",
    tcpmib.tcpCurrEstab, tcpmib.tcpInSegs);
   ns_printf(pio,"tcpOutSegs %lu,\ttcpRetransSegs %lu\n",
    tcpmib.tcpOutSegs, tcpmib.tcpRetransSegs);
   ns_printf(pio,"tcpInErrs %lu,\ttcpOutRsts %lu\n",
    tcpmib.tcpInErrs, tcpmib.tcpOutRsts);

   return 0;
}


/* FUNCTION: sock_list()
 * 
 * PARAM1: void * pio
 *
 * RETURNS: 
 */

char *   tcpstates[] = 
{
   "CLOSED",
   "LISTEN",
   "SYN_SENT",
   "SYN_RCVD",
   "ESTABLISHED",
   "CLOSE_WAIT",
   "FIN_WAIT_1",
   "CLOSING",
   "LAST_ACK",
   "FIN_WAIT_2",
   "TIME_WAIT",
};

int
sock_list(void * pio)
{
   M_SOCK so;
   struct tcpcb * tp;

   if (msoq.q_len == 0)
   {
      ns_printf(pio,"No TCP sockets\n");
      return 0;
   }

   ns_printf(pio,
    "TCP sock, fhost,     ports,    opts, rxbytes, txbytes, snd_una, snd_nxt, state:\n");
   for (so = (M_SOCK)msoq.q_head; so; so = so->next)
   {
      ns_printf(pio,"%lx,  %u.%u.%u.%u, %u->%u, ", /*(long)*/so, 
         PUSH_IPADDR(so->fhost), htons(so->lport), htons(so->fport));

      ns_printf(pio,"0x%x, %u, %u", (unsigned)so->so_options,
         (unsigned)so->rcvdq.sb_cc, (unsigned)so->sendq.sb_cc);

      tp = so->tp;
      if(tp)
         ns_printf(pio, ", %ld, %ld, %s\n", tp->snd_una, tp->snd_nxt, tcpstates[tp->t_state]);
      else
         ns_printf(pio, " (no TCPCB)\n");
   }
   return 0;
}


/* FUNCTION: tcp_bsdconnstat()
 *
 * BSD connection statistics
 *
 * 
 * PARAM1: void * pio
 *
 * RETURNS: 0
 */

int
tcp_bsdconnstat(void * pio)
{
   ns_printf(pio,"connections initiated: %lu,\tconnections accepted: %lu\n",
    tcpstat.tcps_connattempt, tcpstat.tcps_accepts);
   ns_printf(pio,"connections established: %lu,\tconnections dropped: %lu\n",
    tcpstat.tcps_connects, tcpstat.tcps_drops);
   ns_printf(pio,"embryonic connections dropped: %lu,\tconn. closed (includes drops): %lu\n",
    tcpstat.tcps_conndrops, tcpstat.tcps_closed);
   ns_printf(pio,"segs where we tried to get rtt: %lu,\ttimes we succeeded: %lu\n",
    tcpstat.tcps_segstimed, tcpstat.tcps_rttupdated);
   ns_printf(pio,"delayed acks sent: %lu,\tconn. dropped in rxmt timeout: %lu\n",
    tcpstat.tcps_delack, tcpstat.tcps_timeoutdrop);
   ns_printf(pio,"retransmit timeouts: %lu,\tpersist timeouts: %lu\n",
    tcpstat.tcps_rexmttimeo, tcpstat.tcps_persisttimeo);
   ns_printf(pio,"keepalive timeouts: %lu,\tkeepalive probes sent: %lu\n",
    tcpstat.tcps_keeptimeo, tcpstat.tcps_keepprobe);
   ns_printf(pio,"connections dropped in keepalive: %lu\n", tcpstat.tcps_keepdrops);

   return 0;
}




/* FUNCTION: tcp_bsdsendstat()
 * 
 * BSD TCP send stats
 *
 * PARAM1: void * pio
 *
 * RETURNS: 0
 */

int
tcp_bsdsendstat(void * pio)
{

   ns_printf(pio,"total packets sent: %lu,\tdata packets sent: %lu\n",
    tcpstat.tcps_sndtotal, tcpstat.tcps_sndpack);
   ns_printf(pio,"data bytes sent: %lu,\tdata packets retransmitted: %lu\n",
    tcpstat.tcps_sndbyte, tcpstat.tcps_sndrexmitpack);
   ns_printf(pio,"data bytes retransmitted: %lu,\tack-only packets sent: %lu\n",
    tcpstat.tcps_sndrexmitbyte, tcpstat.tcps_sndacks);
   ns_printf(pio,"window probes sent: %lu,\tpackets sent with URG only: %lu\n",
    tcpstat.tcps_sndprobe, tcpstat.tcps_sndurg);
   ns_printf(pio,"window update-only packets sent: %lu,\tcontrol (SYN|FIN|RST) packets sent: %lu\n",
    tcpstat.tcps_sndwinup, tcpstat.tcps_sndctrl);

   return 0;
}



/* FUNCTION: tcp_bsdrcvstat()
 *
 *  BSD TCP receive stats
 *
 * 
 * PARAM1: void * pio
 *
 * RETURNS: 0
 */

int
tcp_bsdrcvstat(void * pio)
{
   ns_printf(pio,"total packets received: %lu,\tpackets received in sequence: %lu\n",
    tcpstat.tcps_rcvtotal, tcpstat.tcps_rcvpack);
   ns_printf(pio,"bytes received in sequence: %lu,\tpackets received with ccksum errs: %lu\n",
    tcpstat.tcps_rcvbyte, tcpstat.tcps_rcvbadsum);
   ns_printf(pio,"packets received with bad offset: %lu,\tpackets received too short: %lu\n",
    tcpstat.tcps_rcvbadoff, tcpstat.tcps_rcvshort);
   ns_printf(pio,"duplicate-only packets received: %lu,\tduplicate-only bytes received: %lu\n",
    tcpstat.tcps_rcvduppack, tcpstat.tcps_rcvdupbyte);
   ns_printf(pio,"packets with some duplicate data: %lu,\tdup. bytes in part-dup. packets: %lu\n",
    tcpstat.tcps_rcvpartduppack, tcpstat.tcps_rcvpartdupbyte);
   ns_printf(pio,"out-of-order packets received: %lu,\tout-of-order bytes received: %lu\n",
    tcpstat.tcps_rcvoopack, tcpstat.tcps_rcvoobyte);
   ns_printf(pio,"packets with data after window: %lu,\tbytes rcvd after window: %lu\n",
    tcpstat.tcps_rcvpackafterwin, tcpstat.tcps_rcvbyteafterwin);
   ns_printf(pio,"packets rcvd after close: %lu,\trcvd window probe packets: %lu\n",
    tcpstat.tcps_rcvafterclose, tcpstat.tcps_rcvwinprobe);
   ns_printf(pio,"rcvd duplicate acks: %lu,\trcvd acks for unsent data: %lu\n",
    tcpstat.tcps_rcvdupack, tcpstat.tcps_rcvacktoomuch);
   ns_printf(pio,"rcvd ack packets: %lu,\tbytes acked by rcvd acks: %lu\n",
    tcpstat.tcps_rcvackpack, tcpstat.tcps_rcvackbyte);
   ns_printf(pio,"rcvd window update packets: %lu\n", tcpstat.tcps_rcvwinupd);
   ns_printf(pio,"rcvd predictive header hits; acks:%lu, data:%lu\n",
    tcpstat.tcps_predack, tcpstat.tcps_preddat);
   return 0;
}

#endif   /* NET_STATS */

⌨️ 快捷键说明

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