|
|
1.1 root 1: /* test.c - main */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <deqna.h>
6: #include <ether.h>
7: #include <ip.h>
8: #include <net.h>
9: #include <arp.h>
10: #include <ctype.h>
11: #include <hosts.h>
12:
13: #define UDPECHO 7 /* UDP echo port number */
14: #define LPORT 2000 /* local udp port for reply */
15: #define NMSGS 6 /* number of possible messages */
16:
17: IPaddr gateway;
18: IPaddr defaddr;
19:
20: char *msgs[NMSGS] =
21: {"1 - Send echo packet\n",
22: "2 - Clear address cache\n",
23: "3 - Dump address cache\n",
24: "4 - Change default address\n",
25: "5 - Change gateway address\n",
26: "6 - Toggle RWHO packet printing\n"};
27: int prrwho;
28:
29: /*------------------------------------------------------------------------
30: * main -- Try to reach echo servers on remote machines
31: *------------------------------------------------------------------------
32: */
33: main()
34: {
35: char ch;
36: int i;
37: int cindex;
38:
39: dtoIP(&gateway, MORDRED);
40: dtoIP(&defaddr, MERLIN);
41: control(NETWORK, NC_SETGW, &gateway);
42: printf("\nUDP test. Gateway = %d.%d.%d.%d Dest = %d.%d.%d.%d\n",
43: gateway[0] & 0377, gateway[1] & 0377,
44: gateway[2] & 0377, gateway[3] & 0377,
45: defaddr[0] & 0377, defaddr[1] & 0377,
46: defaddr[2] & 0377, defaddr[3] & 0377);
47: while (TRUE) {
48: printf("\nSelect one of the following\n");
49: for (i=0 ; i<NMSGS ; i++)
50: printf(" %s",msgs[i]);
51: while ( (ch=getc(CONSOLE)) == ' ')
52: ;
53: cindex = ch - '0';
54: while (ch != '\n')
55: ch = getc(CONSOLE);
56: if ( cindex<=0 || cindex>NMSGS)
57: continue;
58:
59: switch (cindex) {
60:
61: case 1:
62: sndecho();
63: break;
64:
65: case 2:
66: ARP.atabnxt = ARP.atabsiz = 0;
67:
68: case 3:
69: adump();
70: break;
71:
72: case 4:
73: getaddr(defaddr);
74: break;
75:
76: case 5:
77: getaddr(gateway);
78: control(NETWORK, NC_SETGW, &gateway);
79: break;
80:
81: case 6:
82: if (prrwho) {
83: printf("printing turned off\n");
84: prrwho = FALSE;
85: } else {
86: printf("printing turned on\n");
87: prrwho = TRUE;
88: }
89: break;
90:
91: default:
92: panic("test - can't happen");
93: }
94: }
95: }
96:
97: /*------------------------------------------------------------------------
98: * sndecho - send an echo packet
99: *------------------------------------------------------------------------
100: */
101: sndecho()
102: {
103: char ch;
104: char *cptr;
105: int len;
106: IPaddr faddr;
107: struct epacket *packet;
108:
109: /* set up specific gateway address */
110:
111: packet = (struct epacket *) getbuf(Net.netpool);
112: blkcopy(faddr, defaddr, IPLEN);
113: getaddr(faddr);
114: cptr = (char *) (( (struct udpip *)packet->ep_data)->u_data);
115: printf("\nType a one-line message to send out: ");
116: for (len=1 ; (ch=getc(CONSOLE)) != '\n' ; len++)
117: *cptr++ = ch;
118: *cptr = '\n';
119: printf("Sending datagram with %d data bytes\n", len);
120: udpsend(faddr, UDPECHO, LPORT, packet, len);
121: return(OK);
122: }
123:
124: /*------------------------------------------------------------------------
125: * getaddr - get network address (dot notation) from CONSOLE input
126: *------------------------------------------------------------------------
127: */
128: getaddr(ip)
129: char *ip;
130: {
131: int i, byte;
132: char ch;
133: IPaddr tmp;
134: char *tp;
135:
136: printf("\nType destination net address like %d.%d.%d.%d: ",
137: ip[0] & 0377, ip[1] & 0377,
138: ip[2] & 0377, ip[3] & 0377);
139: if ( (ch = getc(CONSOLE) ) == '\n' || !isdigit(ch)) {
140: printf("Using address %d.%d.%d.%d\n",
141: ip[0]&0377, ip[1]&0377,ip[2]&0377, ip[3]&0377);
142: return(OK);
143: }
144: byte = ch - '0';
145: tp = (char *)tmp;
146: for (i=0 ; i<4 ; byte=0,i++) {
147: while ( isdigit(ch=getc(CONSOLE)) )
148: byte = 10*byte + (ch - '0');
149: if (byte > 256 || (i<3 && ch!='.') ) {
150: printf("Using address %d.%d.%d.%d\n",
151: ip[0]&0377, ip[1]&0377,ip[2]&0377, ip[3]&0377);
152: return(OK);
153: }
154: *tp++ = (char)byte;
155: }
156: if (ch == '\n')
157: blkcopy(ip, tmp, IPLEN);
158: return(OK);
159: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.