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_gtp2_utils.cpp

151 lines
4.7 KiB
C++

#include <gtest/gtest.h>
#include "packet_helper.h"
/*
* User Datagram Protocol, Src Port: 2123, Dst Port: 12491
* GPRS Tunneling Protocol V2
* Flags: 0x48
* 010. .... = Version: 2
* ...0 .... = Piggybacking flag (P): 0
* .... 1... = TEID flag (T): 1
* .... .0.. = Message Priority(MP): 0
* Message Type: Delete Session Response (37)
* Message Length: 19
* Tunnel Endpoint Identifier: 0x0e05cd4d (235261261)
* Sequence Number: 0x000ce7 (3303)
* Spare: 0
* Cause : Request accepted (16)
* IE Type: Cause (2)
* IE Length: 2
* 0000 .... = CR flag: 0
* .... 0000 = Instance: 0
* Cause: Request accepted (16)
* 0000 0... = Spare bit(s): 0
* .... .0.. = PCE (PDN Connection IE Error): False
* .... ..0. = BCE (Bearer Context IE Error): False
* .... ...0 = CS (Cause Source): Originated by node sending the message
* Recovery (Restart Counter) : 13
* IE Type: Recovery (Restart Counter) (3)
* IE Length: 1
* 0000 .... = CR flag: 0
* .... 0000 = Instance: 0
* Restart Counter: 13
*/
unsigned char gtp2_c_pkt1[] = {
0x48, 0x25, 0x00, 0x13, 0x0e, 0x05, 0xcd, 0x4d, 0x00, 0x0c, 0xe7, 0x00, 0x02, 0x00, 0x02, 0x00, 0x10, 0x00, 0x03, 0x00, 0x01, 0x00, 0x0d};
// have teid
TEST(GTP2_UTILS, C_GET1)
{
const struct gtp2_hdr *hdr = (struct gtp2_hdr *)gtp2_c_pkt1;
EXPECT_TRUE(calc_gtp2_hdr_len((const char *)gtp2_c_pkt1, sizeof(gtp2_c_pkt1)) == 12);
EXPECT_TRUE(gtp2_hdr_get_flags(hdr) == 0x48);
EXPECT_TRUE(gtp2_hdr_get_version(hdr) == 2);
EXPECT_TRUE(gtp2_hdr_get_piggyback_flag(hdr) == 0);
EXPECT_TRUE(gtp2_hdr_get_teid_flag(hdr) == 1);
EXPECT_TRUE(gtp2_hdr_get_spare_flag(hdr) == 0);
EXPECT_TRUE(gtp2_hdr_get_msg_type(hdr) == 37);
EXPECT_TRUE(gtp2_hdr_get_msg_len(hdr) == 19);
EXPECT_TRUE(gtp2_hdr_get_teid(hdr) == 0x0e05cd4d);
EXPECT_TRUE(gtp2_hdr_get_seq(hdr) == 0x000ce7);
EXPECT_TRUE(gtp2_hdr_get_spare(hdr) == 0);
char buff[1024] = {0};
gtp2_hdr_to_str(hdr, buff, sizeof(buff));
printf("%s\n", buff);
}
TEST(GTP2_UTILS, C_SET1)
{
char buff[12] = {0};
struct gtp2_hdr *hdr = (struct gtp2_hdr *)buff;
gtp2_hdr_set_flags(hdr, 0x48);
gtp2_hdr_set_version(hdr, 2);
gtp2_hdr_set_piggyback_flag(hdr, 0);
gtp2_hdr_set_teid_flag(hdr, 1);
gtp2_hdr_set_spare_flag(hdr, 0);
gtp2_hdr_set_msg_type(hdr, 37);
gtp2_hdr_set_msg_len(hdr, 19);
gtp2_hdr_set_teid(hdr, 0x0e05cd4d);
gtp2_hdr_set_seq(hdr, 0x000ce7);
gtp2_hdr_set_spare(hdr, 0);
EXPECT_TRUE(memcmp(buff, gtp2_c_pkt1, 12) == 0);
}
/*
* User Datagram Protocol, Src Port: 2123, Dst Port: 2123
* GPRS Tunneling Protocol V2
* Flags: 0x40
* 010. .... = Version: 2
* ...0 .... = Piggybacking flag (P): 0
* .... 0... = TEID flag (T): 0
* .... .0.. = Message Priority(MP): 0
* Message Type: Echo Request (1)
* Message Length: 9
* Sequence Number: 0x0041d4 (16852)
* Spare: 0
* Recovery (Restart Counter) : 5
* IE Type: Recovery (Restart Counter) (3)
* IE Length: 1
* 0000 .... = CR flag: 0
* .... 0000 = Instance: 0
* Restart Counter: 5
*/
unsigned char gtp2_c_pkt2[] = {
0x40, 0x01, 0x00, 0x09, 0x00, 0x41, 0xd4, 0x00, 0x03, 0x00, 0x01, 0x00, 0x05};
// no teid
TEST(GTP2_UTILS, C_GET2)
{
const struct gtp2_hdr *hdr = (struct gtp2_hdr *)gtp2_c_pkt2;
EXPECT_TRUE(calc_gtp2_hdr_len((const char *)gtp2_c_pkt2, sizeof(gtp2_c_pkt2)) == 8);
EXPECT_TRUE(gtp2_hdr_get_flags(hdr) == 0x40);
EXPECT_TRUE(gtp2_hdr_get_version(hdr) == 2);
EXPECT_TRUE(gtp2_hdr_get_piggyback_flag(hdr) == 0);
EXPECT_TRUE(gtp2_hdr_get_teid_flag(hdr) == 0);
EXPECT_TRUE(gtp2_hdr_get_spare_flag(hdr) == 0);
EXPECT_TRUE(gtp2_hdr_get_msg_type(hdr) == 1);
EXPECT_TRUE(gtp2_hdr_get_msg_len(hdr) == 9);
EXPECT_TRUE(gtp2_hdr_get_teid(hdr) == 0);
EXPECT_TRUE(gtp2_hdr_get_seq(hdr) == 0x0041d4);
EXPECT_TRUE(gtp2_hdr_get_spare(hdr) == 0);
char buff[1024] = {0};
gtp2_hdr_to_str(hdr, buff, sizeof(buff));
printf("%s\n", buff);
}
TEST(GTP2_UTILS, C_SET2)
{
char buff[8] = {0};
struct gtp2_hdr *hdr = (struct gtp2_hdr *)buff;
gtp2_hdr_set_flags(hdr, 0x40);
gtp2_hdr_set_version(hdr, 2);
gtp2_hdr_set_piggyback_flag(hdr, 0);
gtp2_hdr_set_teid_flag(hdr, 0);
gtp2_hdr_set_spare_flag(hdr, 0);
gtp2_hdr_set_msg_type(hdr, 1);
gtp2_hdr_set_msg_len(hdr, 9);
gtp2_hdr_set_teid(hdr, 0);
gtp2_hdr_set_seq(hdr, 0x0041d4);
gtp2_hdr_set_spare(hdr, 0);
EXPECT_TRUE(memcmp(buff, gtp2_c_pkt2, 8) == 0);
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}