void ipxprotopr(u_long off, const char *name, int af1 __unused, int proto __unused) { struct ipxpcbhead cb; struct ipxpcb *ipxp; struct ipxpcb ipxpcb; struct spxpcb spxpcb; struct socket sockb; static int first = 1; int isspx; if (off == 0) return; isspx = strcmp(name, "spx") == 0; kread(off, (char *)&cb, sizeof (struct ipxpcbhead)); ipxp = LIST_FIRST(&cb); while (ipxp != NULL) { u_long ppcb; kread((u_long)ipxp, (char *)&ipxpcb, sizeof (ipxpcb)); ipxp = LIST_NEXT(&ipxpcb, ipxp_list); if (!aflag && ipx_nullhost(ipxpcb.ipxp_faddr) ) { continue; } kread((u_long)ipxpcb.ipxp_socket, (char *)&sockb, sizeof (sockb)); ppcb = (u_long) ipxpcb.ipxp_pcb; if (ppcb) { if (isspx) { kread(ppcb, (char *)&spxpcb, sizeof (spxpcb)); } else continue; } else if (isspx) continue; if (first) { printf("Active IPX 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; } if (Aflag) printf("%8lx ", ppcb); printf("%-5.5s %6u %6u ", name, sockb.so_rcv.sb_cc, sockb.so_snd.sb_cc); printf(Aflag?" %-18.18s":" %-22.22s", ipx_prpr(&ipxpcb.ipxp_laddr)); printf(Aflag?" %-18.18s":" %-22.22s", ipx_prpr(&ipxpcb.ipxp_faddr)); if (isspx) { if (spxpcb.s_state >= TCP_NSTATES) printf(" %d", spxpcb.s_state); else printf(" %s", tcpstates[spxpcb.s_state]); } putchar('\n'); } }
void ipxprotopr(u_long off, const char *name, int af1 __unused) { struct ipxpcb cb; struct ipxpcb *prev, *next; int isspx; if (off == 0) return; isspx = strcmp(name, "spx") == 0; kread(off, (char *)&cb, sizeof (struct ipxpcb)); ipxpcb = cb; prev = (struct ipxpcb *)off; if (ipxpcb.ipxp_next == (struct ipxpcb *)off) return; for (;ipxpcb.ipxp_next != (struct ipxpcb *)off; prev = next) { u_long ppcb; next = ipxpcb.ipxp_next; kread((u_long)next, (char *)&ipxpcb, sizeof (ipxpcb)); if (ipxpcb.ipxp_prev != prev) { printf("???\n"); break; } if (!aflag && ipx_nullhost(ipxpcb.ipxp_faddr) ) { continue; } kread((u_long)ipxpcb.ipxp_socket, (char *)&sockb, sizeof (sockb)); ppcb = (u_long) ipxpcb.ipxp_pcb; if (ppcb) { if (isspx) { kread(ppcb, (char *)&spxpcb, sizeof (spxpcb)); } else continue; } else if (isspx) continue; if (first) { printf("Active IPX 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; } if (Aflag) printf("%8lx ", ppcb); printf("%-5.5s %6u %6u ", name, sockb.so_rcv.sb_cc, sockb.so_snd.sb_cc); printf(Aflag?" %-18.18s":" %-22.22s", ipx_prpr(&ipxpcb.ipxp_laddr)); printf(Aflag?" %-18.18s":" %-22.22s", ipx_prpr(&ipxpcb.ipxp_faddr)); if (isspx) { extern char *tcpstates[]; if (spxpcb.s_state >= TCP_NSTATES) printf(" %d", spxpcb.s_state); else printf(" %s", tcpstates[spxpcb.s_state]); } putchar('\n'); prev = next; } }