修改tfe_types.h,变更原stream.h中的地址类型定义。
* 为避免冲突,将layer_addr*系列名称改为tfe_stream_addr*系列名称 * 将原用指针实现的变长结构体改为用零字节数组实现。
This commit is contained in:
@@ -1,75 +1,75 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <netinet/in.h> //defines struct in_addr
|
||||
#include <netinet/in.h> //defines struct in_addr
|
||||
|
||||
/* network-order */
|
||||
struct stream_tuple4_v4{
|
||||
struct in_addr saddr; /* network order */
|
||||
struct in_addr daddr; /* network order */
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
struct tfe_stream_addr_tuple4_v4
|
||||
{
|
||||
struct in_addr saddr; /* network order */
|
||||
struct in_addr daddr; /* network order */
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
};
|
||||
|
||||
|
||||
#ifndef IPV6_ADDR_LEN
|
||||
#define IPV6_ADDR_LEN (sizeof(struct in6_addr))
|
||||
#define IPV6_ADDR_LEN (sizeof(struct in6_addr))
|
||||
#endif
|
||||
|
||||
struct stream_tuple4_v6
|
||||
struct tfe_stream_addr_tuple4_v6
|
||||
{
|
||||
struct in6_addr saddr;
|
||||
struct in6_addr daddr;
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
};
|
||||
|
||||
#define GRE_TAG_LEN (4)
|
||||
struct layer_addr_gre
|
||||
#define GRE_TAG_LEN (4)
|
||||
struct tfe_stream_addr_gre
|
||||
{
|
||||
uint16_t gre_id;
|
||||
};
|
||||
|
||||
#define VLAN_ID_MASK (0x0FFF)
|
||||
#define VLAN_TAG_LEN (4)
|
||||
struct layer_addr_vlan
|
||||
#define VLAN_ID_MASK (0x0FFF)
|
||||
#define VLAN_TAG_LEN (4)
|
||||
struct tfe_stream_addr_vlan
|
||||
{
|
||||
uint16_t vlan_id; /* network order */
|
||||
uint16_t vlan_id; /* network order */
|
||||
};
|
||||
|
||||
struct layer_addr_pppoe_session
|
||||
struct tfe_stream_addr_pppoe_session
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned int ver:4;
|
||||
unsigned int type:4;
|
||||
unsigned int ver:4;
|
||||
unsigned int type:4;
|
||||
#endif
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned int type:4;
|
||||
unsigned int ver:4;
|
||||
unsigned int type:4;
|
||||
unsigned int ver:4;
|
||||
#endif
|
||||
unsigned char code;
|
||||
unsigned char code;
|
||||
unsigned short session_id;
|
||||
};
|
||||
|
||||
#ifndef MAC_ADDR_LEN
|
||||
#define MAC_ADDR_LEN (6)
|
||||
#define MAC_ADDR_LEN (6)
|
||||
#endif
|
||||
|
||||
struct layer_addr_mac
|
||||
struct tfe_stream_addr_mac
|
||||
{
|
||||
uint8_t src_mac[MAC_ADDR_LEN]; /* network order */
|
||||
uint8_t dst_mac[MAC_ADDR_LEN]; /* network order */
|
||||
};
|
||||
|
||||
struct layer_addr_ipv4
|
||||
struct tfe_stream_addr_ipv4
|
||||
{
|
||||
struct in_addr saddr; /* network order */
|
||||
struct in_addr daddr; /* network order */
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
struct in_addr saddr; /* network order */
|
||||
struct in_addr daddr; /* network order */
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
};
|
||||
|
||||
struct layer_addr_ipv6
|
||||
struct tfe_stream_addr_ipv6
|
||||
{
|
||||
struct in6_addr saddr; /* network order */
|
||||
struct in6_addr daddr; /* network order */
|
||||
@@ -77,62 +77,64 @@ struct layer_addr_ipv6
|
||||
in_port_t dest;/* network order */
|
||||
};
|
||||
|
||||
struct layer_addr_tcp
|
||||
struct tfe_stream_addr_tcp
|
||||
{
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
};
|
||||
|
||||
struct layer_addr_udp
|
||||
struct tfe_stream_addr_udp
|
||||
{
|
||||
in_port_t source; /* network order */
|
||||
in_port_t dest; /* network order */
|
||||
};
|
||||
|
||||
struct layer_addr_l2tp
|
||||
struct tfe_stream_addr_l2tp
|
||||
{
|
||||
uint32_t tunnelid; /* network order */
|
||||
uint32_t sessionid; /* network order */
|
||||
};
|
||||
//地址类型定义
|
||||
enum addr_type_t{
|
||||
__ADDR_TYPE_INIT = 0,
|
||||
ADDR_TYPE_IPV4, /* 1, 基于IPv4地址的四元组信息 */
|
||||
ADDR_TYPE_IPV6, /* 2, 基于IPv6地址的四元组信息 */
|
||||
ADDR_TYPE_VLAN, /* 3 */
|
||||
ADDR_TYPE_MAC, /* 4 */
|
||||
ADDR_TYPE_ARP = 5, /* 5 */
|
||||
ADDR_TYPE_GRE, /* 6 */
|
||||
ADDR_TYPE_MPLS, /* 7 */
|
||||
ADDR_TYPE_PPPOE_SES, /* 8 */
|
||||
ADDR_TYPE_TCP, /* 9 */
|
||||
ADDR_TYPE_UDP = 10, /* 10 */
|
||||
ADDR_TYPE_L2TP, /* 11 */
|
||||
//ADDR_TYPE_STREAM_TUPLE4_V4, /* 12, 混合地址类型, 基于IPv4地址的四元组信息 */
|
||||
//ADDR_TYPE_STREAM_TUPLE4_V6, /* 13, 混合地址类型, 基于IPv6地址的四元组信息 */
|
||||
__ADDR_TYPE_IP_PAIR_V4, /* 14, 纯IPv4地址对 */
|
||||
__ADDR_TYPE_IP_PAIR_V6, /* 15, 纯IPv6地址对 */
|
||||
__ADDR_TYPE_MAX, /* 16 */
|
||||
|
||||
enum tfe_stream_addr_type
|
||||
{
|
||||
ADDR_TYPE_INIT = 0,
|
||||
/* 1, 基于IPv4地址的四元组信息 */
|
||||
ADDR_TYPE_IPV4,
|
||||
/* 2, 基于IPv6地址的四元组信息 */
|
||||
ADDR_TYPE_IPV6,
|
||||
ADDR_TYPE_VLAN,
|
||||
ADDR_TYPE_MAC,
|
||||
ADDR_TYPE_ARP = 5,
|
||||
ADDR_TYPE_GRE,
|
||||
ADDR_TYPE_MPLS,
|
||||
ADDR_TYPE_PPPOE_SES,
|
||||
ADDR_TYPE_TCP,
|
||||
ADDR_TYPE_UDP = 10,
|
||||
ADDR_TYPE_L2TP,
|
||||
/* 12, 混合地址类型, 基于IPv4地址的四元组信息 */
|
||||
ADDR_TYPE_STREAM_TUPLE4_V4,
|
||||
/* 13, 混合地址类型, 基于IPv6地址的四元组信息 */
|
||||
ADDR_TYPE_STREAM_TUPLE4_V6,
|
||||
};
|
||||
|
||||
struct layer_addr
|
||||
struct tfe_stream_addr
|
||||
{
|
||||
enum addr_type_t addrtype; /* 地址类型, 详见 enum addr_type_t */
|
||||
/* 为了方便应用插件取地址, 此处使用联合体, 省去指针类型强制转换步骤 */
|
||||
enum tfe_stream_addr_type addrtype;
|
||||
uint8_t addrlen; /* 地址结构长度 */
|
||||
|
||||
union
|
||||
{
|
||||
struct stream_tuple4_v4 *tuple4_v4;
|
||||
struct stream_tuple4_v6 *tuple4_v6;
|
||||
struct layer_addr_ipv4 *ipv4;
|
||||
struct layer_addr_ipv6 *ipv6;
|
||||
struct layer_addr_vlan *vlan;
|
||||
struct layer_addr_mac *mac;
|
||||
struct layer_addr_gre *gre;
|
||||
struct layer_addr_tcp *tcp;
|
||||
struct layer_addr_udp *udp;
|
||||
struct layer_addr_pppoe_session *pppoe_ses;
|
||||
struct layer_addr_l2tp *l2tp;
|
||||
void *paddr;
|
||||
struct tfe_stream_addr_tuple4_v4 tuple4_v4[0];
|
||||
struct tfe_stream_addr_tuple4_v6 tuple4_v6[0];
|
||||
struct tfe_stream_addr_ipv4 ipv4[0];
|
||||
struct tfe_stream_addr_ipv6 ipv6[0];
|
||||
struct tfe_stream_addr_vlan vlan[0];
|
||||
struct tfe_stream_addr_mac mac[0];
|
||||
struct tfe_stream_addr_gre gre[0];
|
||||
struct tfe_stream_addr_tcp tcp[0];
|
||||
struct tfe_stream_addr_udp udp[0];
|
||||
struct tfe_stream_addr_pppoe_session pppoe_ses[0];
|
||||
struct tfe_stream_addr_l2tp l2tp[0];
|
||||
unsigned char paddr[0];
|
||||
};
|
||||
uint8_t addrlen; /* 地址结构长度 */
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user