1/* 2 * Copyright (c) 2012, 2015, The Linux Foundation. All rights reserved. 3 * Permission to use, copy, modify, and/or distribute this software for 4 * any purpose with or without fee is hereby granted, provided that the 5 * above copyright notice and this permission notice appear in all copies. 6 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 7 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 8 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 9 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 10 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 11 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 12 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 13 */ 14 15 16#ifndef _NAT_HELPER_HSL_H 17#define _NAT_HELPER_HSL_H 18 19#ifdef KVER32 20#include <linux/kconfig.h> 21#include <generated/autoconf.h> 22#else 23#include <linux/autoconf.h> 24#endif 25 26#include <linux/if_ether.h> 27#include "fal_nat.h" 28 29 30#define NAT_HW_NUM 32 31#define NAT_HW_PORT_RANGE_MAX 255 32 33#define FAL_NAT_ENTRY_PROTOCOL_TCP 0x1 34#define FAL_NAT_ENTRY_PROTOCOL_UDP 0x2 35#define FAL_NAT_ENTRY_PROTOCOL_PPTP 0x4 36#define FAL_NAT_ENTRY_PROTOCOL_ANY 0x8 37#define FAL_NAT_ENTRY_PORT_CHECK 0x20 38 39#define MAX_INTF_NUM 4 40 41/* WAN connection types */ 42#define NF_S17_WAN_TYPE_IP 0 /* DHCP, static IP connection */ 43#define NF_S17_WAN_TYPE_PPPOE 1 /* PPPoE connection */ 44#define NF_S17_WAN_TYPE_GRE 2 /* GRE connections, ex: PPTP */ 45#define NF_S17_WAN_TYPE_PPPOEV6 3 /* IPv6 PPPoE connection using the same session as IPv4 connection */ 46#define NF_S17_WAN_TYPE_PPPOES0 4 /* PPPoE connection but not yet connected */ 47/* define the H/W Age mode for NAPT entries */ 48#define ARP_AGE_NEVER 7 49#define ARP_AGE 6 50 51extern int nf_athrs17_hnat; 52extern int nf_athrs17_hnat_wan_type; 53extern int nf_athrs17_hnat_ppp_id; 54extern int nf_athrs17_hnat_udp_thresh; 55extern a_uint32_t nf_athrs17_hnat_wan_ip; 56extern a_uint32_t nf_athrs17_hnat_ppp_peer_ip; 57extern unsigned char nf_athrs17_hnat_ppp_peer_mac[ETH_ALEN]; 58extern unsigned char nf_athrs17_hnat_wan_mac[ETH_ALEN]; 59extern int nf_athrs17_hnat_sync_counter_en; 60 61extern int nf_athrs17_hnat_ppp_id2; 62extern unsigned char nf_athrs17_hnat_ppp_peer_mac2[ETH_ALEN]; 63 64typedef struct 65{ 66 a_uint32_t entry_id; 67 a_uint32_t flags; 68 a_uint32_t src_addr; 69 a_uint32_t trans_addr; 70 a_uint16_t port_num; 71 a_uint16_t port_range; 72} nat_entry_t; 73 74typedef struct 75{ 76 a_uint32_t entry_id; 77 a_uint32_t flags; 78 a_uint32_t status; 79 a_uint32_t src_addr; 80 a_uint32_t dst_addr; 81 a_uint16_t src_port; 82 a_uint16_t dst_port; 83 a_uint32_t trans_addr; 84 a_uint16_t trans_port; 85 a_uint32_t ingress_packet; 86 a_uint32_t ingress_byte; 87 a_uint32_t egress_packet; 88 a_uint32_t egress_byte; 89} napt_entry_t; 90 91#if defined (__BIG_ENDIAN) 92typedef struct 93{ 94 a_uint16_t ver:2; 95 a_uint16_t pri:3; 96 a_uint16_t type:5; 97 a_uint16_t rev:2; 98 a_uint16_t with_tag:1; 99 a_uint16_t sport:3; 100 a_uint16_t vid; 101 a_uint16_t magic; 102} aos_header_t; 103#elif defined (__LITTLE_ENDIAN) 104typedef struct 105{ 106 a_uint16_t vid; 107 a_uint16_t sport:3; 108 a_uint16_t with_tag:1; 109 a_uint16_t rev:2; 110 a_uint16_t type:5; 111 a_uint16_t pri:3; 112 a_uint16_t ver:2; 113} aos_header_t; 114#else 115#error "no ENDIAN" 116#endif 117 118a_int32_t 119nat_hw_add(nat_entry_t *nat); 120a_int32_t 121nat_hw_del_by_index(a_uint32_t index); 122a_int32_t 123nat_hw_flush(void); 124a_int32_t 125napt_hw_flush(void); 126a_int32_t 127nat_hw_prv_base_can_update(void); 128void 129nat_hw_prv_base_update_enable(void); 130void 131nat_hw_prv_base_update_disable(void); 132a_int32_t 133nat_hw_prv_base_set(a_uint32_t ip); 134a_uint32_t 135nat_hw_prv_base_get(void); 136a_int32_t 137nat_hw_prv_mask_set(a_uint32_t ipmask); 138a_uint32_t 139nat_hw_prv_mask_get(void); 140a_int32_t 141nat_hw_prv_base_is_match(a_uint32_t ip); 142a_int32_t 143if_mac_add(uint8_t *mac, uint32_t vid, uint32_t ipv6); 144a_int32_t 145arp_hw_add(a_uint32_t port, a_uint32_t intf_id, a_uint8_t *ip, a_uint8_t *mac, int is_ipv6_entry); 146a_int32_t 147arp_if_info_get(void *data, a_uint32_t *sport, a_uint32_t *vid); 148a_int32_t 149nat_hw_pub_ip_add(a_uint32_t ip, a_uint32_t *index); 150void 151napt_hw_mode_init(void); 152void 153napt_hw_mode_cleanup(void); 154a_int32_t 155nat_hw_pub_ip_del(a_uint32_t index); 156a_int32_t 157napt_hw_add(napt_entry_t *napt_entry); 158a_int32_t 159napt_hw_get(napt_entry_t *napt, fal_napt_entry_t *entry); 160a_int32_t 161napt_hw_dnat_cookie_add(napt_entry_t *napt, a_uint32_t cookie); 162a_int32_t 163napt_hw_snat_cookie_add(napt_entry_t *napt, a_uint32_t cookie); 164a_int32_t 165napt_hw_del(napt_entry_t *napt_entry); 166a_int32_t 167napt_hw_first_by_age(napt_entry_t *napt, a_uint32_t age); 168a_int32_t 169napt_hw_next_by_age(napt_entry_t *napt, a_uint32_t age); 170a_int32_t 171napt_hw_get_by_index(napt_entry_t *napt, a_uint16_t hw_index); 172a_uint32_t 173napt_hw_used_count_get(void); 174 175sw_error_t napt_l3_status_set(a_uint32_t dev_id, a_bool_t enable); 176sw_error_t napt_l3_status_get(a_uint32_t dev_id, a_bool_t * enable); 177 178sw_error_t napt_helper_hsl_init(void); 179 180 181#endif /*_NAT_HELPER_HSL_H*/ 182 183