📄 iso.c
字号:
else islocal = 22 + Alen; if(Aflag) islocal += 10 ; if(!nflag) { if( (cp -line)>10 ) { cp = line+10; bzero(cp, sizeof(line)-10); } } *cp++ = '.'; if(sufxlen) { if( !Aflag && !nflag && (ihe=iso_getserventrybytsel(sufx, sufxlen))) { Ihe = *ihe; ihe = &Ihe; } if( ihe && (strlen(ihe->isoh_aname)>0) ) { sprintf(cp, "%s", ihe->isoh_aname); } else { iso_sprinttsel(cp, sufx, sufxlen); } } else sprintf(cp, "*"); /* fprintf(stdout, Aflag?" %-18.18s":" %-22.22s", line); */ if( strlen(line) > Alen ) { fprintf(stdout, " %s", line); fprintf(stdout, "\n %*.s", islocal+Alen," "); } else { fprintf(stdout, " %-*.*s", Alen, Alen,line); }}#endif#ifdef notdefstatic voidx25_protopr(off, name) u_long off; char *name;{ static char *xpcb_states[] = { "CLOSED", "LISTENING", "CLOSING", "CONNECTING", "ACKWAIT", "OPEN", }; register struct isopcb *prev, *next; struct x25_pcb xpcb; if (off == 0) { printf("%s control block: symbol not in namelist\n", name); return; } kread(off, &xpcb, sizeof (struct x25_pcb)); prev = (struct isopcb *)off; if (xpcb.x_next == (struct isopcb *)off) return; while (xpcb.x_next != (struct isopcb *)off) { next = isopcb.isop_next; kread((u_long)next, &xpcb, sizeof (struct x25_pcb)); if (xpcb.x_prev != prev) { printf("???\n"); break; } kread((u_long)xpcb.x_socket, &sockb, sizeof (sockb)); if (!aflag && xpcb.x_state == LISTENING || xpcb.x_state == TP_CLOSED ) { prev = next; continue; } if (first) { printf("Active X25 net connections"); if (aflag) printf(" (including servers)"); putchar('\n'); if (Aflag) printf("%-8.8s ", "PCB"); printf(Aflag ? "%-5.5s %-6.6s %-6.6s %-18.18s %-18.18s %s\n" : "%-5.5s %-6.6s %-6.6s %-22.22s %-22.22s %s\n", "Proto", "Recv-Q", "Send-Q", "Local Address", "Foreign Address", "(state)"); first = 0; } printf("%-5.5s %6d %6d ", name, sockb.so_rcv.sb_cc, sockb.so_snd.sb_cc); isonetprint(&xpcb.x_laddr.siso_addr, &xpcb.x_lport, sizeof(xpcb.x_lport), 1); isonetprint(&xpcb.x_faddr.siso_addr, &xpcb.x_fport, sizeof(xpcb.x_lport), 0); if (xpcb.x_state < 0 || xpcb.x_state >= x25_NSTATES) printf(" 0x0x0x0x0x0x0x0x0x%x", xpcb.x_state); else printf(" %-12.12s", xpcb_states[xpcb.x_state]); putchar('\n'); prev = next; }}#endifstruct tp_stat tp_stat;voidtp_stats(off, name) caddr_t off, name;{ if (off == 0) { printf("TP not configured\n\n"); return; } printf("%s:\n", name); kget(off, tp_stat); tprintstat(&tp_stat, 8);}#define OUT stdoutstatic voidtprintstat(s, indent) register struct tp_stat *s; int indent;{ fprintf(OUT, "%*sReceiving:\n",indent," "); fprintf(OUT, "\t%*s%d variable parameter%s ignored\n", indent," ", s->ts_param_ignored ,plural(s->ts_param_ignored)); fprintf(OUT, "\t%*s%d invalid parameter code%s\n", indent, " ", s->ts_inv_pcode ,plural(s->ts_inv_pcode)); fprintf(OUT, "\t%*s%d invalid parameter value%s\n", indent, " ", s->ts_inv_pval ,plural(s->ts_inv_pval)); fprintf(OUT, "\t%*s%d invalid dutype%s\n", indent, " ", s->ts_inv_dutype ,plural(s->ts_inv_dutype)); fprintf(OUT, "\t%*s%d negotiation failure%s\n", indent, " ", s->ts_negotfailed ,plural(s->ts_negotfailed)); fprintf(OUT, "\t%*s%d invalid destination reference%s\n", indent, " ", s->ts_inv_dref ,plural(s->ts_inv_dref)); fprintf(OUT, "\t%*s%d invalid suffix parameter%s\n", indent, " ", s->ts_inv_sufx ,plural(s->ts_inv_sufx)); fprintf(OUT, "\t%*s%d invalid length\n",indent, " ", s->ts_inv_length); fprintf(OUT, "\t%*s%d invalid checksum%s\n", indent, " ", s->ts_bad_csum ,plural(s->ts_bad_csum)); fprintf(OUT, "\t%*s%d DT%s out of order\n", indent, " ", s->ts_dt_ooo ,plural(s->ts_dt_ooo)); fprintf(OUT, "\t%*s%d DT%s not in window\n", indent, " ", s->ts_dt_niw ,plural(s->ts_dt_niw)); fprintf(OUT, "\t%*s%d duplicate DT%s\n", indent, " ", s->ts_dt_dup ,plural(s->ts_dt_dup)); fprintf(OUT, "\t%*s%d XPD%s not in window\n", indent, " ", s->ts_xpd_niw ,plural(s->ts_xpd_niw)); fprintf(OUT, "\t%*s%d XPD%s w/o credit to stash\n", indent, " ", s->ts_xpd_dup ,plural(s->ts_xpd_dup)); fprintf(OUT, "\t%*s%d time%s local credit reneged\n", indent, " ", s->ts_lcdt_reduced ,plural(s->ts_lcdt_reduced)); fprintf(OUT, "\t%*s%d concatenated TPDU%s\n", indent, " ", s->ts_concat_rcvd ,plural(s->ts_concat_rcvd)); fprintf(OUT, "%*sSending:\n", indent, " "); fprintf(OUT, "\t%*s%d XPD mark%s discarded\n", indent, " ", s->ts_xpdmark_del ,plural(s->ts_xpdmark_del)); fprintf(OUT, "\t%*sXPD stopped data flow %d time%s\n", indent, " ", s->ts_xpd_intheway ,plural(s->ts_xpd_intheway)); fprintf(OUT, "\t%*s%d time%s foreign window closed\n", indent, " ", s->ts_zfcdt ,plural(s->ts_zfcdt)); fprintf(OUT, "%*sMiscellaneous:\n", indent, " "); fprintf(OUT, "\t%*s%d small mbuf%s\n", indent, " ", s->ts_mb_small ,plural(s->ts_mb_small)); fprintf(OUT, "\t%*s%d cluster%s\n", indent, " ", s->ts_mb_cluster, plural(s->ts_mb_cluster)); fprintf(OUT, "\t%*s%d source quench \n",indent, " ", s->ts_quench); fprintf(OUT, "\t%*s%d dec bit%s\n", indent, " ", s->ts_rcvdecbit, plural(s->ts_rcvdecbit)); fprintf(OUT, "\t%*sM:L ( M mbuf chains of length L)\n", indent, " "); { register int j; fprintf(OUT, "\t%*s%d: over 16\n", indent, " ", s->ts_mb_len_distr[0]); for( j=1; j<=8; j++) { fprintf(OUT, "\t%*s%d: %d\t\t%d: %d\n", indent, " ", s->ts_mb_len_distr[j],j, s->ts_mb_len_distr[j<<1],j<<1 ); } } fprintf(OUT, "\t%*s%d EOT rcvd\n", indent, " ", s->ts_eot_input); fprintf(OUT, "\t%*s%d EOT sent\n", indent, " ", s->ts_EOT_sent); fprintf(OUT, "\t%*s%d EOT indication%s\n", indent, " ", s->ts_eot_user ,plural(s->ts_eot_user)); fprintf(OUT, "%*sConnections:\n", indent, " "); fprintf(OUT, "\t%*s%d connection%s used extended format\n", indent, " ", s->ts_xtd_fmt ,plural(s->ts_xtd_fmt)); fprintf(OUT, "\t%*s%d connection%s allowed transport expedited data\n", indent, " ", s->ts_use_txpd ,plural(s->ts_use_txpd)); fprintf(OUT, "\t%*s%d connection%s turned off checksumming\n", indent, " ", s->ts_csum_off ,plural(s->ts_csum_off)); fprintf(OUT, "\t%*s%d connection%s dropped due to retrans limit\n", indent, " ", s->ts_conn_gaveup ,plural(s->ts_conn_gaveup)); fprintf(OUT, "\t%*s%d tp 4 connection%s\n", indent, " ", s->ts_tp4_conn ,plural(s->ts_tp4_conn)); fprintf(OUT, "\t%*s%d tp 0 connection%s\n", indent, " ", s->ts_tp0_conn ,plural(s->ts_tp0_conn)); { register int j; static char *name[]= { "~LOCAL, PDN", "~LOCAL,~PDN", " LOCAL,~PDN", " LOCAL, PDN" }; fprintf(OUT, "\n%*sRound trip times, listed in ticks:\n", indent, " "); fprintf(OUT, "\t%*s%11.11s %12.12s | %12.12s | %s\n", indent, " ", "Category", "Smoothed avg", "Deviation", "Deviation/Avg"); for (j = 0; j <= 3; j++) { fprintf(OUT, "\t%*s%11.11s: %-11d | %-11d | %-11d | %-11d\n", indent, " ", name[j], s->ts_rtt[j], s->ts_rtt[j], s->ts_rtv[j], s->ts_rtv[j]); } } fprintf(OUT,"\n%*sTpdus RECVD [%d valid, %3.6f %% of total (%d); %d dropped]\n",indent," ", s->ts_tpdu_rcvd , ((s->ts_pkt_rcvd > 0) ? ((100 * (float)s->ts_tpdu_rcvd)/(float)s->ts_pkt_rcvd) : 0), s->ts_pkt_rcvd, s->ts_recv_drop ); fprintf(OUT, "\t%*sDT %6d AK %6d DR %4d CR %4d \n", indent, " ", s->ts_DT_rcvd, s->ts_AK_rcvd, s->ts_DR_rcvd, s->ts_CR_rcvd); fprintf(OUT, "\t%*sXPD %6d XAK %6d DC %4d CC %4d ER %4d\n", indent, " ", s->ts_XPD_rcvd, s->ts_XAK_rcvd, s->ts_DC_rcvd, s->ts_CC_rcvd, s->ts_ER_rcvd); fprintf(OUT, "\n%*sTpdus SENT [%d total, %d dropped]\n", indent, " ", s->ts_tpdu_sent, s->ts_send_drop); fprintf(OUT, "\t%*sDT %6d AK %6d DR %4d CR %4d \n", indent, " ", s->ts_DT_sent, s->ts_AK_sent, s->ts_DR_sent, s->ts_CR_sent); fprintf(OUT, "\t%*sXPD %6d XAK %6d DC %4d CC %4d ER %4d\n", indent, " ", s->ts_XPD_sent, s->ts_XAK_sent, s->ts_DC_sent, s->ts_CC_sent, s->ts_ER_sent); fprintf(OUT, "\n%*sRetransmissions:\n", indent, " ");#define PERCENT(X,Y) (((Y)>0)?((100 *(float)(X)) / (float) (Y)):0) fprintf(OUT, "\t%*sCR %6d CC %6d DR %6d \n", indent, " ", s->ts_retrans_cr, s->ts_retrans_cc, s->ts_retrans_dr); fprintf(OUT, "\t%*sDT %6d (%5.2f%%)\n", indent, " ", s->ts_retrans_dt, PERCENT(s->ts_retrans_dt, s->ts_DT_sent)); fprintf(OUT, "\t%*sXPD %6d (%5.2f%%)\n", indent, " ", s->ts_retrans_xpd, PERCENT(s->ts_retrans_xpd, s->ts_XPD_sent)); fprintf(OUT, "\n%*sE Timers: [%6d ticks]\n", indent, " ", s->ts_Eticks); fprintf(OUT, "%*s%6d timer%s set \t%6d timer%s expired \t%6d timer%s cancelled\n",indent, " ", s->ts_Eset ,plural(s->ts_Eset), s->ts_Eexpired ,plural(s->ts_Eexpired), s->ts_Ecan_act ,plural(s->ts_Ecan_act)); fprintf(OUT, "\n%*sC Timers: [%6d ticks]\n", indent, " ",s->ts_Cticks); fprintf(OUT, "%*s%6d timer%s set \t%6d timer%s expired \t%6d timer%s cancelled\n", indent, " ", s->ts_Cset ,plural(s->ts_Cset), s->ts_Cexpired ,plural(s->ts_Cexpired), s->ts_Ccan_act ,plural(s->ts_Ccan_act)); fprintf(OUT, "%*s%6d inactive timer%s cancelled\n", indent, " ", s->ts_Ccan_inact ,plural(s->ts_Ccan_inact)); fprintf(OUT, "\n%*sPathological debugging activity:\n", indent, " "); fprintf(OUT, "\t%*s%6d CC%s sent to zero dref\n", indent, " ", s->ts_zdebug ,plural(s->ts_zdebug)); /* SAME LINE AS ABOVE */ fprintf(OUT, "\t%*s%6d random DT%s dropped\n", indent, " ", s->ts_ydebug ,plural(s->ts_ydebug)); fprintf(OUT, "\t%*s%6d illegally large XPD TPDU%s\n", indent, " ", s->ts_vdebug ,plural(s->ts_vdebug)); fprintf(OUT, "\t%*s%6d faked reneging of cdt\n", indent, " ", s->ts_ldebug ); fprintf(OUT, "\n%*sACK reasons:\n", indent, " "); fprintf(OUT, "\t%*s%6d not acked immediately\n", indent, " ", s->ts_ackreason[_ACK_DONT_] ); fprintf(OUT, "\t%*s%6d strategy==each\n", indent, " ", s->ts_ackreason[_ACK_STRAT_EACH_] ); fprintf(OUT, "\t%*s%6d strategy==fullwindow\n", indent, " ", s->ts_ackreason[_ACK_STRAT_FULLWIN_] ); fprintf(OUT, "\t%*s%6d duplicate DT\n", indent, " ", s->ts_ackreason[_ACK_DUP_] ); fprintf(OUT, "\t%*s%6d EOTSDU\n", indent, " ", s->ts_ackreason[_ACK_EOT_] ); fprintf(OUT, "\t%*s%6d reordered DT\n", indent, " ", s->ts_ackreason[_ACK_REORDER_] ); fprintf(OUT, "\t%*s%6d user rcvd\n", indent, " ", s->ts_ackreason[_ACK_USRRCV_] ); fprintf(OUT, "\t%*s%6d fcc reqd\n", indent, " ", s->ts_ackreason[_ACK_FCC_] );}#ifndef SSEL#define SSEL(s) ((s)->siso_tlen + TSEL(s))#define PSEL(s) ((s)->siso_slen + SSEL(s))#endifstatic voidisonetprint(siso, islocal) register struct sockaddr_iso *siso; int islocal;{ hexprint(siso->siso_nlen, siso->siso_addr.isoa_genaddr, "{}"); if (siso->siso_tlen || siso->siso_slen || siso->siso_plen) hexprint(siso->siso_tlen, TSEL(siso), "()"); if (siso->siso_slen || siso->siso_plen) hexprint(siso->siso_slen, SSEL(siso), "[]"); if (siso->siso_plen) hexprint(siso->siso_plen, PSEL(siso), "<>"); putchar(' ');}static char hexlist[] = "0123456789abcdef", obuf[128];static voidhexprint(n, buf, delim) int n; char *buf, *delim;{ register u_char *in = (u_char *)buf, *top = in + n; register char *out = obuf; register int i; if (n == 0) return; while (in < top) { i = *in++; *out++ = '.'; if (i > 0xf) { out[1] = hexlist[i & 0xf]; i >>= 4; out[0] = hexlist[i]; out += 2; } else *out++ = hexlist[i]; } *obuf = *delim; *out++ = delim[1]; *out = 0; printf("%s", obuf);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -