修改tfe_types.h,变更原stream.h中的地址类型定义。

* 为避免冲突,将layer_addr*系列名称改为tfe_stream_addr*系列名称
* 将原用指针实现的变长结构体改为用零字节数组实现。
This commit is contained in:
Lu Qiuwen
2018-09-04 10:40:35 +08:00
parent 3adc052a3d
commit 65f4d79929

View File

@@ -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; /* 地址结构长度 */
};