Annotation of 43BSD/etc/XNSrouted/af.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1985 Regents of the University of California.
        !             3:  * All rights reserved.  The Berkeley software License Agreement
        !             4:  * specifies the terms and conditions for redistribution.
        !             5:  *
        !             6:  * This file include significant work done at Cornell University
        !             7:  * by Bill Nesheim.  That work included by permission.
        !             8:  */
        !             9: 
        !            10: #ifndef lint
        !            11: static char sccsid[] = "@(#)af.c       5.6 (Berkeley) 6/5/86";
        !            12: #endif not lint
        !            13: 
        !            14: 
        !            15: #include "defs.h"
        !            16: 
        !            17: /*
        !            18:  * Address family support routines
        !            19:  */
        !            20: int    null_hash(), null_netmatch(), null_output(),
        !            21:        null_portmatch(), null_portcheck(),
        !            22:        null_checkhost(), null_ishost(), null_canon();
        !            23: int    xnnet_hash(), xnnet_netmatch(), xnnet_output(),
        !            24:        xnnet_portmatch();
        !            25:        xnnet_checkhost(), xnnet_ishost(), xnnet_canon();
        !            26: #define NIL \
        !            27:        { null_hash,            null_netmatch,          null_output, \
        !            28:          null_portmatch,       null_portcheck,         null_checkhost, \
        !            29:          null_ishost,          null_canon }
        !            30: #define        XNSNET \
        !            31:        { xnnet_hash,           xnnet_netmatch,         xnnet_output, \
        !            32:          xnnet_portmatch,      xnnet_portmatch,        xnnet_checkhost, \
        !            33:          xnnet_ishost,         xnnet_canon }
        !            34: 
        !            35: struct afswitch afswitch[AF_MAX] =
        !            36:        { NIL, NIL, NIL, NIL, NIL, NIL, XNSNET, NIL, NIL, NIL, NIL };
        !            37: 
        !            38: struct sockaddr_ns xnnet_default = { AF_NS };
        !            39: 
        !            40: union ns_net ns_anynet;
        !            41: union ns_net ns_zeronet;
        !            42: 
        !            43: xnnet_hash(sns, hp)
        !            44:        register struct sockaddr_ns *sns;
        !            45:        struct afhash *hp;
        !            46: {
        !            47:        register long hash = 0;
        !            48:        register u_short *s = sns->sns_addr.x_host.s_host;
        !            49:        union ns_net_u net;
        !            50: 
        !            51:        net.net_e = sns->sns_addr.x_net;
        !            52:        hp->afh_nethash = net.long_e;
        !            53:        hash = *s++; hash <<= 8; hash += *s++; hash <<= 8; hash += *s;
        !            54:        hp->afh_hosthash = hash;
        !            55: }
        !            56: 
        !            57: xnnet_netmatch(sxn1, sxn2)
        !            58:        struct sockaddr_ns *sxn1, *sxn2;
        !            59: {
        !            60:        return (ns_neteq(sxn1->sns_addr, sxn2->sns_addr));
        !            61: }
        !            62: 
        !            63: /*
        !            64:  * Verify the message is from the right port.
        !            65:  */
        !            66: xnnet_portmatch(sns)
        !            67:        register struct sockaddr_ns *sns;
        !            68: {
        !            69:        
        !            70:        return (ntohs(sns->sns_addr.x_port) == IDPPORT_RIF );
        !            71: }
        !            72: 
        !            73: 
        !            74: /*
        !            75:  * xns output routine.
        !            76:  */
        !            77: #ifdef DEBUG
        !            78: int do_output = 0;
        !            79: #endif
        !            80: xnnet_output(flags, sns, size)
        !            81:        int flags;
        !            82:        struct sockaddr_ns *sns;
        !            83:        int size;
        !            84: {
        !            85:        struct sockaddr_ns dst;
        !            86: 
        !            87:        dst = *sns;
        !            88:        sns = &dst;
        !            89:        if (sns->sns_addr.x_port == 0)
        !            90:                sns->sns_addr.x_port = htons(IDPPORT_RIF);
        !            91: #ifdef DEBUG
        !            92:        if(do_output || ntohs(msg->rip_cmd) == RIPCMD_REQUEST)
        !            93: #endif 
        !            94:        /*
        !            95:         * Kludge to allow us to get routes out to machines that
        !            96:         * don't know their addresses yet; send to that address on
        !            97:         * ALL connected nets
        !            98:         */
        !            99:         if (ns_neteqnn(sns->sns_addr.x_net, ns_zeronet)) {
        !           100:                extern  struct interface *ifnet;
        !           101:                register struct interface *ifp;
        !           102:                
        !           103:                for (ifp = ifnet; ifp; ifp = ifp->int_next) {
        !           104:                        sns->sns_addr.x_net = 
        !           105:                                satons_addr(ifp->int_addr).x_net;
        !           106:                        (void) sendto(s, msg, size, flags, sns, sizeof (*sns));
        !           107:                }
        !           108:                return;
        !           109:        }
        !           110:        
        !           111:        (void) sendto(s, msg, size, flags, sns, sizeof (*sns));
        !           112: }
        !           113: 
        !           114: /*
        !           115:  * Return 1 if we want this route.
        !           116:  * We use this to disallow route net G entries for one for multiple
        !           117:  * point to point links.
        !           118:  */
        !           119: xnnet_checkhost(sns)
        !           120:        struct sockaddr_ns *sns;
        !           121: {
        !           122:        register struct interface *ifp = if_ifwithnet(sns);
        !           123:        /*
        !           124:         * We want this route if there is no more than one 
        !           125:         * point to point interface with this network.
        !           126:         */
        !           127:        if (ifp == 0 || (ifp->int_flags & IFF_POINTOPOINT)==0) return (1);
        !           128:        return (ifp->int_sq.n == ifp->int_sq.p);
        !           129: }
        !           130: 
        !           131: /*
        !           132:  * Return 1 if the address is
        !           133:  * for a host, 0 for a network.
        !           134:  */
        !           135: xnnet_ishost(sns)
        !           136: struct sockaddr_ns *sns;
        !           137: {
        !           138:        register u_short *s = sns->sns_addr.x_host.s_host;
        !           139: 
        !           140:        if ((s[0]==0xffff) && (s[1]==0xffff) && (s[2]==0xffff))
        !           141:                return (0);
        !           142:        else
        !           143:                return (1);
        !           144: }
        !           145: 
        !           146: xnnet_canon(sns)
        !           147:        struct sockaddr_ns *sns;
        !           148: {
        !           149: 
        !           150:        sns->sns_addr.x_port = 0;
        !           151: }
        !           152: 
        !           153: /*ARGSUSED*/
        !           154: null_hash(addr, hp)
        !           155:        struct sockaddr *addr;
        !           156:        struct afhash *hp;
        !           157: {
        !           158: 
        !           159:        hp->afh_nethash = hp->afh_hosthash = 0;
        !           160: }
        !           161: 
        !           162: /*ARGSUSED*/
        !           163: null_netmatch(a1, a2)
        !           164:        struct sockaddr *a1, *a2;
        !           165: {
        !           166: 
        !           167:        return (0);
        !           168: }
        !           169: 
        !           170: /*ARGSUSED*/
        !           171: null_output(s, f, a1, n)
        !           172:        int s, f;
        !           173:        struct sockaddr *a1;
        !           174:        int n;
        !           175: {
        !           176: 
        !           177:        ;
        !           178: }
        !           179: 
        !           180: /*ARGSUSED*/
        !           181: null_portmatch(a1)
        !           182:        struct sockaddr *a1;
        !           183: {
        !           184: 
        !           185:        return (0);
        !           186: }
        !           187: 
        !           188: /*ARGSUSED*/
        !           189: null_portcheck(a1)
        !           190:        struct sockaddr *a1;
        !           191: {
        !           192: 
        !           193:        return (0);
        !           194: }
        !           195: 
        !           196: /*ARGSUSED*/
        !           197: null_ishost(a1)
        !           198:        struct sockaddr *a1;
        !           199: {
        !           200: 
        !           201:        return (0);
        !           202: }
        !           203: 
        !           204: /*ARGSUSED*/
        !           205: null_checkhost(a1)
        !           206:        struct sockaddr *a1;
        !           207: {
        !           208: 
        !           209:        return (0);
        !           210: }
        !           211: 
        !           212: /*ARGSUSED*/
        !           213: null_canon(a1)
        !           214:        struct sockaddr *a1;
        !           215: {
        !           216: 
        !           217:        ;
        !           218: }

unix.superglobalmegacorp.com

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