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