Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / domain.h @ 13

History | View | Annotate | Download (3.87 KB)

1 13 up20180614
/*        $NetBSD: domain.h,v 1.32 2015/04/22 19:46:08 roy 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
 *        @(#)domain.h        8.1 (Berkeley) 6/2/93
32
 */
33
34
#ifndef _SYS_DOMAIN_H_
35
#define _SYS_DOMAIN_H_
36
37
/*
38
 * Structure per communications domain.
39
 */
40
#include <sys/mbuf.h>
41
#include <sys/socket.h>
42
#include <net/route.h>
43
44
/*
45
 * Forward structure declarations for function prototypes [sic].
46
 */
47
struct        lwp;
48
struct        mbuf;
49
struct        ifnet;
50
struct        ifqueue;
51
struct  sockaddr;
52
53
LIST_HEAD(dom_rtlist, route);
54
55
struct        domain {
56
        int        dom_family;                /* AF_xxx */
57
        const char *dom_name;
58
        void        (*dom_init)                /* initialize domain data structures */
59
                        (void);
60
        int        (*dom_externalize)        /* externalize access rights */
61
                        (struct mbuf *, struct lwp *, int);
62
        void        (*dom_dispose)                /* dispose of internalized rights */
63
                        (struct mbuf *);
64
        const struct protosw *dom_protosw, *dom_protoswNPROTOSW;
65
        int        (*dom_rtattach)                /* initialize routing table */
66
                        (rtbl_t **, int);
67
        int        dom_rtoffset;                /* an arg to rtattach, in bits */
68
        int        dom_maxrtkey;                /* for routing layer */
69
        void        (*dom_if_up)                /* ifnet brought up */
70
                        (struct ifnet *);
71
        void        (*dom_if_down)                /* ifnet brought down */
72
                        (struct ifnet *);
73
        void        *(*dom_ifattach)        /* attach af-dependent data on ifnet */
74
                        (struct ifnet *);
75
        void        (*dom_ifdetach)                /* detach af-dependent data on ifnet */
76
                        (struct ifnet *, void *);
77
        void        (*dom_if_link_state_change)
78
                        (struct ifnet *, int);
79
        const void *(*dom_sockaddr_const_addr)(const struct sockaddr *,
80
                                               socklen_t *);
81
        void        *(*dom_sockaddr_addr)(struct sockaddr *, socklen_t *);
82
        int        (*dom_sockaddr_cmp)(const struct sockaddr *,
83
                                    const struct sockaddr *);
84
        struct sockaddr *(*dom_sockaddr_externalize)(struct sockaddr *,
85
                                                     socklen_t,
86
                                                     const struct sockaddr *);
87
        const struct sockaddr *dom_sa_any;
88
        struct ifqueue *dom_ifqueues[2]; /* ifqueue for domain */
89
        STAILQ_ENTRY(domain) dom_link;
90
        struct        mowner dom_mowner;
91
        uint_fast8_t        dom_sa_cmpofs;
92
        uint_fast8_t        dom_sa_cmplen;
93
        struct dom_rtlist dom_rtcache;
94
};
95
96
STAILQ_HEAD(domainhead,domain);
97
98
#ifdef _KERNEL
99
#define        DOMAIN_DEFINE(name)        \
100
        extern struct domain name; \
101
        __link_set_add_data(domains, name)
102
103
#define        DOMAIN_FOREACH(dom)        STAILQ_FOREACH(dom, &domains, dom_link)
104
extern struct domainhead domains;
105
void domain_attach(struct domain *);
106
void domaininit(bool);
107
#endif
108
109
#endif /* !_SYS_DOMAIN_H_ */