Annotation of xinu/sys/TEST/test.c.eth4, revision 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.