|
|
1.1 ! root 1: #include <sys/dkstat.h> ! 2: #include <nlist.h> ! 3: #include <ctype.h> ! 4: ! 5: struct nlist nl[] ={ ! 6: {"_dkstat"}, ! 7: {"_dk"}, ! 8: {"_ndkline"}, ! 9: { "" }, ! 10: }; ! 11: ! 12: int mem; ! 13: int every; ! 14: ! 15: int val; ! 16: long total; ! 17: char *sys = "/unix"; ! 18: char *core = "/dev/kmem"; ! 19: struct dkstat dko, dkn; ! 20: int cflag; ! 21: ! 22: #define R(m, f) if (dko.f != dkn.f) printf("%8D %s\n", (long)(dkn.f-dko.f), m) ! 23: ! 24: main(argc, argv) ! 25: char **argv; ! 26: { ! 27: int i; ! 28: ! 29: if (argc>1 && strcmp(argv[1], "-c")==0) { ! 30: cflag++; ! 31: argc--; ! 32: argv++; ! 33: } ! 34: if (argc>1 && isdigit(argv[1][0])) { ! 35: every = atoi(argv[1]); ! 36: argc--; ! 37: argv++; ! 38: } ! 39: if (argc > 1) ! 40: sys = argv[1]; ! 41: if (argc > 2) ! 42: core = argv[2]; ! 43: nlist(sys, nl); ! 44: if (nl[0].n_value <= 0) { ! 45: printf("No namelist in %s\n", sys); ! 46: exit(1); ! 47: } ! 48: mem = open(core, 0); ! 49: if (mem < 0) { ! 50: printf("can't open %s\n", core); ! 51: exit(1); ! 52: } ! 53: if (cflag) { ! 54: int ndkline = 0, i; ! 55: struct dk { ! 56: int *q; ! 57: char chan; ! 58: char state; ! 59: } dk[64]; ! 60: ! 61: lseek(mem, (long)nl[2].n_value, 0); ! 62: read(mem, (char *)&ndkline, sizeof(ndkline)); ! 63: if (ndkline<=0 || ndkline>=64) ! 64: ndkline = 32; ! 65: lseek(mem, (long)nl[1].n_value, 0); ! 66: read(mem, (char *)dk, sizeof(dk)); ! 67: for (i=0; i<ndkline; i++) ! 68: if (dk[i].state) ! 69: printf("%d %c\n", i, "xrlo"[dk[i].state]); ! 70: } ! 71: for (;;) { ! 72: lseek(mem, (long)nl[0].n_value, 0); ! 73: read(mem, (char *)&dkn, sizeof(dkn)); ! 74: R("in", input); ! 75: R("out", output); ! 76: R("mark fault", markflt); ! 77: R("mark parity", markparity); ! 78: R("packets on closed channels", closepack); ! 79: R("packets on channel 0", pack0); ! 80: R("packets on peculiar channels", packstrange); ! 81: R("short packets", shortpack); ! 82: R("parity", parity); ! 83: R("T_CHG on peculiar channel", chgstrange); ! 84: R("packets on hung-up channels", notclosed); ! 85: R("IS_CLOSED packets on open channels", isclosed); ! 86: R("dkp retransmissions", dkprxmit); ! 87: R("dkp trailer size rejects", dkprjtrs); ! 88: R("dkp message size rejects", dkprjpks); ! 89: R("dkp seq number rejects", dkprjseq); ! 90: if (every == 0) ! 91: break; ! 92: printf("\n"); ! 93: sleep(every); ! 94: dko = dkn; ! 95: } ! 96: return(0); ! 97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.