xref: /netbsd-src/sys/sys/un.h (revision 33a7a9aa3e042d607dc50071f858c4edf1d48867)
1 /*	$NetBSD: un.h,v 1.61 2023/11/08 19:27:13 jschauma 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  * Historically, (struct sockaddr) needed to fit inside an mbuf.
48  * For this reason, UNIX domain sockets were therefore limited to
49  * 104 bytes. While this limit is no longer necessary, it is kept for
50  * binary compatibility reasons.
51  */
52 #define	SUNPATHLEN	104
53 
54 /*
55  * Definitions for UNIX IPC domain.
56  */
57 struct	sockaddr_un {
58 	uint8_t		sun_len;		/* total sockaddr length */
59 	sa_family_t	sun_family;		/* AF_LOCAL */
60 	char		sun_path[SUNPATHLEN];	/* path name (gag) */
61 };
62 
63 /*
64  * Socket options for UNIX IPC domain.
65  */
66 #if defined(_NETBSD_SOURCE)
67 #define SOL_LOCAL	0		/* options level for getsockopt(2) */
68 #define	LOCAL_OCREDS	0x0001		/* pass credentials to receiver */
69 #define	LOCAL_CONNWAIT	0x0002		/* connects block until accepted */
70 #define	LOCAL_PEEREID	0x0003		/* get peer identification */
71 #define	LOCAL_CREDS	0x0004		/* pass credentials to receiver */
72 #endif
73 
74 /*
75  * Data automatically stored inside connect() for use by LOCAL_PEEREID
76  */
77 struct unpcbid {
78 	pid_t unp_pid;		/* process id */
79 	uid_t unp_euid;		/* effective user id */
80 	gid_t unp_egid;		/* effective group id */
81 };
82 
83 #ifdef _KERNEL
84 
85 struct unpcb;
86 struct socket;
87 struct sockopt;
88 struct sockaddr;
89 
90 extern const struct pr_usrreqs unp_usrreqs;
91 
92 int	uipc_ctloutput(int, struct socket *, struct sockopt *);
93 void	uipc_init(void);
94 kmutex_t *uipc_dgramlock(void);
95 kmutex_t *uipc_streamlock(void);
96 kmutex_t *uipc_rawlock(void);
97 
98 int	unp_connect(struct socket *, struct sockaddr *, struct lwp *);
99 int	unp_connect2(struct socket *, struct socket *);
100 void 	unp_dispose(struct mbuf *);
101 int 	unp_externalize(struct mbuf *, struct lwp *, int);
102 
103 #else /* !_KERNEL */
104 
105 /* actual length of an initialized sockaddr_un */
106 #if defined(_NETBSD_SOURCE)
107 #define SUN_LEN(su) \
108 	(sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
109 #endif /* !_NetBSD_SOURCE */
110 #endif /* _KERNEL */
111 
112 #endif /* !_SYS_UN_H_ */
113