1*24305Ssklower #ifndef lint 2*24305Ssklower static char rcsid[] = "$Header$"; 3*24305Ssklower #endif 4*24305Ssklower 5*24305Ssklower #include "defs.h" 6*24305Ssklower 7*24305Ssklower /* 8*24305Ssklower * Address family support routines 9*24305Ssklower */ 10*24305Ssklower int null_hash(), null_netmatch(), null_output(), 11*24305Ssklower null_portmatch(), null_portcheck(), 12*24305Ssklower null_checkhost(), null_ishost(), null_canon(); 13*24305Ssklower int xnnet_hash(), xnnet_netmatch(), xnnet_output(), 14*24305Ssklower xnnet_portmatch(); 15*24305Ssklower xnnet_checkhost(), xnnet_ishost(), xnnet_canon(); 16*24305Ssklower #define NIL \ 17*24305Ssklower { null_hash, null_netmatch, null_output, \ 18*24305Ssklower null_portmatch, null_portcheck, null_checkhost, \ 19*24305Ssklower null_ishost, null_canon } 20*24305Ssklower #define XNSNET \ 21*24305Ssklower { xnnet_hash, xnnet_netmatch, xnnet_output, \ 22*24305Ssklower xnnet_portmatch, xnnet_portmatch, xnnet_checkhost, \ 23*24305Ssklower xnnet_ishost, xnnet_canon } 24*24305Ssklower 25*24305Ssklower struct afswitch afswitch[AF_MAX] = 26*24305Ssklower { NIL, NIL, NIL, NIL, NIL, NIL, XNSNET, NIL, NIL, NIL, NIL }; 27*24305Ssklower 28*24305Ssklower struct sockaddr_xn xnnet_default = { AF_XNS }; 29*24305Ssklower 30*24305Ssklower xnnet_hash(sxn, hp) 31*24305Ssklower register struct sockaddr_xn *sxn; 32*24305Ssklower struct afhash *hp; 33*24305Ssklower { 34*24305Ssklower hp->afh_nethash = xnnet(sxn->sxn_addr.xn_net); 35*24305Ssklower hp->afh_hosthash = *(int *)sxn->sxn_addr.xn_host; 36*24305Ssklower } 37*24305Ssklower 38*24305Ssklower xnnet_netmatch(sxn1, sxn2) 39*24305Ssklower struct sockaddr_xn *sxn1, *sxn2; 40*24305Ssklower { 41*24305Ssklower 42*24305Ssklower return (xnnet(sxn1->sxn_addr.xn_net) == xnnet(sxn2->sxn_addr.xn_net)); 43*24305Ssklower } 44*24305Ssklower 45*24305Ssklower /* 46*24305Ssklower * Verify the message is from the right port. 47*24305Ssklower */ 48*24305Ssklower xnnet_portmatch(sxn) 49*24305Ssklower register struct sockaddr_xn *sxn; 50*24305Ssklower { 51*24305Ssklower 52*24305Ssklower return (ntohs(sxn->sxn_addr.xn_socket) == IDPPORT_RIF ); 53*24305Ssklower } 54*24305Ssklower 55*24305Ssklower 56*24305Ssklower /* 57*24305Ssklower * xns output routine. 58*24305Ssklower */ 59*24305Ssklower #ifdef DEBUG 60*24305Ssklower int do_output = 0; 61*24305Ssklower #endif 62*24305Ssklower xnnet_output(s, flags, sxn, size) 63*24305Ssklower int s, flags; 64*24305Ssklower struct sockaddr_xn *sxn; 65*24305Ssklower int size; 66*24305Ssklower { 67*24305Ssklower struct sockaddr_xn dst; 68*24305Ssklower 69*24305Ssklower dst = *sxn; 70*24305Ssklower sxn = &dst; 71*24305Ssklower if (sxn->sxn_addr.xn_socket == 0) 72*24305Ssklower sxn->sxn_addr.xn_socket = htons(IDPPORT_RIF); 73*24305Ssklower #ifdef DEBUG 74*24305Ssklower if(do_output || ntohs(msg->rip_cmd) == RIPCMD_REQUEST) 75*24305Ssklower #endif 76*24305Ssklower if (sendto(s, msg, size, flags, sxn, sizeof (*sxn)) < 0) 77*24305Ssklower perror("sendto"); 78*24305Ssklower } 79*24305Ssklower 80*24305Ssklower /* 81*24305Ssklower * Return 1 if the address is believed 82*24305Ssklower * -- THIS IS A KLUDGE. 83*24305Ssklower */ 84*24305Ssklower xnnet_checkhost(sxn) 85*24305Ssklower struct sockaddr_xn *sxn; 86*24305Ssklower { 87*24305Ssklower return (1); 88*24305Ssklower } 89*24305Ssklower 90*24305Ssklower /* 91*24305Ssklower * Return 1 if the address is 92*24305Ssklower * for a host, 0 for a network. 93*24305Ssklower */ 94*24305Ssklower xnnet_ishost(sxn) 95*24305Ssklower struct sockaddr_xn *sxn; 96*24305Ssklower { 97*24305Ssklower register int i; 98*24305Ssklower 99*24305Ssklower for (i = 0; i < 6; i++) 100*24305Ssklower if (sxn->sxn_addr.xn_host[i] != 0) return (1); 101*24305Ssklower return (0); 102*24305Ssklower } 103*24305Ssklower 104*24305Ssklower xnnet_canon(sxn) 105*24305Ssklower struct sockaddr_xn *sxn; 106*24305Ssklower { 107*24305Ssklower 108*24305Ssklower sxn->sxn_addr.xn_socket = 0; 109*24305Ssklower } 110*24305Ssklower 111*24305Ssklower /*ARGSUSED*/ 112*24305Ssklower null_hash(addr, hp) 113*24305Ssklower struct sockaddr *addr; 114*24305Ssklower struct afhash *hp; 115*24305Ssklower { 116*24305Ssklower 117*24305Ssklower hp->afh_nethash = hp->afh_hosthash = 0; 118*24305Ssklower } 119*24305Ssklower 120*24305Ssklower /*ARGSUSED*/ 121*24305Ssklower null_netmatch(a1, a2) 122*24305Ssklower struct sockaddr *a1, *a2; 123*24305Ssklower { 124*24305Ssklower 125*24305Ssklower return (0); 126*24305Ssklower } 127*24305Ssklower 128*24305Ssklower /*ARGSUSED*/ 129*24305Ssklower null_output(s, f, a1, n) 130*24305Ssklower int s, f; 131*24305Ssklower struct sockaddr *a1; 132*24305Ssklower int n; 133*24305Ssklower { 134*24305Ssklower 135*24305Ssklower ; 136*24305Ssklower } 137*24305Ssklower 138*24305Ssklower /*ARGSUSED*/ 139*24305Ssklower null_portmatch(a1) 140*24305Ssklower struct sockaddr *a1; 141*24305Ssklower { 142*24305Ssklower 143*24305Ssklower return (0); 144*24305Ssklower } 145*24305Ssklower 146*24305Ssklower /*ARGSUSED*/ 147*24305Ssklower null_portcheck(a1) 148*24305Ssklower struct sockaddr *a1; 149*24305Ssklower { 150*24305Ssklower 151*24305Ssklower return (0); 152*24305Ssklower } 153*24305Ssklower 154*24305Ssklower /*ARGSUSED*/ 155*24305Ssklower null_ishost(a1) 156*24305Ssklower struct sockaddr *a1; 157*24305Ssklower { 158*24305Ssklower 159*24305Ssklower return (0); 160*24305Ssklower } 161*24305Ssklower 162*24305Ssklower /*ARGSUSED*/ 163*24305Ssklower null_checkhost(a1) 164*24305Ssklower struct sockaddr *a1; 165*24305Ssklower { 166*24305Ssklower 167*24305Ssklower return (0); 168*24305Ssklower } 169*24305Ssklower 170*24305Ssklower /*ARGSUSED*/ 171*24305Ssklower null_canon(a1) 172*24305Ssklower struct sockaddr *a1; 173*24305Ssklower { 174*24305Ssklower 175*24305Ssklower ; 176*24305Ssklower } 177