1*4b22b933Srs /*
2*4b22b933Srs  * CDDL HEADER START
3*4b22b933Srs  *
4*4b22b933Srs  * The contents of this file are subject to the terms of the
5*4b22b933Srs  * Common Development and Distribution License (the "License").
6*4b22b933Srs  * You may not use this file except in compliance with the License.
7*4b22b933Srs  *
8*4b22b933Srs  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*4b22b933Srs  * or http://www.opensolaris.org/os/licensing.
10*4b22b933Srs  * See the License for the specific language governing permissions
11*4b22b933Srs  * and limitations under the License.
12*4b22b933Srs  *
13*4b22b933Srs  * When distributing Covered Code, include this CDDL HEADER in each
14*4b22b933Srs  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*4b22b933Srs  * If applicable, add the following below this CDDL HEADER, with the
16*4b22b933Srs  * fields enclosed by brackets "[]" replaced with your own identifying
17*4b22b933Srs  * information: Portions Copyright [yyyy] [name of copyright owner]
18*4b22b933Srs  *
19*4b22b933Srs  * CDDL HEADER END
20*4b22b933Srs  */
21*4b22b933Srs 
22*4b22b933Srs /*
23*4b22b933Srs  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24*4b22b933Srs  * Use is subject to license terms.
25*4b22b933Srs  */
26*4b22b933Srs 
27*4b22b933Srs #ifndef _MDNS_COMMON_H
28*4b22b933Srs #define	_MDNS_COMMON_H
29*4b22b933Srs 
30*4b22b933Srs #include <stdio.h>
31*4b22b933Srs #include <ctype.h>
32*4b22b933Srs #include <sys/types.h>
33*4b22b933Srs #include <sys/socket.h>
34*4b22b933Srs #include <netdb.h>
35*4b22b933Srs #include <strings.h>
36*4b22b933Srs #include <syslog.h>
37*4b22b933Srs #include <sys/time.h>
38*4b22b933Srs #include <sys/select.h>
39*4b22b933Srs #include <netinet/in.h>
40*4b22b933Srs #include <arpa/inet.h>
41*4b22b933Srs #include <arpa/nameser.h>
42*4b22b933Srs #include <nsswitch.h>
43*4b22b933Srs #include <nss_common.h>
44*4b22b933Srs #include <nss_dbdefs.h>
45*4b22b933Srs #include <stdlib.h>
46*4b22b933Srs #include <signal.h>
47*4b22b933Srs #include <libscf.h>
48*4b22b933Srs #include <dns_sd.h>
49*4b22b933Srs 
50*4b22b933Srs #ifdef	__cplusplus
51*4b22b933Srs extern "C" {
52*4b22b933Srs #endif
53*4b22b933Srs 
54*4b22b933Srs #define	NSSMDNS_MAXQRYTMO	1
55*4b22b933Srs #define	NSSMDNS_MAXSRCHDMNS	6
56*4b22b933Srs #define	NSSMDNS_MAXVALIDDMNS	10
57*4b22b933Srs 
58*4b22b933Srs #define	SMF_MDNS_FMRI "svc:/network/dns/multicast:default"
59*4b22b933Srs #define	SMF_NSSMDNSCFG_PROPGRP "nss_mdns_config"
60*4b22b933Srs #define	SMF_NSSMDNSCFG_SRCHPROP "search"
61*4b22b933Srs #define	SMF_NSSMDNSCFG_DMNPROP "domain"
62*4b22b933Srs 
63*4b22b933Srs typedef struct mdns_backend *mdns_backend_ptr_t;
64*4b22b933Srs typedef nss_status_t (*mdns_backend_op_t)(mdns_backend_ptr_t, void *);
65*4b22b933Srs 
66*4b22b933Srs struct mdns_backend {
67*4b22b933Srs 	mdns_backend_op_t	*ops;
68*4b22b933Srs 	nss_dbop_t		n_ops;
69*4b22b933Srs 	char *dmnsrchlist[NSSMDNS_MAXSRCHDMNS];
70*4b22b933Srs 	char *validdmnlist[NSSMDNS_MAXVALIDDMNS];
71*4b22b933Srs 	struct timeval conftimestamp;
72*4b22b933Srs };
73*4b22b933Srs 
74*4b22b933Srs struct mdns_querydata {
75*4b22b933Srs 	nss_XbyY_args_t *argp;
76*4b22b933Srs 	char *buffer;
77*4b22b933Srs 	int buflen;
78*4b22b933Srs 	int ttl;
79*4b22b933Srs 	boolean_t qrydone;
80*4b22b933Srs 	int status;
81*4b22b933Srs 	int af;
82*4b22b933Srs 	char paddrbuf[INET6_ADDRSTRLEN + 1];
83*4b22b933Srs 	int withttlbsize;
84*4b22b933Srs 	char *withttlbuffer;
85*4b22b933Srs };
86*4b22b933Srs 
87*4b22b933Srs nss_backend_t *_nss_mdns_constr(mdns_backend_op_t *, int);
88*4b22b933Srs void _nss_mdns_destr(mdns_backend_ptr_t);
89*4b22b933Srs int _nss_mdns_querybyname(mdns_backend_ptr_t, char *name,
90*4b22b933Srs 		int af, struct mdns_querydata *data);
91*4b22b933Srs int _nss_mdns_querybyaddr(mdns_backend_ptr_t, char *name,
92*4b22b933Srs 		int af, struct mdns_querydata *data);
93*4b22b933Srs void _nss_mdns_updatecfg(mdns_backend_ptr_t);
94*4b22b933Srs 
95*4b22b933Srs nss_status_t _nss_mdns_gethost_withttl(void *buf, size_t bufsize, int ipnode);
96*4b22b933Srs nss_status_t _nss_get_mdns_hosts_name(mdns_backend_ptr_t *be,
97*4b22b933Srs 		void **bufp, size_t *sizep);
98*4b22b933Srs nss_status_t _nss_get_mdns_ipnodes_name(mdns_backend_ptr_t *be,
99*4b22b933Srs 		void **bufp, size_t *sizep);
100*4b22b933Srs 
101*4b22b933Srs #ifdef	__cplusplus
102*4b22b933Srs }
103*4b22b933Srs #endif
104*4b22b933Srs 
105*4b22b933Srs #endif /* _MDNS_COMMON_H */
106