* 增加 ETH_VLAN_VLAN_IP4_IP4_UDP 的测试用例
* 增加 ETH_IP6_IP4_TCP_SSH 的测试用例
* 增加 ETH_IP4_IP6_TCP 的测试用例
* 增加 ETH_IP6_IP6_UDP 的测试用例
* 增加 ETH_MPLS_IP4_TCP 的测试用例
* 增加 ETH_MPLS_MPLS_IP4_TCP 的测试用例
* 增加 ETH_VLAN_PPPOE_IP4_TCP 的测试用例
* 增加 ETH_IP6_UDP_GTP_IP6_TCP_TLS 的测试用例
* 增加 ETH_IP6_UDP_GTP_IP4_TCP_TLS 的测试用例
* 增加 ETH_IP4_UDP_VXLAN_ETH_IP4_UDP_DNS 的测试用例
* 增加 ETH_MPLS_MPLS_PWETHCW_ETH_ARP 的测试用例
* 增加 ETH_MPLS_MPLS_PWETHCW_ETH_ARP 的测试用例
80 lines
2.3 KiB
C
80 lines
2.3 KiB
C
#ifndef _RAW_PACKET_H
|
|
#define _RAW_PACKET_H
|
|
|
|
#ifdef __cpluscplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
enum layer_type
|
|
{
|
|
// 数据链路层
|
|
LAYER_TYPE_ETHER = 1 << 0,
|
|
LAYER_TYPE_PPP = 1 << 1,
|
|
LAYER_TYPE_HDLC = 1 << 2,
|
|
LAYER_TYPE_L2 = (LAYER_TYPE_ETHER | LAYER_TYPE_PPP | LAYER_TYPE_HDLC),
|
|
|
|
// 数据链路层 -- 隧道
|
|
LAYER_TYPE_VLAN = 1 << 3,
|
|
LAYER_TYPE_PPPOE = 1 << 4,
|
|
LAYER_TYPE_MPLS = 1 << 5,
|
|
LAYER_TYPE_L2_TUN = (LAYER_TYPE_VLAN | LAYER_TYPE_PPPOE | LAYER_TYPE_MPLS),
|
|
|
|
// 网络层
|
|
LAYER_TYPE_IPV4 = 1 << 6,
|
|
LAYER_TYPE_IPV6 = 1 << 7,
|
|
LAYER_TYPE_L3 = (LAYER_TYPE_IPV4 | LAYER_TYPE_IPV6),
|
|
|
|
// 网络层 -- 隧道
|
|
|
|
// 传输层
|
|
LAYER_TYPE_UDP = 1 << 8,
|
|
LAYER_TYPE_TCP = 1 << 9,
|
|
LAYER_TYPE_L4 = (LAYER_TYPE_UDP | LAYER_TYPE_TCP),
|
|
|
|
// 传输层 -- 隧道
|
|
LAYER_TYPE_G_VXLAN = 1 << 10,
|
|
LAYER_TYPE_GTPV1_U = 1 << 11,
|
|
|
|
// ALL
|
|
LAYER_TYPE_ALL = (LAYER_TYPE_L2 | LAYER_TYPE_L2_TUN | LAYER_TYPE_L3 | LAYER_TYPE_L4 | LAYER_TYPE_G_VXLAN | LAYER_TYPE_GTPV1_U),
|
|
|
|
// UNKNOWN
|
|
LAYER_TYPE_UNKNOWN,
|
|
};
|
|
|
|
enum parse_status
|
|
{
|
|
PARSE_STATUS_CONTINUE,
|
|
PARSE_STATUS_STOP
|
|
};
|
|
|
|
struct raw_pkt_parser;
|
|
|
|
struct raw_pkt_parser *raw_packet_parser_create(enum layer_type expect_type, uint16_t expect_results_num);
|
|
void raw_packet_parser_destory(struct raw_pkt_parser *handler);
|
|
|
|
// return 0 : success
|
|
// return -ENOMEM : error
|
|
int raw_packet_parser_push(struct raw_pkt_parser *handler, enum layer_type type, uint16_t offset);
|
|
// return PARSE_STATUS_CONTINUE
|
|
// return PARSE_STATUS_STOP
|
|
enum parse_status raw_packet_parser_status(struct raw_pkt_parser *handler, const void *data, enum layer_type this_type);
|
|
// return most inner payload
|
|
const void *raw_packet_parser_parse(struct raw_pkt_parser *handler, const void *data, size_t length);
|
|
|
|
// return 0 : success
|
|
// return -1 : error
|
|
int raw_packet_parser_get_most_inner_tuple4(struct raw_pkt_parser *handler, struct addr_tuple4 *addr);
|
|
int raw_packet_parser_get_most_outer_tuple4(struct raw_pkt_parser *handler, struct addr_tuple4 *addr);
|
|
|
|
// return 0 : success
|
|
// return -1 : error
|
|
int raw_packet_parser_get_most_inner_address(struct raw_pkt_parser *handler, struct addr_tuple4 *addr);
|
|
int raw_packet_parser_get_most_outer_address(struct raw_pkt_parser *handler, struct addr_tuple4 *addr);
|
|
|
|
#ifdef __cpluscplus
|
|
}
|
|
#endif
|
|
|
|
#endif |