1 /*-
2 * Copyright (c) 2015 Yandex LLC
3 * Copyright (c) 2015 Alexander V. Chernikov <melifaro@FreeBSD.org>
4 * Copyright (c) 2016 Andrey V. Elsukov <ae@FreeBSD.org>
5 * 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 *
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 ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD: releng/12.0/sys/netinet6/ip_fw_nat64.h 304046 2016-08-13 16:09:49Z ae $
29 */
30
31 #ifndef _NETINET6_IP_FW_NAT64_H_
32 #define _NETINET6_IP_FW_NAT64_H_
33
34 struct ipfw_nat64stl_stats {
35 uint64_t opcnt64; /* 6to4 of packets translated */
36 uint64_t opcnt46; /* 4to6 of packets translated */
37 uint64_t ofrags; /* number of fragments generated */
38 uint64_t ifrags; /* number of fragments received */
39 uint64_t oerrors; /* number of output errors */
40 uint64_t noroute4;
41 uint64_t noroute6;
42 uint64_t noproto; /* Protocol not supported */
43 uint64_t nomem; /* mbuf allocation filed */
44 uint64_t dropped; /* dropped due to some errors */
45 };
46
47 struct ipfw_nat64lsn_stats {
48 uint64_t opcnt64; /* 6to4 of packets translated */
49 uint64_t opcnt46; /* 4to6 of packets translated */
50 uint64_t ofrags; /* number of fragments generated */
51 uint64_t ifrags; /* number of fragments received */
52 uint64_t oerrors; /* number of output errors */
53 uint64_t noroute4;
54 uint64_t noroute6;
55 uint64_t noproto; /* Protocol not supported */
56 uint64_t nomem; /* mbuf allocation filed */
57 uint64_t dropped; /* dropped due to some errors */
58
59 uint64_t nomatch4; /* No addr/port match */
60 uint64_t jcalls; /* Number of job handler calls */
61 uint64_t jrequests; /* Number of job requests */
62 uint64_t jhostsreq; /* Number of job host requests */
63 uint64_t jportreq; /* Number of portgroup requests */
64 uint64_t jhostfails; /* Number of failed host allocs */
65 uint64_t jportfails; /* Number of failed portgroup allocs */
66 uint64_t jreinjected; /* Number of packets reinjected to q */
67 uint64_t jmaxlen; /* Max queue length reached */
68 uint64_t jnomem; /* No memory to alloc queue item */
69
70 uint64_t screated; /* Number of states created */
71 uint64_t sdeleted; /* Number of states deleted */
72 uint64_t spgcreated; /* Number of portgroups created */
73 uint64_t spgdeleted; /* Number of portgroups deleted */
74 uint64_t hostcount; /* Number of hosts */
75 uint64_t tcpchunks; /* Number of TCP chunks */
76 uint64_t udpchunks; /* Number of UDP chunks */
77 uint64_t icmpchunks; /* Number of ICMP chunks */
78
79 uint64_t _reserved[4];
80 };
81
82 #define NAT64_LOG 0x0001 /* Enable logging via BPF */
83
84 typedef struct _ipfw_nat64stl_cfg {
85 char name[64]; /* NAT name */
86 ipfw_obj_ntlv ntlv6; /* object name tlv */
87 ipfw_obj_ntlv ntlv4; /* object name tlv */
88 struct in6_addr prefix6; /* NAT64 prefix */
89 uint8_t plen6; /* Prefix length */
90 uint8_t set; /* Named instance set [0..31] */
91 uint8_t spare[2];
92 uint32_t flags;
93 } ipfw_nat64stl_cfg;
94
95 /*
96 * NAT64LSN default configuration values
97 */
98 #define NAT64LSN_MAX_PORTS 2048 /* Max number of ports per host */
99 #define NAT64LSN_JMAXLEN 2048 /* Max outstanding requests. */
100 #define NAT64LSN_TCP_SYN_AGE 10 /* State's TTL after SYN received. */
101 #define NAT64LSN_TCP_EST_AGE (2 * 3600) /* TTL for established connection */
102 #define NAT64LSN_TCP_FIN_AGE 180 /* State's TTL after FIN/RST received */
103 #define NAT64LSN_UDP_AGE 120 /* TTL for UDP states */
104 #define NAT64LSN_ICMP_AGE 60 /* TTL for ICMP states */
105 #define NAT64LSN_HOST_AGE 3600 /* TTL for stale host entry */
106 #define NAT64LSN_PG_AGE 900 /* TTL for stale ports groups */
107
108 typedef struct _ipfw_nat64lsn_cfg {
109 char name[64]; /* NAT name */
110 uint32_t flags;
111 uint32_t max_ports; /* Max ports per client */
112 uint32_t agg_prefix_len; /* Prefix length to count */
113 uint32_t agg_prefix_max; /* Max hosts per agg prefix */
114 struct in_addr prefix4;
115 uint16_t plen4; /* Prefix length */
116 uint16_t plen6; /* Prefix length */
117 struct in6_addr prefix6; /* NAT64 prefix */
118 uint32_t jmaxlen; /* Max jobqueue length */
119 uint16_t min_port; /* Min port group # to use */
120 uint16_t max_port; /* Max port group # to use */
121 uint16_t nh_delete_delay;/* Stale host delete delay */
122 uint16_t pg_delete_delay;/* Stale portgroup delete delay */
123 uint16_t st_syn_ttl; /* TCP syn expire */
124 uint16_t st_close_ttl; /* TCP fin expire */
125 uint16_t st_estab_ttl; /* TCP established expire */
126 uint16_t st_udp_ttl; /* UDP expire */
127 uint16_t st_icmp_ttl; /* ICMP expire */
128 uint8_t set; /* Named instance set [0..31] */
129 uint8_t spare;
130 } ipfw_nat64lsn_cfg;
131
132 typedef struct _ipfw_nat64lsn_state {
133 struct in_addr daddr; /* Remote IPv4 address */
134 uint16_t dport; /* Remote destination port */
135 uint16_t aport; /* Local alias port */
136 uint16_t sport; /* Source port */
137 uint8_t flags; /* State flags */
138 uint8_t spare[3];
139 uint16_t idle; /* Last used time */
140 } ipfw_nat64lsn_state;
141
142 typedef struct _ipfw_nat64lsn_stg {
143 uint64_t next_idx; /* next state index */
144 struct in_addr alias4; /* IPv4 alias address */
145 uint8_t proto; /* protocol */
146 uint8_t flags;
147 uint16_t spare;
148 struct in6_addr host6; /* Bound IPv6 host */
149 uint32_t count; /* Number of states */
150 uint32_t spare2;
151 } ipfw_nat64lsn_stg;
152
153 #endif /* _NETINET6_IP_FW_NAT64_H_ */
154
Cache object: 97306a7f708d13566f69ff9e62b385fa
|