1
0
Files
kernel-49/ndm/hw_nat/hwnat_ioctl.h
2023-03-03 22:14:13 +07:00

154 lines
3.6 KiB
C

/*
Module Name:
hwnat_ioctl.h
Abstract:
Revision History:
Who When What
-------- ---------- ----------------------------------------------
Name Date Modification logs
Steven Liu 2006-10-06 Initial version
*/
#ifndef __HW_NAT_IOCTL_H__
#define __HW_NAT_IOCTL_H__
#define HW_NAT_DUMP_CACHE_ENTRY (0x02)
#define HW_NAT_DUMP_ENTRY (0x03)
#define HW_NAT_GET_ALL_ENTRIES (0x04)
#define HW_NAT_BIND_ENTRY (0x05)
#define HW_NAT_UNBIND_ENTRY (0x06)
#define HW_NAT_INVALID_ENTRY (0x07)
#define HW_NAT_DEBUG (0x08)
#define HW_NAT_MCAST_INS (0x20)
#define HW_NAT_MCAST_DEL (0x21)
#define HW_NAT_MCAST_DUMP (0x22)
#define HW_NAT_DROP_ENTRY (0x36)
#define HW_NAT_BIND_THRESHOLD (0x16)
#define HW_NAT_MAX_ENTRY_LMT (0x17)
#define HW_NAT_KA_INTERVAL (0x19)
#define HW_NAT_UB_LIFETIME (0x1A)
#define HW_NAT_BIND_LIFETIME (0x1B)
#define HW_NAT_BIND_DIRECTION (0x1C)
#define HW_NAT_VLAN_ID (0x1D)
#define HW_NAT_DEVNAME "hwnat0"
#define HW_NAT_MAJOR (220)
enum hwnat_status {
HWNAT_SUCCESS = 0,
HWNAT_FAIL = 1,
HWNAT_ENTRY_NOT_FOUND = 2
};
struct hwnat_tuple {
unsigned short hash_index;
unsigned char pkt_type;
/* egress layer2 */
unsigned char dmac[6];
unsigned char smac[6];
unsigned short vlan1;
unsigned short vlan2;
unsigned short pppoe_id;
/* ingress layer3 */
unsigned int ing_sipv4;
unsigned int ing_dipv4;
unsigned int ing_sipv6_0;
unsigned int ing_sipv6_1;
unsigned int ing_sipv6_2;
unsigned int ing_sipv6_3;
unsigned int ing_dipv6_0;
unsigned int ing_dipv6_1;
unsigned int ing_dipv6_2;
unsigned int ing_dipv6_3;
/* egress layer3 */
unsigned int eg_sipv4;
unsigned int eg_dipv4;
unsigned int eg_sipv6_0;
unsigned int eg_sipv6_1;
unsigned int eg_sipv6_2;
unsigned int eg_sipv6_3;
unsigned int eg_dipv6_0;
unsigned int eg_dipv6_1;
unsigned int eg_dipv6_2;
unsigned int eg_dipv6_3;
unsigned char prot;
// ingress layer4
unsigned short ing_sp;
unsigned short ing_dp;
// egress layer4
unsigned short eg_sp;
unsigned short eg_dp;
unsigned char ipv6_flowlabel;
enum hwnat_status result;
};
struct hwnat_args {
unsigned int debug:3;
unsigned int entry_state:2; /* invalid=0, unbind=1, bind=2, fin=3 */
enum hwnat_status result;
unsigned int entry_num:16;
unsigned int num_of_entries:16;
struct hwnat_tuple entries[0];
};
/* hnat config */
struct hwnat_config_args {
unsigned int bind_threshold:16;
unsigned int foe_full_lmt:16;
unsigned int foe_half_lmt:16;
unsigned int foe_qut_lmt:16;
unsigned int foe_tcp_ka:8; /* unit 1 sec */
unsigned int foe_udp_ka:8; /* unit 1 sec */
unsigned int foe_ntu_ka:8; /* unit 1 sec */
unsigned int foe_unb_dlta:8; /* unit 1 sec */
unsigned int foe_tcp_dlta:16; /* unit 1 sec */
unsigned int foe_udp_dlta:16; /* unit 1 sec */
unsigned int foe_fin_dlta:16; /* unit 1 sec */
unsigned int foe_ntu_dlta:16; /* unit 1 sec */
unsigned int wan_vid:16;
unsigned int lan_vid:16;
unsigned int bind_dir:2; /* 0=upstream, 1=downstream, 2=bi-direction */
enum hwnat_status result;
};
struct hwnat_mcast_args {
unsigned int mc_vid:16;
unsigned int mc_px_en:4;
unsigned int valid:1;
unsigned int rev2:3;
unsigned int mc_px_qos_en:4;
unsigned int mc_qos_qid:4;
unsigned char dst_mac[6];
};
#ifdef __KERNEL__
/*
* EXPORT FUNCTION
*/
int PpeRegIoctlHandler(void);
void PpeUnRegIoctlHandler(void);
int PpeSetBindThreshold(uint32_t threshold);
int PpeSetMaxEntryLimit(uint32_t full, uint32_t half, uint32_t qurt);
int PpeSetKaInterval(uint8_t tcp_ka, uint8_t udp_ka);
int PpeSetUnbindLifeTime(uint8_t lifetime);
int PpeSetBindLifetime(uint16_t tcp_fin, uint16_t udp_life, uint16_t fin_life);
#endif /* __KERNEL__ */
#endif