blob: 789f1520cd433c9f588bada0e7d1972f3cb6e851 [file] [log] [blame]
/*
* Copyright (c) 2012, The Linux Foundation. All rights reserved.
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifdef KVER32
#include <linux/kconfig.h>
#include <generated/autoconf.h>
#else
#include <linux/autoconf.h>
#endif
#include <linux/string.h>
#include "nat_helper.h"
#include "fal_init.h"
#include "fal_mirror.h"
#include "hsl_shared_api.h"
char hnat_log_en = HNAT_LOG_LEVEL_DISABLE;
char hnat_log_buffer[NAT_LOG_MAX_SIZE];
void hnat_log_msg(int level, char *string, ...)
{
va_list ptr;
if(level < hnat_log_en)
return;
memset(hnat_log_buffer, 0, sizeof(hnat_log_buffer));
va_start(ptr,string);
vsnprintf(hnat_log_buffer,sizeof(hnat_log_buffer), string, ptr);
va_end(ptr);
aos_printk("%s\n", hnat_log_buffer);
}
a_uint32_t nat_dev_id = 0;
static a_bool_t nat_mirror_status = A_FALSE;
static fal_port_t nat_mirror_port = 0;
sw_error_t
nat_helper_init(uint32_t dev_id, uint32_t portbmp)
{
if (fal_switch_devid_get(SSDK_CURRENT_CHIP_TYPE, &nat_dev_id) == SW_OK) {
/*Add egress port6 if GMAC1 is connected to port6 via SGMII*/
if(1 == nat_dev_id) {
fal_mirr_analysis_port_get(nat_dev_id, &nat_mirror_port);
fal_mirr_port_eg_get(nat_dev_id, 0, &nat_mirror_status);
fal_mirr_analysis_port_set(nat_dev_id, 6);
fal_mirr_port_eg_set(nat_dev_id, 0, A_TRUE);
}
aos_printk("nat helper module dev_id:%d\n", nat_dev_id);
} else {
return SW_FAIL;
}
nat_helper_bg_task_init();
host_helper_init(portbmp);
napt_helper_init();
nat_ipt_helper_init();
aos_printk("Hello, nat helper module for 1.2!\n");
return SW_OK;
}
sw_error_t
nat_helper_cleanup(uint32_t dev_id)
{
if(1 == nat_dev_id) {
fal_mirr_analysis_port_set(nat_dev_id, nat_mirror_port);
fal_mirr_port_eg_set(nat_dev_id, 0, nat_mirror_status);
}
host_helper_exit();
napt_helper_exit();
nat_ipt_helper_exit();
nat_helper_bg_task_exit();
aos_printk("Goodbye, nat helper module!\n");
return SW_OK;
}