1*10946SSangeeta.Misra@Sun.COM /* 2*10946SSangeeta.Misra@Sun.COM * CDDL HEADER START 3*10946SSangeeta.Misra@Sun.COM * 4*10946SSangeeta.Misra@Sun.COM * The contents of this file are subject to the terms of the 5*10946SSangeeta.Misra@Sun.COM * Common Development and Distribution License (the "License"). 6*10946SSangeeta.Misra@Sun.COM * You may not use this file except in compliance with the License. 7*10946SSangeeta.Misra@Sun.COM * 8*10946SSangeeta.Misra@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*10946SSangeeta.Misra@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*10946SSangeeta.Misra@Sun.COM * See the License for the specific language governing permissions 11*10946SSangeeta.Misra@Sun.COM * and limitations under the License. 12*10946SSangeeta.Misra@Sun.COM * 13*10946SSangeeta.Misra@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*10946SSangeeta.Misra@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*10946SSangeeta.Misra@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*10946SSangeeta.Misra@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*10946SSangeeta.Misra@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*10946SSangeeta.Misra@Sun.COM * 19*10946SSangeeta.Misra@Sun.COM * CDDL HEADER END 20*10946SSangeeta.Misra@Sun.COM */ 21*10946SSangeeta.Misra@Sun.COM 22*10946SSangeeta.Misra@Sun.COM /* 23*10946SSangeeta.Misra@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24*10946SSangeeta.Misra@Sun.COM * Use is subject to license terms. 25*10946SSangeeta.Misra@Sun.COM */ 26*10946SSangeeta.Misra@Sun.COM 27*10946SSangeeta.Misra@Sun.COM #ifndef _INET_ILB_NAT_H 28*10946SSangeeta.Misra@Sun.COM #define _INET_ILB_NAT_H 29*10946SSangeeta.Misra@Sun.COM 30*10946SSangeeta.Misra@Sun.COM #include <sys/vmem.h> 31*10946SSangeeta.Misra@Sun.COM 32*10946SSangeeta.Misra@Sun.COM #ifdef __cplusplus 33*10946SSangeeta.Misra@Sun.COM extern "C" { 34*10946SSangeeta.Misra@Sun.COM #endif 35*10946SSangeeta.Misra@Sun.COM 36*10946SSangeeta.Misra@Sun.COM /* Maximum number of NAT source address of a rule. */ 37*10946SSangeeta.Misra@Sun.COM #define ILB_MAX_NAT_SRC 10 38*10946SSangeeta.Misra@Sun.COM 39*10946SSangeeta.Misra@Sun.COM /* NAT source address hash table. */ 40*10946SSangeeta.Misra@Sun.COM typedef struct ilb_nat_src_hash_s { 41*10946SSangeeta.Misra@Sun.COM list_t nsh_head; 42*10946SSangeeta.Misra@Sun.COM kmutex_t nsh_lock; 43*10946SSangeeta.Misra@Sun.COM char nsh_pad[64 - sizeof (list_t) - sizeof (kmutex_t)]; 44*10946SSangeeta.Misra@Sun.COM } ilb_nat_src_hash_t; 45*10946SSangeeta.Misra@Sun.COM 46*10946SSangeeta.Misra@Sun.COM /* 47*10946SSangeeta.Misra@Sun.COM * NAT source entry. Hold the port space for a source addr/back end server 48*10946SSangeeta.Misra@Sun.COM * pair. 49*10946SSangeeta.Misra@Sun.COM */ 50*10946SSangeeta.Misra@Sun.COM typedef struct ilb_nat_src_entry_s { 51*10946SSangeeta.Misra@Sun.COM in6_addr_t nse_src_addr; 52*10946SSangeeta.Misra@Sun.COM in6_addr_t nse_serv_addr; 53*10946SSangeeta.Misra@Sun.COM in_port_t nse_port; 54*10946SSangeeta.Misra@Sun.COM vmem_t *nse_port_arena; 55*10946SSangeeta.Misra@Sun.COM uint32_t nse_refcnt; 56*10946SSangeeta.Misra@Sun.COM kmutex_t *nse_nsh_lock; 57*10946SSangeeta.Misra@Sun.COM list_node_t nse_link; 58*10946SSangeeta.Misra@Sun.COM } ilb_nat_src_entry_t; 59*10946SSangeeta.Misra@Sun.COM 60*10946SSangeeta.Misra@Sun.COM /* Struct to hold all NAT source entry of a back end server. */ 61*10946SSangeeta.Misra@Sun.COM typedef struct ilb_nat_src_s { 62*10946SSangeeta.Misra@Sun.COM uint16_t cur; 63*10946SSangeeta.Misra@Sun.COM uint16_t num_src; 64*10946SSangeeta.Misra@Sun.COM ilb_nat_src_entry_t *src_list[ILB_MAX_NAT_SRC]; 65*10946SSangeeta.Misra@Sun.COM } ilb_nat_src_t; 66*10946SSangeeta.Misra@Sun.COM 67*10946SSangeeta.Misra@Sun.COM extern int ilb_create_nat_src(ilb_stack_t *ilbs, ilb_nat_src_t **, 68*10946SSangeeta.Misra@Sun.COM const in6_addr_t *, in_port_t, const in6_addr_t *, int); 69*10946SSangeeta.Misra@Sun.COM extern void ilb_destroy_nat_src(ilb_nat_src_t **); 70*10946SSangeeta.Misra@Sun.COM extern void ilb_nat_src_timer(void *); 71*10946SSangeeta.Misra@Sun.COM extern void ilb_nat_src_init(ilb_stack_t *); 72*10946SSangeeta.Misra@Sun.COM extern void ilb_nat_src_fini(ilb_stack_t *); 73*10946SSangeeta.Misra@Sun.COM 74*10946SSangeeta.Misra@Sun.COM extern ilb_nat_src_entry_t *ilb_alloc_nat_addr(ilb_nat_src_t *, in6_addr_t *, 75*10946SSangeeta.Misra@Sun.COM in_port_t *, uint16_t *); 76*10946SSangeeta.Misra@Sun.COM 77*10946SSangeeta.Misra@Sun.COM extern void ilb_full_nat(int, void *, int, void *, ilb_nat_info_t *, uint32_t, 78*10946SSangeeta.Misra@Sun.COM uint32_t, boolean_t); 79*10946SSangeeta.Misra@Sun.COM extern void ilb_half_nat(int, void *, int, void *, ilb_nat_info_t *, uint32_t, 80*10946SSangeeta.Misra@Sun.COM uint32_t, boolean_t); 81*10946SSangeeta.Misra@Sun.COM 82*10946SSangeeta.Misra@Sun.COM extern void ilb_nat_icmpv4(mblk_t *, ipha_t *, icmph_t *, ipha_t *, 83*10946SSangeeta.Misra@Sun.COM in_port_t *, in_port_t *, ilb_nat_info_t *, uint32_t, boolean_t); 84*10946SSangeeta.Misra@Sun.COM extern void ilb_nat_icmpv6(mblk_t *, ip6_t *, icmp6_t *, ip6_t *, 85*10946SSangeeta.Misra@Sun.COM in_port_t *, in_port_t *, ilb_nat_info_t *, boolean_t); 86*10946SSangeeta.Misra@Sun.COM 87*10946SSangeeta.Misra@Sun.COM extern uint32_t ilb_pseudo_sum_v6(ip6_t *, uint8_t); 88*10946SSangeeta.Misra@Sun.COM 89*10946SSangeeta.Misra@Sun.COM #ifdef __cplusplus 90*10946SSangeeta.Misra@Sun.COM } 91*10946SSangeeta.Misra@Sun.COM #endif 92*10946SSangeeta.Misra@Sun.COM 93*10946SSangeeta.Misra@Sun.COM #endif /* _INET_ILB_NAT_H */ 94