]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/rpc/getnetconfig.c
bhnd(9): Fix a few mandoc related issues
[FreeBSD/FreeBSD.git] / sys / rpc / getnetconfig.c
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
5  * Authors: Doug Rabson <dfr@rabson.org>
6  * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29
30 #include "opt_inet6.h"
31
32 #include <sys/cdefs.h>
33 __FBSDID("$FreeBSD$");
34
35 #include <sys/param.h>
36 #include <sys/malloc.h>
37 #include <sys/systm.h>
38
39 #include <rpc/types.h>
40
41 /*
42  * For in-kernel use, we use a simple compiled-in configuration.
43  */
44
45 static struct netconfig netconfigs[] = {
46 #ifdef INET6
47         {
48                 .nc_netid =     "udp6",
49                 .nc_semantics = NC_TPI_CLTS,
50                 .nc_flag =      NC_VISIBLE,
51                 .nc_protofmly = "inet6",
52                 .nc_proto =     "udp",
53         },
54         {
55                 .nc_netid =     "tcp6",
56                 .nc_semantics = NC_TPI_COTS_ORD,
57                 .nc_flag =      NC_VISIBLE,
58                 .nc_protofmly = "inet6",
59                 .nc_proto =     "tcp",
60         },
61 #endif  
62         {
63                 .nc_netid =     "udp",
64                 .nc_semantics = NC_TPI_CLTS,
65                 .nc_flag =      NC_VISIBLE,
66                 .nc_protofmly = "inet",
67                 .nc_proto =     "udp",
68         },
69         {
70                 .nc_netid =     "tcp",
71                 .nc_semantics = NC_TPI_COTS_ORD,
72                 .nc_flag =      NC_VISIBLE,
73                 .nc_protofmly = "inet",
74                 .nc_proto =     "tcp",
75         },
76         {
77                 .nc_netid =     "local",
78                 .nc_semantics = NC_TPI_COTS_ORD,
79                 .nc_flag =      0,
80                 .nc_protofmly = "loopback",
81                 .nc_proto =     "",
82         },
83         {
84                 .nc_netid =     NULL,
85         }
86 };
87
88 void *
89 setnetconfig(void)
90 {
91         struct netconfig **nconfp;
92
93         nconfp = malloc(sizeof(struct netconfig *), M_RPC, M_WAITOK);
94         *nconfp = netconfigs;
95
96         return ((void *) nconfp);
97 }
98
99 struct netconfig *
100 getnetconfig(void *handle)
101 {
102         struct netconfig **nconfp = (struct netconfig **) handle;
103         struct netconfig *nconf;
104
105         nconf = *nconfp;
106         if (nconf->nc_netid == NULL)
107                 return (NULL);
108
109         (*nconfp)++;
110
111         return (nconf);
112 }
113
114 struct netconfig *
115 getnetconfigent(const char *netid)
116 {
117         struct netconfig *nconf;
118
119         for (nconf = netconfigs; nconf->nc_netid; nconf++) {
120                 if (!strcmp(netid, nconf->nc_netid))
121                         return (nconf);
122         }
123
124         return (NULL);
125 }
126
127 void
128 freenetconfigent(struct netconfig *nconf)
129 {
130
131 }
132
133 int
134 endnetconfig(void * handle)
135 {
136         struct netconfig **nconfp = (struct netconfig **) handle;
137
138         free(nconfp, M_RPC);
139         return (0);
140 }