|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)host.c 4.2 82/11/14";
3: #endif
4:
5: #include <sys/types.h>
6: #include <sys/mbuf.h>
7:
8: #include <netinet/in.h>
9: #include <netimp/if_imp.h>
10: #include <netimp/if_imphost.h>
11:
12: #include <netdb.h>
13: #include <nlist.h>
14: #include "nstat.h"
15:
16: struct nlist hostnl[] = {
17: # define N_HOSTS 0
18: { "_hosts" },
19: { "" },
20: };
21:
22: extern int kmem;
23: extern char *system;
24: extern char *inetname();
25:
26: /*
27: * Print the host tables associated with the ARPANET IMP.
28: * Symbolic addresses are shown unless the nflag is given.
29: */
30: hostpr()
31: {
32: off_t hostsaddr;
33: struct mbuf *hosts, mb;
34: register struct mbuf *m;
35: register struct hmbuf *mh;
36: register struct host *hp;
37: struct hostent *p;
38: char flagbuf[10], *flags;
39: int first = 1;
40:
41: static int getvm = 0;
42:
43: if (!getvm) {
44: nlist(system, hostnl);
45: ++getvm;
46: }
47: hostsaddr = hostnl[N_HOSTS].n_value;
48: if (hostsaddr == 0) {
49: printf("hosts: symbol not in namelist\n");
50: return;
51: }
52: klseek(kmem, hostsaddr, 0);
53: read(kmem, &hosts, sizeof (hosts));
54: m = hosts;
55: printf("IMP Host Table\n");
56: printf("%-5.5s %-15.15s %-4.4s %-9.9s %-4.4s %s\n",
57: "Flags", "Host", "Qcnt", "Q Address", "RFNM", "Timer");
58: while (m) {
59: klseek(kmem, m, 0);
60: read(kmem, &mb, sizeof (mb));
61: m = &mb;
62: mh = mtod(m, struct hmbuf *);
63: if (mh->hm_count == 0) {
64: m = m->m_next;
65: continue;
66: }
67: for (hp = mh->hm_hosts; hp < mh->hm_hosts + HPMBUF; hp++) {
68: if ((hp->h_flags&HF_INUSE) == 0 && hp->h_timer == 0)
69: continue;
70: flags = flagbuf;
71: *flags++ = hp->h_flags&HF_INUSE ? 'A' : 'F';
72: if (hp->h_flags&HF_DEAD)
73: *flags++ = 'D';
74: if (hp->h_flags&HF_UNREACH)
75: *flags++ = 'U';
76: *flags = '\0';
77: printf("%-5.5s %-15.15s %-4d %-9x %-4d %d\n",
78: flagbuf,
79: inetname(hp->h_addr),
80: hp->h_qcnt,
81: hp->h_q,
82: hp->h_rfnm,
83: hp->h_timer);
84: }
85: m = m->m_next;
86: }
87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.