1*36386Ssklower /*********************************************************** 2*36386Ssklower Copyright IBM Corporation 1987 3*36386Ssklower 4*36386Ssklower All Rights Reserved 5*36386Ssklower 6*36386Ssklower Permission to use, copy, modify, and distribute this software and its 7*36386Ssklower documentation for any purpose and without fee is hereby granted, 8*36386Ssklower provided that the above copyright notice appear in all copies and that 9*36386Ssklower both that copyright notice and this permission notice appear in 10*36386Ssklower supporting documentation, and that the name of IBM not be 11*36386Ssklower used in advertising or publicity pertaining to distribution of the 12*36386Ssklower software without specific, written prior permission. 13*36386Ssklower 14*36386Ssklower IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 15*36386Ssklower ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 16*36386Ssklower IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 17*36386Ssklower ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 18*36386Ssklower WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 19*36386Ssklower ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 20*36386Ssklower SOFTWARE. 21*36386Ssklower 22*36386Ssklower ******************************************************************/ 23*36386Ssklower 24*36386Ssklower /* 25*36386Ssklower * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison 26*36386Ssklower */ 27*36386Ssklower 28*36386Ssklower iso_maskmatch(sisoa, sisob, smask) 29*36386Ssklower struct sockaddr_iso *sisoa, *sisob, smask; 30*36386Ssklower { 31*36386Ssklower caddr_t a, b, c; 32*36386Ssklower int compare_len; 33*36386Ssklower 34*36386Ssklower if ( smask ) { 35*36386Ssklower compare_len = smask->isoa_len; 36*36386Ssklower } else if ((compare_len = isoaa->isoa_len) != isoab->isoa_len) 37*36386Ssklower return 0; 38*36386Ssklower 39*36386Ssklower return masked_cmp(&sisoa->siso_addr, &sisob->siso_addr, 40*36386Ssklower &smask->siso_addr, compare_len); 41*36386Ssklower } 42*36386Ssklower 43*36386Ssklower int masked_cmp( a, b, c, len) 44*36386Ssklower register caddr_t a, b, c; 45*36386Ssklower int len; 46*36386Ssklower { 47*36386Ssklower caddr_t ax=a, bx=b, cx=c; 48*36386Ssklower register int i; 49*36386Ssklower 50*36386Ssklower for( i=0; i< len; i++) { 51*36386Ssklower if( (*a)&(*c) != (*b)&(*c) ) 52*36386Ssklower break; 53*36386Ssklower a++; 54*36386Ssklower b++; 55*36386Ssklower c++; 56*36386Ssklower } 57*36386Ssklower return (int) i; 58*36386Ssklower } 59