Add support for parsing PPP headers with variable lengths

This commit is contained in:
luwenpeng
2024-05-31 14:35:58 +08:00
parent 2d958dbe07
commit f3b92a8a15
4 changed files with 226 additions and 43 deletions

View File

@@ -1602,11 +1602,8 @@ TEST(PACKET, ETH_VLAN_PPPOE_IP4_TCP)
// LAYER_TYPE_L2
const struct packet_layer *outer_l2_record = packet_get_outermost_layer(&handler, LAYER_TYPE_L2);
const struct packet_layer *inner_l2_record = packet_get_innermost_layer(&handler, LAYER_TYPE_L2);
EXPECT_TRUE(outer_l2_record != nullptr);
EXPECT_TRUE(inner_l2_record != nullptr);
EXPECT_TRUE(outer_l2_record == inner_l2_record);
EXPECT_TRUE(outer_l2_record == outer_eth_record);
// LAYER_TYPE_VLAN
@@ -1634,8 +1631,8 @@ TEST(PACKET, ETH_VLAN_PPPOE_IP4_TCP)
EXPECT_TRUE(inner_pppoe_record != nullptr);
EXPECT_TRUE(outer_pppoe_record == inner_pppoe_record);
EXPECT_TRUE(outer_pppoe_record->hdr_offset == 18);
EXPECT_TRUE(outer_pppoe_record->hdr_len == 8);
EXPECT_TRUE(outer_pppoe_record->pld_len == 52);
EXPECT_TRUE(outer_pppoe_record->hdr_len == 6);
EXPECT_TRUE(outer_pppoe_record->pld_len == 54);
// LAYER_TYPE_L2_TUN
const struct packet_layer *inner_l2_tun_record = packet_get_innermost_layer(&handler, LAYER_TYPE_L2_TUN);
@@ -1643,6 +1640,23 @@ TEST(PACKET, ETH_VLAN_PPPOE_IP4_TCP)
EXPECT_TRUE(inner_l2_tun_record != nullptr);
EXPECT_TRUE(inner_l2_tun_record == outer_pppoe_record);
// LAYER_TYPE_PPP
const struct packet_layer *outer_ppp_record = packet_get_outermost_layer(&handler, LAYER_TYPE_PPP);
const struct packet_layer *inner_ppp_record = packet_get_innermost_layer(&handler, LAYER_TYPE_PPP);
EXPECT_TRUE(outer_ppp_record != nullptr);
EXPECT_TRUE(inner_ppp_record != nullptr);
EXPECT_TRUE(outer_ppp_record == inner_ppp_record);
EXPECT_TRUE(outer_ppp_record->hdr_offset == 24);
EXPECT_TRUE(outer_ppp_record->hdr_len == 2);
EXPECT_TRUE(outer_ppp_record->pld_len == 52);
// LAYER_TYPE_L2
const struct packet_layer *inner_l2_record = packet_get_innermost_layer(&handler, LAYER_TYPE_L2);
EXPECT_TRUE(inner_l2_record != nullptr);
EXPECT_TRUE(inner_l2_record == outer_ppp_record);
// LAYER_TYPE_IPV4
const struct packet_layer *outer_ipv4_record = packet_get_outermost_layer(&handler, LAYER_TYPE_IPV4);
const struct packet_layer *inner_ipv4_record = packet_get_innermost_layer(&handler, LAYER_TYPE_IPV4);