xref: /onnv-gate/usr/src/common/smbsrv/smb_inet.c (revision 9021:3b15214a2c50)
18670SJose.Borrego@Sun.COM /*
28670SJose.Borrego@Sun.COM  * CDDL HEADER START
38670SJose.Borrego@Sun.COM  *
48670SJose.Borrego@Sun.COM  * The contents of this file are subject to the terms of the
58670SJose.Borrego@Sun.COM  * Common Development and Distribution License (the "License").
68670SJose.Borrego@Sun.COM  * You may not use this file except in compliance with the License.
78670SJose.Borrego@Sun.COM  *
88670SJose.Borrego@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
98670SJose.Borrego@Sun.COM  * or http://www.opensolaris.org/os/licensing.
108670SJose.Borrego@Sun.COM  * See the License for the specific language governing permissions
118670SJose.Borrego@Sun.COM  * and limitations under the License.
128670SJose.Borrego@Sun.COM  *
138670SJose.Borrego@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
148670SJose.Borrego@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
158670SJose.Borrego@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
168670SJose.Borrego@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
178670SJose.Borrego@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
188670SJose.Borrego@Sun.COM  *
198670SJose.Borrego@Sun.COM  * CDDL HEADER END
208670SJose.Borrego@Sun.COM  */
218670SJose.Borrego@Sun.COM /*
228670SJose.Borrego@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
238670SJose.Borrego@Sun.COM  * Use is subject to license terms.
248670SJose.Borrego@Sun.COM  */
258670SJose.Borrego@Sun.COM 
268670SJose.Borrego@Sun.COM /*
278670SJose.Borrego@Sun.COM  * This file was originally generated using rpcgen.
288670SJose.Borrego@Sun.COM  */
298670SJose.Borrego@Sun.COM 
308670SJose.Borrego@Sun.COM #ifndef _KERNEL
318670SJose.Borrego@Sun.COM #include <string.h>
328670SJose.Borrego@Sun.COM #include <stdlib.h>
338670SJose.Borrego@Sun.COM #include <arpa/inet.h>
348670SJose.Borrego@Sun.COM #endif /* !_KERNEL */
358670SJose.Borrego@Sun.COM #include <sys/types.h>
368670SJose.Borrego@Sun.COM #include <sys/socket.h>
378670SJose.Borrego@Sun.COM #include <netinet/in.h>
388670SJose.Borrego@Sun.COM #include <inet/tcp.h>
398670SJose.Borrego@Sun.COM #include <smbsrv/smb_inet.h>
408670SJose.Borrego@Sun.COM 
418670SJose.Borrego@Sun.COM const struct in6_addr ipv6addr_any = IN6ADDR_ANY_INIT;
428670SJose.Borrego@Sun.COM 
438670SJose.Borrego@Sun.COM boolean_t
smb_inet_equal(smb_inaddr_t * ip1,smb_inaddr_t * ip2)44*9021Samw@Sun.COM smb_inet_equal(smb_inaddr_t *ip1, smb_inaddr_t *ip2)
45*9021Samw@Sun.COM {
46*9021Samw@Sun.COM 	if ((ip1->a_family == AF_INET) &&
47*9021Samw@Sun.COM 	    (ip2->a_family == AF_INET) &&
48*9021Samw@Sun.COM 	    (ip1->a_ipv4 == ip2->a_ipv4))
49*9021Samw@Sun.COM 		return (B_TRUE);
50*9021Samw@Sun.COM 
51*9021Samw@Sun.COM 	if ((ip1->a_family == AF_INET6) &&
52*9021Samw@Sun.COM 	    (ip2->a_family == AF_INET6) &&
53*9021Samw@Sun.COM 	    (!memcmp(&ip1->a_ipv6, &ip2->a_ipv6, IPV6_ADDR_LEN)))
54*9021Samw@Sun.COM 		return (B_TRUE);
55*9021Samw@Sun.COM 	else
56*9021Samw@Sun.COM 		return (B_FALSE);
57*9021Samw@Sun.COM }
58*9021Samw@Sun.COM 
59*9021Samw@Sun.COM boolean_t
smb_inet_same_subnet(smb_inaddr_t * ip1,smb_inaddr_t * ip2,uint32_t v4mask)60*9021Samw@Sun.COM smb_inet_same_subnet(smb_inaddr_t *ip1, smb_inaddr_t *ip2, uint32_t v4mask)
618670SJose.Borrego@Sun.COM {
628670SJose.Borrego@Sun.COM 	if ((ip1->a_family == AF_INET) &&
638670SJose.Borrego@Sun.COM 	    (ip2->a_family == AF_INET) &&
648670SJose.Borrego@Sun.COM 	    ((ip1->a_ipv4 & v4mask) == (ip2->a_ipv4 & v4mask)))
658670SJose.Borrego@Sun.COM 		return (B_TRUE);
668670SJose.Borrego@Sun.COM 
678670SJose.Borrego@Sun.COM 	if ((ip1->a_family == AF_INET6) &&
688670SJose.Borrego@Sun.COM 	    (ip2->a_family == AF_INET6) &&
698670SJose.Borrego@Sun.COM 	    (!memcmp(&ip1->a_ipv6, &ip2->a_ipv6, IPV6_ADDR_LEN)))
708670SJose.Borrego@Sun.COM 		return (B_TRUE);
718670SJose.Borrego@Sun.COM 	else
728670SJose.Borrego@Sun.COM 		return (B_FALSE);
738670SJose.Borrego@Sun.COM }
748670SJose.Borrego@Sun.COM 
758670SJose.Borrego@Sun.COM boolean_t
smb_inet_iszero(smb_inaddr_t * ipaddr)768670SJose.Borrego@Sun.COM smb_inet_iszero(smb_inaddr_t *ipaddr)
778670SJose.Borrego@Sun.COM {
788670SJose.Borrego@Sun.COM 	const void *ipsz = (const void *)&ipv6addr_any;
798670SJose.Borrego@Sun.COM 
808670SJose.Borrego@Sun.COM 	if ((ipaddr->a_family == AF_INET) &&
818670SJose.Borrego@Sun.COM 	    (ipaddr->a_ipv4 == 0))
828670SJose.Borrego@Sun.COM 		return (B_TRUE);
838670SJose.Borrego@Sun.COM 
848670SJose.Borrego@Sun.COM 	if ((ipaddr->a_family == AF_INET6) &&
858670SJose.Borrego@Sun.COM 	    !memcmp(&ipaddr->a_ipv6, ipsz, IPV6_ADDR_LEN))
868670SJose.Borrego@Sun.COM 		return (B_TRUE);
878670SJose.Borrego@Sun.COM 	else
888670SJose.Borrego@Sun.COM 		return (B_FALSE);
898670SJose.Borrego@Sun.COM }
908670SJose.Borrego@Sun.COM 
918670SJose.Borrego@Sun.COM const char *
smb_inet_ntop(smb_inaddr_t * addr,char * buf,int size)928670SJose.Borrego@Sun.COM smb_inet_ntop(smb_inaddr_t *addr, char *buf, int size)
938670SJose.Borrego@Sun.COM {
948670SJose.Borrego@Sun.COM 	return ((char *)inet_ntop(addr->a_family, (char *)addr, buf, size));
958670SJose.Borrego@Sun.COM }
96