Annotation of xinu/sys/TEST/test.c.eth4, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.