1139825Simp/*-
21541Srgrimes * Copyright (c) 1982, 1986, 1993
31541Srgrimes *	The Regents of the University of California.  All rights reserved.
41541Srgrimes *
51541Srgrimes * Redistribution and use in source and binary forms, with or without
61541Srgrimes * modification, are permitted provided that the following conditions
71541Srgrimes * are met:
81541Srgrimes * 1. Redistributions of source code must retain the above copyright
91541Srgrimes *    notice, this list of conditions and the following disclaimer.
101541Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
111541Srgrimes *    notice, this list of conditions and the following disclaimer in the
121541Srgrimes *    documentation and/or other materials provided with the distribution.
131541Srgrimes * 4. Neither the name of the University nor the names of its contributors
141541Srgrimes *    may be used to endorse or promote products derived from this software
151541Srgrimes *    without specific prior written permission.
161541Srgrimes *
171541Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
181541Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
191541Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
201541Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
211541Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
221541Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
231541Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
241541Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
251541Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
261541Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
271541Srgrimes * SUCH DAMAGE.
281541Srgrimes *
291541Srgrimes *	@(#)domain.h	8.1 (Berkeley) 6/2/93
3050477Speter * $FreeBSD$
311541Srgrimes */
321541Srgrimes
332165Spaul#ifndef _SYS_DOMAIN_H_
342165Spaul#define _SYS_DOMAIN_H_
352165Spaul
361541Srgrimes/*
371541Srgrimes * Structure per communications domain.
381541Srgrimes */
391541Srgrimes
401541Srgrimes/*
411541Srgrimes * Forward structure declarations for function prototypes [sic].
421541Srgrimes */
431541Srgrimesstruct	mbuf;
44121161Sumestruct	ifnet;
45305261Smarkjstruct	socket;
461541Srgrimes
4783045Sobrienstruct domain {
481541Srgrimes	int	dom_family;		/* AF_xxx */
491541Srgrimes	char	*dom_name;
501541Srgrimes	void	(*dom_init)		/* initialize domain data structures */
5192719Salfred		(void);
52193731Szec	void	(*dom_destroy)		/* cleanup structures / state */
53193731Szec		(void);
541541Srgrimes	int	(*dom_externalize)	/* externalize access rights */
55248534Sjilles		(struct mbuf *, struct mbuf **, int);
5612453Sbde	void	(*dom_dispose)		/* dispose of internalized rights */
5792719Salfred		(struct mbuf *);
581541Srgrimes	struct	protosw *dom_protosw, *dom_protoswNPROTOSW;
591541Srgrimes	struct	domain *dom_next;
601541Srgrimes	int	(*dom_rtattach)		/* initialize routing table */
6192719Salfred		(void **, int);
62193731Szec	int	(*dom_rtdetach)		/* clean up routing table */
63193731Szec		(void **, int);
641541Srgrimes	int	dom_rtoffset;		/* an arg to rtattach, in bits */
65178888Sjulian		/* XXX MRT.
66178888Sjulian		 * rtoffset May be 0 if the domain supplies its own rtattach(),
67178888Sjulian		 * in which case, a 0 indicates it's being called from
68178888Sjulian		 * vfs_export.c (HACK)  Only for AF_INET{,6} at this time.
69178888Sjulian		 * Temporary ABI compat hack.. fix post RELENG_7
70178888Sjulian		 */
711541Srgrimes	int	dom_maxrtkey;		/* for routing layer */
72121161Sume	void	*(*dom_ifattach)(struct ifnet *);
73121161Sume	void	(*dom_ifdetach)(struct ifnet *, void *);
74121161Sume					/* af-dependent data on ifnet */
751541Srgrimes};
761541Srgrimes
7755205Speter#ifdef _KERNEL
78138239Smlaierextern int	domain_init_status;
798426Swollmanextern struct	domain *domains;
80195837Srwatsonvoid		domain_add(void *);
81195837Srwatsonvoid		domain_init(void *);
82305261Smarkj
83305261Smarkj/* Hack to fix dom_dispose for unix domain sockets. */
84305261Smarkjvoid		unp_dispose_so(struct socket *);
85195837Srwatson#ifdef VIMAGE
86195837Srwatsonvoid		vnet_domain_init(void *);
87195837Srwatsonvoid		vnet_domain_uninit(void *);
88195837Srwatson#endif
898426Swollman
90195837Srwatson#define	DOMAIN_SET(name)						\
91195837Srwatson	SYSINIT(domain_add_ ## name, SI_SUB_PROTO_DOMAIN,		\
92195837Srwatson	    SI_ORDER_FIRST, domain_add, & name ## domain);		\
93195837Srwatson	SYSINIT(domain_init_ ## name, SI_SUB_PROTO_DOMAIN,		\
94195837Srwatson	    SI_ORDER_SECOND, domain_init, & name ## domain);
95195837Srwatson#ifdef VIMAGE
96195837Srwatson#define	VNET_DOMAIN_SET(name)						\
97195837Srwatson	SYSINIT(domain_add_ ## name, SI_SUB_PROTO_DOMAIN,		\
98195837Srwatson	    SI_ORDER_FIRST, domain_add, & name ## domain);		\
99195837Srwatson	VNET_SYSINIT(vnet_domain_init_ ## name, SI_SUB_PROTO_DOMAIN,	\
100195837Srwatson	    SI_ORDER_SECOND, vnet_domain_init, & name ## domain);	\
101195837Srwatson	VNET_SYSUNINIT(vnet_domain_uninit_ ## name,			\
102195837Srwatson	    SI_SUB_PROTO_DOMAIN, SI_ORDER_SECOND, vnet_domain_uninit,	\
103195837Srwatson	    & name ## domain)
104195837Srwatson#else /* !VIMAGE */
105195837Srwatson#define	VNET_DOMAIN_SET(name)	DOMAIN_SET(name)
106195837Srwatson#endif /* VIMAGE */
1078426Swollman
108195837Srwatson#endif /* _KERNEL */
1092165Spaul
110195837Srwatson#endif /* !_SYS_DOMAIN_H_ */
111