4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright (c) 1990 Mentat Inc.
24 */
25
26 #ifndef _INET_TUNABLES_H
27 #define _INET_TUNABLES_H
28
29 #include <sys/types.h>
30 #include <net/if.h>
31 #ifdef _KERNEL
32 #include <sys/netstack.h>
33 #endif
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #define MAXPROPNAMELEN 64
40
41 /*
42 * The `mod_ioc_prop_s' datastructure is used as an IOCTL argument for
43 * SIOCSETPROP and SIOCGETPROP ioctls. This datastructure identifies the
71 #define MOD_PROP_APPEND 0x10 /* append to multi-valued property */
72 #define MOD_PROP_REMOVE 0x20 /* remove from multi-valued property */
73
74 /* mpr_proto values */
75 #define MOD_PROTO_NONE 0x00
76 #define MOD_PROTO_IPV4 0x01 /* property is applicable to IPV4 */
77 #define MOD_PROTO_IPV6 0x02 /* property is applicable to IPV6 */
78 #define MOD_PROTO_RAWIP 0x04 /* property is applicable to ICMP */
79 #define MOD_PROTO_TCP 0x08 /* property is applicable to TCP */
80 #define MOD_PROTO_UDP 0x10 /* property is applicable to UDP */
81 #define MOD_PROTO_SCTP 0x20 /* property is applicable to SCTP */
82
83 /* property is applicable to both IPV[4|6] */
84 #define MOD_PROTO_IP (MOD_PROTO_IPV4|MOD_PROTO_IPV6)
85
86 #ifdef _KERNEL
87
88 typedef struct mod_prop_info_s mod_prop_info_t;
89
90 /* set/get property callback functions */
91 typedef int mod_prop_setf_t(void *, cred_t *, mod_prop_info_t *,
92 const char *, const void *, uint_t);
93 typedef int mod_prop_getf_t(void *, mod_prop_info_t *, const char *,
94 void *val, uint_t, uint_t);
95
96 typedef struct mod_propval_uint32_s {
97 uint32_t mod_propval_umin;
98 uint32_t mod_propval_umax;
99 uint32_t mod_propval_ucur;
100 } mod_propval_uint32_t;
101
102 /*
103 * protocol property information
104 */
105 struct mod_prop_info_s {
106 char *mpi_name; /* property name */
107 uint_t mpi_proto; /* property protocol */
108 mod_prop_setf_t *mpi_setf; /* sets the property value */
109 mod_prop_getf_t *mpi_getf; /* gets the property value */
110 /*
111 * Holds the current value of the property. Whenever applicable
112 * holds the min/max value too.
113 */
114 union {
132 #define prop_cur_uval u.mpi_uval.mod_propval_ucur
133 #define prop_cur_bval u.mpi_bval
134 #define prop_def_uval u_def.mpi_def_uval
135 #define prop_def_bval u_def.mpi_def_bval
136
137 #define MS 1L
138 #define SECONDS (1000 * MS)
139 #define MINUTES (60 * SECONDS)
140 #define HOURS (60 * MINUTES)
141 #define DAYS (24 * HOURS)
142
143 #define MB (1024 * 1024)
144
145 /* Largest TCP/UDP/SCTP port number */
146 #define ULP_MAX_PORT (64 * 1024 - 1)
147
148 /* extra privilege ports for upper layer protocols, tcp, sctp and udp */
149 #define ULP_DEF_EPRIV_PORT1 2049
150 #define ULP_DEF_EPRIV_PORT2 4045
151
152 /* generic function to set/get global module properties */
153 extern mod_prop_setf_t mod_set_boolean, mod_set_uint32,
154 mod_set_aligned, mod_set_extra_privports;
155
156 extern mod_prop_getf_t mod_get_boolean, mod_get_uint32,
157 mod_get_allprop, mod_get_extra_privports;
158
159 extern int mod_uint32_value(const void *, mod_prop_info_t *, uint_t,
160 unsigned long *);
161
162 #endif /* _KERNEL */
163
164 /*
165 * End-system model definitions that include the weak/strong end-system
166 * definitions in RFC 1122, Section 3.3.4.5. IP_WEAK_ES and IP_STRONG_ES
167 * conform to the corresponding RFC 1122 definitions. The IP_SRC_PRI_ES
168 * hostmodel is similar to IP_WEAK_ES with one additional enhancement: for
169 * a packet with source S2, destination D2, the route selection algorithm
170 * will first attempt to find a route for the destination that goes out
171 * through an interface where S2 is configured and marked UP. If such
172 * a route cannot be found, then the best-matching route for D2 will be
173 * selected, ignoring any mismatches between S2 and the interface addresses
174 * on the outgoing interface implied by the route.
175 */
176 typedef enum {
177 IP_WEAK_ES = 0,
178 IP_SRC_PRI_ES,
179 IP_STRONG_ES,
180 IP_MAXVAL_ES
|
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright (c) 1990 Mentat Inc.
24 * Copyright (c) 2013 by Delphix. All rights reserved.
25 */
26
27 #ifndef _INET_TUNABLES_H
28 #define _INET_TUNABLES_H
29
30 #include <sys/types.h>
31 #include <net/if.h>
32 #ifdef _KERNEL
33 #include <sys/netstack.h>
34 #endif
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 #define MAXPROPNAMELEN 64
41
42 /*
43 * The `mod_ioc_prop_s' datastructure is used as an IOCTL argument for
44 * SIOCSETPROP and SIOCGETPROP ioctls. This datastructure identifies the
72 #define MOD_PROP_APPEND 0x10 /* append to multi-valued property */
73 #define MOD_PROP_REMOVE 0x20 /* remove from multi-valued property */
74
75 /* mpr_proto values */
76 #define MOD_PROTO_NONE 0x00
77 #define MOD_PROTO_IPV4 0x01 /* property is applicable to IPV4 */
78 #define MOD_PROTO_IPV6 0x02 /* property is applicable to IPV6 */
79 #define MOD_PROTO_RAWIP 0x04 /* property is applicable to ICMP */
80 #define MOD_PROTO_TCP 0x08 /* property is applicable to TCP */
81 #define MOD_PROTO_UDP 0x10 /* property is applicable to UDP */
82 #define MOD_PROTO_SCTP 0x20 /* property is applicable to SCTP */
83
84 /* property is applicable to both IPV[4|6] */
85 #define MOD_PROTO_IP (MOD_PROTO_IPV4|MOD_PROTO_IPV6)
86
87 #ifdef _KERNEL
88
89 typedef struct mod_prop_info_s mod_prop_info_t;
90
91 /* set/get property callback functions */
92 typedef int mod_prop_setf_t(netstack_t *, cred_t *, mod_prop_info_t *,
93 const char *, const void *, uint_t);
94 typedef int mod_prop_getf_t(netstack_t *, mod_prop_info_t *, const char *,
95 void *, uint_t, uint_t);
96
97 typedef struct mod_propval_uint32_s {
98 uint32_t mod_propval_umin;
99 uint32_t mod_propval_umax;
100 uint32_t mod_propval_ucur;
101 } mod_propval_uint32_t;
102
103 /*
104 * protocol property information
105 */
106 struct mod_prop_info_s {
107 char *mpi_name; /* property name */
108 uint_t mpi_proto; /* property protocol */
109 mod_prop_setf_t *mpi_setf; /* sets the property value */
110 mod_prop_getf_t *mpi_getf; /* gets the property value */
111 /*
112 * Holds the current value of the property. Whenever applicable
113 * holds the min/max value too.
114 */
115 union {
133 #define prop_cur_uval u.mpi_uval.mod_propval_ucur
134 #define prop_cur_bval u.mpi_bval
135 #define prop_def_uval u_def.mpi_def_uval
136 #define prop_def_bval u_def.mpi_def_bval
137
138 #define MS 1L
139 #define SECONDS (1000 * MS)
140 #define MINUTES (60 * SECONDS)
141 #define HOURS (60 * MINUTES)
142 #define DAYS (24 * HOURS)
143
144 #define MB (1024 * 1024)
145
146 /* Largest TCP/UDP/SCTP port number */
147 #define ULP_MAX_PORT (64 * 1024 - 1)
148
149 /* extra privilege ports for upper layer protocols, tcp, sctp and udp */
150 #define ULP_DEF_EPRIV_PORT1 2049
151 #define ULP_DEF_EPRIV_PORT2 4045
152
153 #define ULP_MAX_BUF (1<<30) /* Largest possible send/receive buffer */
154
155 /* generic function to set/get global module properties */
156 extern mod_prop_setf_t mod_set_boolean, mod_set_uint32,
157 mod_set_aligned, mod_set_extra_privports;
158
159 extern mod_prop_getf_t mod_get_boolean, mod_get_uint32,
160 mod_get_allprop, mod_get_extra_privports;
161
162 extern int mod_uint32_value(const void *, mod_prop_info_t *,
163 uint_t, unsigned long *);
164 extern mod_prop_info_t *mod_prop_lookup(mod_prop_info_t[], const char *,
165 uint_t);
166 extern int mod_set_buf_prop(mod_prop_info_t[], netstack_t *,
167 cred_t *cr, mod_prop_info_t *, const char *, const void *, uint_t);
168 extern int mod_get_buf_prop(mod_prop_info_t[], netstack_t *,
169 mod_prop_info_t *, const char *, void *, uint_t, uint_t);
170
171 #endif /* _KERNEL */
172
173 /*
174 * End-system model definitions that include the weak/strong end-system
175 * definitions in RFC 1122, Section 3.3.4.5. IP_WEAK_ES and IP_STRONG_ES
176 * conform to the corresponding RFC 1122 definitions. The IP_SRC_PRI_ES
177 * hostmodel is similar to IP_WEAK_ES with one additional enhancement: for
178 * a packet with source S2, destination D2, the route selection algorithm
179 * will first attempt to find a route for the destination that goes out
180 * through an interface where S2 is configured and marked UP. If such
181 * a route cannot be found, then the best-matching route for D2 will be
182 * selected, ignoring any mismatches between S2 and the interface addresses
183 * on the outgoing interface implied by the route.
184 */
185 typedef enum {
186 IP_WEAK_ES = 0,
187 IP_SRC_PRI_ES,
188 IP_STRONG_ES,
189 IP_MAXVAL_ES
|