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