This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
stellar-stellar/infra/packet_manager/test/gtest_l2tp_utils.cpp

197 lines
6.9 KiB
C++
Raw Normal View History

2024-06-07 14:47:38 +08:00
#include <gtest/gtest.h>
#include "packet_helper.h"
2024-06-07 14:47:38 +08:00
/*
* Layer 2 Tunneling Protocol
* Flags: 0xc802, Type: Control Message, Length Bit, Sequence Bit
* 1... .... .... .... = Type: Control Message (1)
* .1.. .... .... .... = Length Bit: Length field is present
* .... 1... .... .... = Sequence Bit: Ns and Nr fields are present
* .... ..0. .... .... = Offset bit: Offset size field is not present
* .... ...0 .... .... = Priority: No priority
* .... .... .... 0010 = Version: 2
* Length: 105
* Tunnel ID: 0
* Session ID: 0
* Ns: 0
* Nr: 0
* Control Message AVP
* 1... .... .... .... = Mandatory: True
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1000 = Length: 8
* Vendor ID: Reserved (0)
* AVP Type: Control Message (0)
* Message Type: Start_Control_Request (1)
* Protocol Version AVP
* 1... .... .... .... = Mandatory: True
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1000 = Length: 8
* Vendor ID: Reserved (0)
* AVP Type: Protocol Version (2)
* Version: 1
* Revision: 0
* Framing Capabilities AVP
* 1... .... .... .... = Mandatory: True
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1010 = Length: 10
* Vendor ID: Reserved (0)
* AVP Type: Framing Capabilities (3)
* .... .... .... .... .... .... .... ..0. = Async Framing Supported: False
* .... .... .... .... .... .... .... ...1 = Sync Framing Supported: True
* Bearer Capabilities AVP
* 1... .... .... .... = Mandatory: True
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1010 = Length: 10
* Vendor ID: Reserved (0)
* AVP Type: Bearer Capabilities (4)
* .... .... .... .... .... .... .... ..0. = Analog Access Supported: False
* .... .... .... .... .... .... .... ...0 = Digital Access Supported: False
* Firmware Revision AVP
* 0... .... .... .... = Mandatory: False
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1000 = Length: 8
* Vendor ID: Reserved (0)
* AVP Type: Firmware Revision (6)
* Firmware Revision: 1537 (0x0601)
* Host Name AVP
* 1... .... .... .... = Mandatory: True
* .0.. .... .... .... = Hidden: False
* .... ..00 0001 0010 = Length: 18
* Vendor ID: Reserved (0)
* AVP Type: Host Name (7)
* Host Name: IIE-SM-THINK
* Vendor Name AVP
* 0... .... .... .... = Mandatory: False
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1111 = Length: 15
* Vendor ID: Reserved (0)
* AVP Type: Vendor Name (8)
* Vendor Name: Microsoft
* Assigned Tunnel ID AVP
* 1... .... .... .... = Mandatory: True
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1000 = Length: 8
* Vendor ID: Reserved (0)
* AVP Type: Assigned Tunnel ID (9)
* Assigned Tunnel ID: 1
* Receive Window Size AVP
* 1... .... .... .... = Mandatory: True
* .0.. .... .... .... = Hidden: False
* .... ..00 0000 1000 = Length: 8
* Vendor ID: Reserved (0)
* AVP Type: Receive Window Size (10)
* Receive Window Size: 8
*/
unsigned char v2_over_udp_ctrl_msg[] = {
0xc8, 0x02, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
0x01, 0x00, 0x80, 0x0a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
0x00, 0x06, 0x06, 0x01, 0x80, 0x12, 0x00, 0x00, 0x00, 0x07, 0x49, 0x49, 0x45, 0x2d, 0x53, 0x4d, 0x2d, 0x54, 0x48, 0x49, 0x4e, 0x4b, 0x00, 0x0f, 0x00, 0x00,
0x00, 0x08, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x80, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x80, 0x08, 0x00, 0x00, 0x00, 0x0a, 0x00,
0x08};
2024-06-19 14:43:32 +08:00
TEST(L2TPV2_OVER_UDP_UTILS, CRTL_MSG)
2024-06-07 14:47:38 +08:00
{
const struct l2tp_hdr *hdr = (struct l2tp_hdr *)v2_over_udp_ctrl_msg;
EXPECT_TRUE(l2tp_hdr_get_ver(hdr) == 2);
EXPECT_TRUE(l2tp_hdr_get_type(hdr) == 1);
EXPECT_TRUE(calc_udp_l2tpv2_hdr_len((const char *)v2_over_udp_ctrl_msg, sizeof(v2_over_udp_ctrl_msg)) == 105);
}
/*
* Layer 2 Tunneling Protocol
* Flags: 0x4002, Type: Data Message, Length Bit
* 0... .... .... .... = Type: Data Message (0)
* .1.. .... .... .... = Length Bit: Length field is present
* .... 0... .... .... = Sequence Bit: Ns and Nr fields are not present
* .... ..0. .... .... = Offset bit: Offset size field is not present
* .... ...0 .... .... = Priority: No priority
* .... .... .... 0010 = Version: 2
* Length: 78
* Tunnel ID: 28998
* Session ID: 2
*/
unsigned char v2_over_udp_data_msg[] = {
0x40, 0x02, 0x00, 0x4e, 0x71, 0x46, 0x00, 0x02};
2024-06-19 14:43:32 +08:00
TEST(L2TPV2_OVER_UDP_UTILS, DATA_MSG)
2024-06-07 14:47:38 +08:00
{
const struct l2tp_hdr *hdr = (struct l2tp_hdr *)v2_over_udp_data_msg;
EXPECT_TRUE(l2tp_hdr_get_ver(hdr) == 2);
EXPECT_TRUE(l2tp_hdr_get_type(hdr) == 0);
EXPECT_TRUE(calc_udp_l2tpv2_hdr_len((const char *)v2_over_udp_data_msg, sizeof(v2_over_udp_data_msg)) == 8);
}
/*
* TODO
*/
unsigned char v3_over_udp_ctrl_msg[] = {};
2024-06-19 14:43:32 +08:00
TEST(L2TPV3_OVER_UDP_UTILS, CRTL_MSG)
2024-06-07 14:47:38 +08:00
{
// TODO
}
/*
* Layer 2 Tunneling Protocol version 3
* Flags: 0x0003, Type: Data Message
* 0... .... .... .... = Type: Data Message (0)
* .0.. .... .... .... = Length Bit: Length field is not present
* .... 0... .... .... = Sequence Bit: Ns and Nr fields are not present
* .... .... .... 0011 = Version: 3
* Reserved: 0x0000
* Session ID: 0x00000fa0
* [Pseudowire Type: Unknown (0)]
* Cookie: 00000000
*/
unsigned char v3_over_udp_data_msg[] = {
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x00};
2024-06-19 14:43:32 +08:00
TEST(L2TPV3_OVER_UDP_UTILS, DATA_MSG)
2024-06-07 14:47:38 +08:00
{
const struct l2tp_hdr *hdr = (struct l2tp_hdr *)v3_over_udp_data_msg;
EXPECT_TRUE(l2tp_hdr_get_ver(hdr) == 3);
EXPECT_TRUE(l2tp_hdr_get_type(hdr) == 0);
EXPECT_TRUE(calc_udp_l2tpv3_hdr_len((const char *)v3_over_udp_data_msg, sizeof(v3_over_udp_data_msg)) == 12);
}
/*
* TODO
*/
unsigned char v3_over_ip_ctrl_msg[] = {};
2024-06-19 14:43:32 +08:00
TEST(L2TPV3_OVER_IP_UTILS, CRTL_MSG)
2024-06-07 14:47:38 +08:00
{
// TODO
}
/*
* Layer 2 Tunneling Protocol version 3
* Session ID: 0x00009652
* [Pseudowire Type: Unknown (0)]
* Cookie: ca031078
*/
unsigned char v3_over_ip_data_msg[] = {
0x00, 0x00, 0x96, 0x52, 0xca, 0x03, 0x10, 0x78};
2024-06-19 14:43:32 +08:00
TEST(L2TPV3_OVER_IP_UTILS, DATA_MSG)
2024-06-07 14:47:38 +08:00
{
EXPECT_TRUE(ntohl(*((uint32_t *)v3_over_ip_data_msg)) != 0); // data message
EXPECT_TRUE(calc_ip_l2tpv3_hdr_len((const char *)v3_over_ip_data_msg, sizeof(v3_over_ip_data_msg)) == 8);
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}