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
 42typedef __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 */
 49struct	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 */
 69struct 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
 77struct unpcb;
 78struct socket;
 79struct sockopt;
 80struct sockaddr;
 81
 82extern const struct pr_usrreqs unp_usrreqs;
 83
 84int	uipc_ctloutput(int, struct socket *, struct sockopt *);
 85void	uipc_init(void);
 86kmutex_t *uipc_dgramlock(void);
 87kmutex_t *uipc_streamlock(void);
 88kmutex_t *uipc_rawlock(void);
 89
 90int	unp_connect(struct socket *, struct sockaddr *, struct lwp *);
 91int	unp_connect2(struct socket *, struct socket *);
 92void 	unp_dispose(struct mbuf *);
 93int 	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_ */