xref: /csrg-svn/sys/netiso/iso_addrs.c (revision 37469)
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 
masked_cmp(a,b,c,len)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