174462Salfred/*	$NetBSD: rpcbind.h,v 1.1 2000/06/03 00:47:21 fvdl Exp $	*/
274462Salfred/*	$FreeBSD: releng/10.3/usr.sbin/rpcbind/rpcbind.h 203710 2010-02-09 18:10:56Z imp $ */
374462Salfred
474462Salfred/*
574462Salfred * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
674462Salfred * unrestricted use provided that this legend is included on all tape
774462Salfred * media and as a part of the software program in whole or part.  Users
874462Salfred * may copy or modify Sun RPC without charge, but are not authorized
974462Salfred * to license or distribute it to anyone else except as part of a product or
1074462Salfred * program developed by the user.
1174462Salfred *
1274462Salfred * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
1374462Salfred * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
1474462Salfred * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
1574462Salfred *
1674462Salfred * Sun RPC is provided with no support and without any obligation on the
1774462Salfred * part of Sun Microsystems, Inc. to assist in its use, correction,
1874462Salfred * modification or enhancement.
1974462Salfred *
2074462Salfred * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
2174462Salfred * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
2274462Salfred * OR ANY PART THEREOF.
2374462Salfred *
2474462Salfred * In no event will Sun Microsystems, Inc. be liable for any lost revenue
2574462Salfred * or profits or other special, indirect and consequential damages, even if
2674462Salfred * Sun has been advised of the possibility of such damages.
2774462Salfred *
2874462Salfred * Sun Microsystems, Inc.
2974462Salfred * 2550 Garcia Avenue
3074462Salfred * Mountain View, California  94043
3174462Salfred */
3274462Salfred/*
3374462Salfred * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
3474462Salfred */
3574462Salfred
3674462Salfred/* #ident	"@(#)rpcbind.h 1.4 90/04/12 SMI" */
3774462Salfred
3874462Salfred/*
3974462Salfred * rpcbind.h
4074462Salfred * The common header declarations
4174462Salfred */
4274462Salfred
4374462Salfred#ifndef rpcbind_h
4474462Salfred#define	rpcbind_h
4574462Salfred
4674462Salfred#ifdef PORTMAP
4774462Salfred#include <rpc/pmap_prot.h>
4874462Salfred#endif
4974462Salfred#include <rpc/rpcb_prot.h>
5074462Salfred
5174462Salfred/*
5274462Salfred * Stuff for the rmtcall service
5374462Salfred */
5474462Salfredstruct encap_parms {
5574462Salfred	u_int32_t arglen;
5674462Salfred	char *args;
5774462Salfred};
5874462Salfred
5974462Salfredstruct r_rmtcall_args {
6074462Salfred	u_int32_t  rmt_prog;
6174462Salfred	u_int32_t  rmt_vers;
6274462Salfred	u_int32_t  rmt_proc;
6374462Salfred	int     rmt_localvers;  /* whether to send port # or uaddr */
6474462Salfred	char    *rmt_uaddr;
6574462Salfred	struct encap_parms rmt_args;
6674462Salfred};
6774462Salfred
6874462Salfredextern int debugging;
6974462Salfredextern int doabort;
7074462Salfredextern int verboselog;
7174462Salfredextern int insecure;
7274462Salfredextern int oldstyle_local;
7374462Salfredextern rpcblist_ptr list_rbl;	/* A list of version 3 & 4 rpcbind services */
7474462Salfred
7574462Salfred#ifdef PORTMAP
7674462Salfredextern struct pmaplist *list_pml; /* A list of version 2 rpcbind services */
7774462Salfredextern char *udptrans;		/* Name of UDP transport */
7874462Salfredextern char *tcptrans;		/* Name of TCP transport */
7974462Salfredextern char *udp_uaddr;		/* Universal UDP address */
8074462Salfredextern char *tcp_uaddr;		/* Universal TCP address */
8174462Salfred#endif
8274462Salfred
83173412Skevloint add_bndlist(struct netconfig *, struct netbuf *);
84173412Skevlobool_t is_bound(char *, char *);
85173412Skevlochar *mergeaddr(SVCXPRT *, char *, char *, char *);
86173412Skevlostruct netconfig *rpcbind_get_conf(char *);
8774462Salfred
88173412Skevlovoid rpcbs_init(void);
89173412Skevlovoid rpcbs_procinfo(rpcvers_t, rpcproc_t);
90173412Skevlovoid rpcbs_set(rpcvers_t, bool_t);
91173412Skevlovoid rpcbs_unset(rpcvers_t, bool_t);
92173412Skevlovoid rpcbs_getaddr(rpcvers_t, rpcprog_t, rpcvers_t, char *, char *);
93173412Skevlovoid rpcbs_rmtcall(rpcvers_t, rpcproc_t, rpcprog_t, rpcvers_t, rpcproc_t,
94173412Skevlo			char *, rpcblist_ptr);
95173412Skevlovoid *rpcbproc_getstat(void *, struct svc_req *, SVCXPRT *, rpcvers_t);
9674462Salfred
97173412Skevlovoid rpcb_service_3(struct svc_req *, SVCXPRT *);
98173412Skevlovoid rpcb_service_4(struct svc_req *, SVCXPRT *);
9974462Salfred
10074462Salfred/* Common functions shared between versions */
101173412Skevlovoid *rpcbproc_set_com(void *, struct svc_req *, SVCXPRT *, rpcvers_t);
102173412Skevlovoid *rpcbproc_unset_com(void *, struct svc_req *, SVCXPRT *, rpcvers_t);
103173412Skevlobool_t map_set(RPCB *, char *);
104173412Skevlobool_t map_unset(RPCB *, char *);
105173412Skevlovoid delete_prog(unsigned int);
106173412Skevlovoid *rpcbproc_getaddr_com(RPCB *, struct svc_req *, SVCXPRT *, rpcvers_t,
107173412Skevlo				 rpcvers_t);
108173412Skevlovoid *rpcbproc_gettime_com(void *, struct svc_req *, SVCXPRT *,
109173412Skevlo				rpcvers_t);
110173412Skevlovoid *rpcbproc_uaddr2taddr_com(void *, struct svc_req *,
111173412Skevlo					     SVCXPRT *, rpcvers_t);
112173412Skevlovoid *rpcbproc_taddr2uaddr_com(void *, struct svc_req *, SVCXPRT *,
113173412Skevlo				    rpcvers_t);
114173412Skevloint create_rmtcall_fd(struct netconfig *);
115173412Skevlovoid rpcbproc_callit_com(struct svc_req *, SVCXPRT *, rpcvers_t,
116173412Skevlo			      rpcvers_t);
117173412Skevlovoid my_svc_run(void);
11874462Salfred
119173412Skevlovoid rpcbind_abort(void);
120173412Skevlovoid reap(int);
121173412Skevlovoid toggle_verboselog(int);
12274462Salfred
123173412Skevloint check_access(SVCXPRT *, rpcproc_t, void *, unsigned int);
124173412Skevloint check_callit(SVCXPRT *, struct r_rmtcall_args *, int);
125173412Skevlovoid logit(int, struct sockaddr *, rpcproc_t, rpcprog_t, const char *);
126173412Skevloint is_loopback(struct netbuf *);
12774462Salfred
12874462Salfred#ifdef PORTMAP
129173412Skevloextern void pmap_service(struct svc_req *, SVCXPRT *);
13074462Salfred#endif
13174462Salfred
132173412Skevlovoid write_warmstart(void);
133173412Skevlovoid read_warmstart(void);
13474462Salfred
135173412Skevlochar *addrmerge(struct netbuf *caller, char *serv_uaddr, char *clnt_uaddr,
136173412Skevlo		     char *netid);
137203710Simpint listen_addr(const struct sockaddr *sa);
138173412Skevlovoid network_init(void);
139173412Skevlostruct sockaddr *local_sa(int);
14074462Salfred
14174462Salfred/* For different getaddr semantics */
14274462Salfred#define	RPCB_ALLVERS 0
14374462Salfred#define	RPCB_ONEVERS 1
14474462Salfred
145203710Simp/* To convert a struct sockaddr to IPv4 or IPv6 address */
146203710Simp#define	SA2SIN(sa)	((struct sockaddr_in *)(sa))
147203710Simp#define	SA2SINADDR(sa)	(SA2SIN(sa)->sin_addr)
148203710Simp#ifdef INET6
149203710Simp#define	SA2SIN6(sa)	((struct sockaddr_in6 *)(sa))
150203710Simp#define	SA2SIN6ADDR(sa)	(SA2SIN6(sa)->sin6_addr)
151203710Simp#endif
152203710Simp
15374462Salfred#endif /* rpcbind_h */
154