xref: /netbsd/sys/sys/un.h (revision 09fbf839)
1 /*	$NetBSD: un.h,v 1.60 2021/08/08 20:54:49 nia Exp $	*/
2 
3 /*
4  * Copyright (c) 1982, 1986, 1993
5  *	The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *	@(#)un.h	8.3 (Berkeley) 2/19/95
32  */
33 
34 #ifndef _SYS_UN_H_
35 #define _SYS_UN_H_
36 
37 #include <sys/ansi.h>
38 #include <sys/featuretest.h>
39 #include <sys/types.h>
40 
41 #ifndef sa_family_t
42 typedef __sa_family_t	sa_family_t;
43 #define sa_family_t	__sa_family_t
44 #endif
45 
46 /*
47  * Definitions for UNIX IPC domain.
48  */
49 struct	sockaddr_un {
50 	uint8_t		sun_len;	/* total sockaddr length */
51 	sa_family_t	sun_family;	/* AF_LOCAL */
52 	char		sun_path[104];	/* path name (gag) */
53 };
54 
55 /*
56  * Socket options for UNIX IPC domain.
57  */
58 #if defined(_NETBSD_SOURCE)
59 #define SOL_LOCAL	0		/* options level for getsockopt(2) */
60 #define	LOCAL_OCREDS	0x0001		/* pass credentials to receiver */
61 #define	LOCAL_CONNWAIT	0x0002		/* connects block until accepted */
62 #define	LOCAL_PEEREID	0x0003		/* get peer identification */
63 #define	LOCAL_CREDS	0x0004		/* pass credentials to receiver */
64 #endif
65 
66 /*
67  * Data automatically stored inside connect() for use by LOCAL_PEEREID
68  */
69 struct unpcbid {
70 	pid_t unp_pid;		/* process id */
71 	uid_t unp_euid;		/* effective user id */
72 	gid_t unp_egid;		/* effective group id */
73 };
74 
75 #ifdef _KERNEL
76 
77 struct unpcb;
78 struct socket;
79 struct sockopt;
80 struct sockaddr;
81 
82 extern const struct pr_usrreqs unp_usrreqs;
83 
84 int	uipc_ctloutput(int, struct socket *, struct sockopt *);
85 void	uipc_init(void);
86 kmutex_t *uipc_dgramlock(void);
87 kmutex_t *uipc_streamlock(void);
88 kmutex_t *uipc_rawlock(void);
89 
90 int	unp_connect(struct socket *, struct sockaddr *, struct lwp *);
91 int	unp_connect2(struct socket *, struct socket *);
92 void 	unp_dispose(struct mbuf *);
93 int 	unp_externalize(struct mbuf *, struct lwp *, int);
94 
95 #else /* !_KERNEL */
96 
97 /* actual length of an initialized sockaddr_un */
98 #if defined(_NETBSD_SOURCE)
99 #define SUN_LEN(su) \
100 	(sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
101 #endif /* !_NetBSD_SOURCE */
102 #endif /* _KERNEL */
103 
104 #endif /* !_SYS_UN_H_ */
105