|
|
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.