1*3b2bd0f6Slogwang /*- 2*3b2bd0f6Slogwang * Copyright 2005, Gleb Smirnoff <[email protected]> 3*3b2bd0f6Slogwang * All rights reserved. 4*3b2bd0f6Slogwang * 5*3b2bd0f6Slogwang * Redistribution and use in source and binary forms, with or without 6*3b2bd0f6Slogwang * modification, are permitted provided that the following conditions 7*3b2bd0f6Slogwang * are met: 8*3b2bd0f6Slogwang * 1. Redistributions of source code must retain the above copyright 9*3b2bd0f6Slogwang * notice, this list of conditions and the following disclaimer. 10*3b2bd0f6Slogwang * 2. Redistributions in binary form must reproduce the above copyright 11*3b2bd0f6Slogwang * notice, this list of conditions and the following disclaimer in the 12*3b2bd0f6Slogwang * documentation and/or other materials provided with the distribution. 13*3b2bd0f6Slogwang * 14*3b2bd0f6Slogwang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*3b2bd0f6Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*3b2bd0f6Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*3b2bd0f6Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*3b2bd0f6Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*3b2bd0f6Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*3b2bd0f6Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*3b2bd0f6Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*3b2bd0f6Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*3b2bd0f6Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*3b2bd0f6Slogwang * SUCH DAMAGE. 25*3b2bd0f6Slogwang * 26*3b2bd0f6Slogwang * $FreeBSD$ 27*3b2bd0f6Slogwang */ 28*3b2bd0f6Slogwang 29*3b2bd0f6Slogwang #define NG_NAT_NODE_TYPE "nat" 30*3b2bd0f6Slogwang #define NGM_NAT_COOKIE 1107718711 31*3b2bd0f6Slogwang 32*3b2bd0f6Slogwang #define NG_NAT_HOOK_IN "in" 33*3b2bd0f6Slogwang #define NG_NAT_HOOK_OUT "out" 34*3b2bd0f6Slogwang 35*3b2bd0f6Slogwang /* Arguments for NGM_NAT_SET_MODE message */ 36*3b2bd0f6Slogwang struct ng_nat_mode { 37*3b2bd0f6Slogwang uint32_t flags; 38*3b2bd0f6Slogwang uint32_t mask; 39*3b2bd0f6Slogwang }; 40*3b2bd0f6Slogwang 41*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 42*3b2bd0f6Slogwang #define NG_NAT_MODE_INFO { \ 43*3b2bd0f6Slogwang { "flags", &ng_parse_uint32_type }, \ 44*3b2bd0f6Slogwang { "mask", &ng_parse_uint32_type }, \ 45*3b2bd0f6Slogwang { NULL } \ 46*3b2bd0f6Slogwang } 47*3b2bd0f6Slogwang 48*3b2bd0f6Slogwang #define NG_NAT_LOG 0x01 49*3b2bd0f6Slogwang #define NG_NAT_DENY_INCOMING 0x02 50*3b2bd0f6Slogwang #define NG_NAT_SAME_PORTS 0x04 51*3b2bd0f6Slogwang #define NG_NAT_UNREGISTERED_ONLY 0x10 52*3b2bd0f6Slogwang #define NG_NAT_RESET_ON_ADDR_CHANGE 0x20 53*3b2bd0f6Slogwang #define NG_NAT_PROXY_ONLY 0x40 54*3b2bd0f6Slogwang #define NG_NAT_REVERSE 0x80 55*3b2bd0f6Slogwang 56*3b2bd0f6Slogwang #define NG_NAT_DESC_LENGTH 64 57*3b2bd0f6Slogwang #define NG_NAT_REDIRPROTO_ADDR (IPPROTO_MAX + 3) /* LibAlias' LINK_ADDR, also unused in in.h */ 58*3b2bd0f6Slogwang 59*3b2bd0f6Slogwang /* Arguments for NGM_NAT_REDIRECT_PORT message */ 60*3b2bd0f6Slogwang struct ng_nat_redirect_port { 61*3b2bd0f6Slogwang struct in_addr local_addr; 62*3b2bd0f6Slogwang struct in_addr alias_addr; 63*3b2bd0f6Slogwang struct in_addr remote_addr; 64*3b2bd0f6Slogwang uint16_t local_port; 65*3b2bd0f6Slogwang uint16_t alias_port; 66*3b2bd0f6Slogwang uint16_t remote_port; 67*3b2bd0f6Slogwang uint8_t proto; 68*3b2bd0f6Slogwang char description[NG_NAT_DESC_LENGTH]; 69*3b2bd0f6Slogwang }; 70*3b2bd0f6Slogwang 71*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 72*3b2bd0f6Slogwang #define NG_NAT_REDIRECT_PORT_TYPE_INFO(desctype) { \ 73*3b2bd0f6Slogwang { "local_addr", &ng_parse_ipaddr_type }, \ 74*3b2bd0f6Slogwang { "alias_addr", &ng_parse_ipaddr_type }, \ 75*3b2bd0f6Slogwang { "remote_addr", &ng_parse_ipaddr_type }, \ 76*3b2bd0f6Slogwang { "local_port", &ng_parse_uint16_type }, \ 77*3b2bd0f6Slogwang { "alias_port", &ng_parse_uint16_type }, \ 78*3b2bd0f6Slogwang { "remote_port", &ng_parse_uint16_type }, \ 79*3b2bd0f6Slogwang { "proto", &ng_parse_uint8_type }, \ 80*3b2bd0f6Slogwang { "description", (desctype) }, \ 81*3b2bd0f6Slogwang { NULL } \ 82*3b2bd0f6Slogwang } 83*3b2bd0f6Slogwang 84*3b2bd0f6Slogwang /* Arguments for NGM_NAT_REDIRECT_ADDR message */ 85*3b2bd0f6Slogwang struct ng_nat_redirect_addr { 86*3b2bd0f6Slogwang struct in_addr local_addr; 87*3b2bd0f6Slogwang struct in_addr alias_addr; 88*3b2bd0f6Slogwang char description[NG_NAT_DESC_LENGTH]; 89*3b2bd0f6Slogwang }; 90*3b2bd0f6Slogwang 91*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 92*3b2bd0f6Slogwang #define NG_NAT_REDIRECT_ADDR_TYPE_INFO(desctype) { \ 93*3b2bd0f6Slogwang { "local_addr", &ng_parse_ipaddr_type }, \ 94*3b2bd0f6Slogwang { "alias_addr", &ng_parse_ipaddr_type }, \ 95*3b2bd0f6Slogwang { "description", (desctype) }, \ 96*3b2bd0f6Slogwang { NULL } \ 97*3b2bd0f6Slogwang } 98*3b2bd0f6Slogwang 99*3b2bd0f6Slogwang /* Arguments for NGM_NAT_REDIRECT_PROTO message */ 100*3b2bd0f6Slogwang struct ng_nat_redirect_proto { 101*3b2bd0f6Slogwang struct in_addr local_addr; 102*3b2bd0f6Slogwang struct in_addr alias_addr; 103*3b2bd0f6Slogwang struct in_addr remote_addr; 104*3b2bd0f6Slogwang uint8_t proto; 105*3b2bd0f6Slogwang char description[NG_NAT_DESC_LENGTH]; 106*3b2bd0f6Slogwang }; 107*3b2bd0f6Slogwang 108*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 109*3b2bd0f6Slogwang #define NG_NAT_REDIRECT_PROTO_TYPE_INFO(desctype) { \ 110*3b2bd0f6Slogwang { "local_addr", &ng_parse_ipaddr_type }, \ 111*3b2bd0f6Slogwang { "alias_addr", &ng_parse_ipaddr_type }, \ 112*3b2bd0f6Slogwang { "remote_addr", &ng_parse_ipaddr_type }, \ 113*3b2bd0f6Slogwang { "proto", &ng_parse_uint8_type }, \ 114*3b2bd0f6Slogwang { "description", (desctype) }, \ 115*3b2bd0f6Slogwang { NULL } \ 116*3b2bd0f6Slogwang } 117*3b2bd0f6Slogwang 118*3b2bd0f6Slogwang /* Arguments for NGM_NAT_ADD_SERVER message */ 119*3b2bd0f6Slogwang struct ng_nat_add_server { 120*3b2bd0f6Slogwang uint32_t id; 121*3b2bd0f6Slogwang struct in_addr addr; 122*3b2bd0f6Slogwang uint16_t port; 123*3b2bd0f6Slogwang }; 124*3b2bd0f6Slogwang 125*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 126*3b2bd0f6Slogwang #define NG_NAT_ADD_SERVER_TYPE_INFO { \ 127*3b2bd0f6Slogwang { "id", &ng_parse_uint32_type }, \ 128*3b2bd0f6Slogwang { "addr", &ng_parse_ipaddr_type }, \ 129*3b2bd0f6Slogwang { "port", &ng_parse_uint16_type }, \ 130*3b2bd0f6Slogwang { NULL } \ 131*3b2bd0f6Slogwang } 132*3b2bd0f6Slogwang 133*3b2bd0f6Slogwang /* List entry of array returned in NGM_NAT_LIST_REDIRECTS message */ 134*3b2bd0f6Slogwang struct ng_nat_listrdrs_entry { 135*3b2bd0f6Slogwang uint32_t id; /* Anything except zero */ 136*3b2bd0f6Slogwang struct in_addr local_addr; 137*3b2bd0f6Slogwang struct in_addr alias_addr; 138*3b2bd0f6Slogwang struct in_addr remote_addr; 139*3b2bd0f6Slogwang uint16_t local_port; 140*3b2bd0f6Slogwang uint16_t alias_port; 141*3b2bd0f6Slogwang uint16_t remote_port; 142*3b2bd0f6Slogwang uint16_t proto; /* Valid proto or NG_NAT_REDIRPROTO_ADDR */ 143*3b2bd0f6Slogwang uint16_t lsnat; /* LSNAT servers count */ 144*3b2bd0f6Slogwang char description[NG_NAT_DESC_LENGTH]; 145*3b2bd0f6Slogwang }; 146*3b2bd0f6Slogwang 147*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 148*3b2bd0f6Slogwang #define NG_NAT_LISTRDRS_ENTRY_TYPE_INFO(desctype) { \ 149*3b2bd0f6Slogwang { "id", &ng_parse_uint32_type }, \ 150*3b2bd0f6Slogwang { "local_addr", &ng_parse_ipaddr_type }, \ 151*3b2bd0f6Slogwang { "alias_addr", &ng_parse_ipaddr_type }, \ 152*3b2bd0f6Slogwang { "remote_addr", &ng_parse_ipaddr_type }, \ 153*3b2bd0f6Slogwang { "local_port", &ng_parse_uint16_type }, \ 154*3b2bd0f6Slogwang { "alias_port", &ng_parse_uint16_type }, \ 155*3b2bd0f6Slogwang { "remote_port", &ng_parse_uint16_type }, \ 156*3b2bd0f6Slogwang { "proto", &ng_parse_uint16_type }, \ 157*3b2bd0f6Slogwang { "lsnat", &ng_parse_uint16_type }, \ 158*3b2bd0f6Slogwang { "description", (desctype) }, \ 159*3b2bd0f6Slogwang { NULL } \ 160*3b2bd0f6Slogwang } 161*3b2bd0f6Slogwang 162*3b2bd0f6Slogwang /* Structure returned by NGM_NAT_LIST_REDIRECTS */ 163*3b2bd0f6Slogwang struct ng_nat_list_redirects { 164*3b2bd0f6Slogwang uint32_t total_count; 165*3b2bd0f6Slogwang struct ng_nat_listrdrs_entry redirects[]; 166*3b2bd0f6Slogwang }; 167*3b2bd0f6Slogwang 168*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 169*3b2bd0f6Slogwang #define NG_NAT_LIST_REDIRECTS_TYPE_INFO(redirtype) { \ 170*3b2bd0f6Slogwang { "total_count", &ng_parse_uint32_type }, \ 171*3b2bd0f6Slogwang { "redirects", (redirtype) }, \ 172*3b2bd0f6Slogwang { NULL } \ 173*3b2bd0f6Slogwang } 174*3b2bd0f6Slogwang 175*3b2bd0f6Slogwang /* Structure returned by NGM_NAT_LIBALIAS_INFO */ 176*3b2bd0f6Slogwang struct ng_nat_libalias_info { 177*3b2bd0f6Slogwang uint32_t icmpLinkCount; 178*3b2bd0f6Slogwang uint32_t udpLinkCount; 179*3b2bd0f6Slogwang uint32_t tcpLinkCount; 180*3b2bd0f6Slogwang uint32_t sctpLinkCount; 181*3b2bd0f6Slogwang uint32_t pptpLinkCount; 182*3b2bd0f6Slogwang uint32_t protoLinkCount; 183*3b2bd0f6Slogwang uint32_t fragmentIdLinkCount; 184*3b2bd0f6Slogwang uint32_t fragmentPtrLinkCount; 185*3b2bd0f6Slogwang uint32_t sockCount; 186*3b2bd0f6Slogwang }; 187*3b2bd0f6Slogwang 188*3b2bd0f6Slogwang /* Keep this in sync with the above structure definition */ 189*3b2bd0f6Slogwang #define NG_NAT_LIBALIAS_INFO { \ 190*3b2bd0f6Slogwang { "icmpLinkCount", &ng_parse_uint32_type }, \ 191*3b2bd0f6Slogwang { "udpLinkCount", &ng_parse_uint32_type }, \ 192*3b2bd0f6Slogwang { "tcpLinkCount", &ng_parse_uint32_type }, \ 193*3b2bd0f6Slogwang { "sctpLinkCount", &ng_parse_uint32_type }, \ 194*3b2bd0f6Slogwang { "pptpLinkCount", &ng_parse_uint32_type }, \ 195*3b2bd0f6Slogwang { "protoLinkCount", &ng_parse_uint32_type }, \ 196*3b2bd0f6Slogwang { "fragmentIdLinkCount", &ng_parse_uint32_type }, \ 197*3b2bd0f6Slogwang { "fragmentPtrLinkCount", &ng_parse_uint32_type }, \ 198*3b2bd0f6Slogwang { "sockCount", &ng_parse_uint32_type }, \ 199*3b2bd0f6Slogwang { NULL } \ 200*3b2bd0f6Slogwang } 201*3b2bd0f6Slogwang 202*3b2bd0f6Slogwang enum { 203*3b2bd0f6Slogwang NGM_NAT_SET_IPADDR = 1, 204*3b2bd0f6Slogwang NGM_NAT_SET_MODE, 205*3b2bd0f6Slogwang NGM_NAT_SET_TARGET, 206*3b2bd0f6Slogwang NGM_NAT_REDIRECT_PORT, 207*3b2bd0f6Slogwang NGM_NAT_REDIRECT_ADDR, 208*3b2bd0f6Slogwang NGM_NAT_REDIRECT_PROTO, 209*3b2bd0f6Slogwang NGM_NAT_REDIRECT_DYNAMIC, 210*3b2bd0f6Slogwang NGM_NAT_REDIRECT_DELETE, 211*3b2bd0f6Slogwang NGM_NAT_ADD_SERVER, 212*3b2bd0f6Slogwang NGM_NAT_LIST_REDIRECTS, 213*3b2bd0f6Slogwang NGM_NAT_PROXY_RULE, 214*3b2bd0f6Slogwang NGM_NAT_LIBALIAS_INFO, 215*3b2bd0f6Slogwang }; 216