Add GRE utils
This commit is contained in:
@@ -25,6 +25,9 @@ target_link_libraries(gtest_vlan_utils packet gtest)
|
||||
add_executable(gtest_vxlan_utils gtest_vxlan_utils.cpp)
|
||||
target_link_libraries(gtest_vxlan_utils packet gtest)
|
||||
|
||||
add_executable(gtest_gre_utils gtest_gre_utils.cpp)
|
||||
target_link_libraries(gtest_gre_utils packet gtest)
|
||||
|
||||
add_executable(gtest_packet_frag gtest_packet_frag.cpp)
|
||||
target_link_libraries(gtest_packet_frag packet gtest)
|
||||
|
||||
@@ -38,4 +41,5 @@ gtest_discover_tests(gtest_mpls_utils)
|
||||
gtest_discover_tests(gtest_eth_utils)
|
||||
gtest_discover_tests(gtest_vlan_utils)
|
||||
gtest_discover_tests(gtest_vxlan_utils)
|
||||
gtest_discover_tests(gtest_gre_utils)
|
||||
gtest_discover_tests(gtest_packet_frag)
|
||||
136
src/packet/test/gtest_gre_utils.cpp
Normal file
136
src/packet/test/gtest_gre_utils.cpp
Normal file
@@ -0,0 +1,136 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "gre_utils.h"
|
||||
|
||||
/*
|
||||
* Generic Routing Encapsulation (IP)
|
||||
* Flags and Version: 0x0000
|
||||
* 0... .... .... .... = Checksum Bit: No
|
||||
* .0.. .... .... .... = Routing Bit: No
|
||||
* ..0. .... .... .... = Key Bit: No
|
||||
* ...0 .... .... .... = Sequence Number Bit: No
|
||||
* .... 0... .... .... = Strict Source Route Bit: No
|
||||
* .... .000 .... .... = Recursion control: 0
|
||||
* .... .... 0000 0... = Flags (Reserved): 0
|
||||
* .... .... .... .000 = Version: GRE (0)
|
||||
* Protocol Type: IP (0x0800)
|
||||
*/
|
||||
|
||||
unsigned char ver0_data1[] = {
|
||||
0x00, 0x00, 0x08, 0x00};
|
||||
|
||||
TEST(GRE_VER0_UTILS, NO_OPTION)
|
||||
{
|
||||
const struct gre_hdr *hdr = (struct gre_hdr *)ver0_data1;
|
||||
|
||||
EXPECT_TRUE(gre_hdr_get_ver(hdr) == 0);
|
||||
EXPECT_TRUE(gre_hdr_get_proto(hdr) == 0x0800);
|
||||
EXPECT_TRUE(calc_gre_hdr_len((const char *)ver0_data1, sizeof(ver0_data1)) == 4);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic Routing Encapsulation (IP)
|
||||
* Flags and Version: 0x2000
|
||||
* 0... .... .... .... = Checksum Bit: No
|
||||
* .0.. .... .... .... = Routing Bit: No
|
||||
* ..1. .... .... .... = Key Bit: Yes
|
||||
* ...0 .... .... .... = Sequence Number Bit: No
|
||||
* .... 0... .... .... = Strict Source Route Bit: No
|
||||
* .... .000 .... .... = Recursion control: 0
|
||||
* .... .... 0000 0... = Flags (Reserved): 0
|
||||
* .... .... .... .000 = Version: GRE (0)
|
||||
* Protocol Type: IP (0x0800)
|
||||
* Key: 0x00000384
|
||||
*/
|
||||
|
||||
unsigned char ver0_data2[] = {0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x84};
|
||||
|
||||
TEST(GRE_VER0_UTILS, KEY_OPTION)
|
||||
{
|
||||
const struct gre_hdr *hdr = (struct gre_hdr *)ver0_data2;
|
||||
|
||||
EXPECT_TRUE(gre_hdr_get_ver(hdr) == 0);
|
||||
EXPECT_TRUE(gre_hdr_get_proto(hdr) == 0x0800);
|
||||
EXPECT_TRUE(calc_gre_hdr_len((const char *)ver0_data2, sizeof(ver0_data2)) == 8);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic Routing Encapsulation (IP)
|
||||
* Flags and Version: 0xc000
|
||||
* 1... .... .... .... = Checksum Bit: Yes
|
||||
* .1.. .... .... .... = Routing Bit: Yes
|
||||
* ..0. .... .... .... = Key Bit: No
|
||||
* ...0 .... .... .... = Sequence Number Bit: No
|
||||
* .... 0... .... .... = Strict Source Route Bit: No
|
||||
* .... .000 .... .... = Recursion control: 0
|
||||
* .... .... 0000 0... = Flags (Reserved): 0
|
||||
* .... .... .... .000 = Version: GRE (0)
|
||||
* Protocol Type: IP (0x0800)
|
||||
* Checksum: 0x0000 incorrect, should be 0xea95
|
||||
* [Expert Info (Warning/Protocol): Incorrect GRE Checksum [should be 0xea95]]
|
||||
* [Incorrect GRE Checksum [should be 0xea95]]
|
||||
* [Severity level: Warning]
|
||||
* [Group: Protocol]
|
||||
* [Checksum Status: Bad]
|
||||
* Offset: 44
|
||||
* Routing
|
||||
* Address Family: 2
|
||||
* SRE Offset: 0
|
||||
* SRE Length: 44
|
||||
* Routing Information: 6c696e6b5f696e666f206c696e6b5f696e666f206c696e6b5f696e666f206c696e6b5f696e666f2000000000
|
||||
* Routing
|
||||
* Address Family: 0
|
||||
* SRE Offset: 0
|
||||
* SRE Length: 0
|
||||
*/
|
||||
|
||||
unsigned char ver0_data3[] = {
|
||||
0xc0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x02, 0x00, 0x2c, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x6c, 0x69, 0x6e, 0x6b,
|
||||
0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x20,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
TEST(GRE_VER0_UTILS, CHECKSUM_ROUTING_OPTION)
|
||||
{
|
||||
const struct gre_hdr *hdr = (struct gre_hdr *)ver0_data3;
|
||||
|
||||
EXPECT_TRUE(gre_hdr_get_ver(hdr) == 0);
|
||||
EXPECT_TRUE(gre_hdr_get_proto(hdr) == 0x0800);
|
||||
EXPECT_TRUE(calc_gre_hdr_len((const char *)ver0_data3, sizeof(ver0_data3)) == 60);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic Routing Encapsulation (PPP)
|
||||
* Flags and Version: 0x3081
|
||||
* 0... .... .... .... = Checksum Bit: No
|
||||
* .0.. .... .... .... = Routing Bit: No
|
||||
* ..1. .... .... .... = Key Bit: Yes
|
||||
* ...1 .... .... .... = Sequence Number Bit: Yes
|
||||
* .... 0... .... .... = Strict Source Route Bit: No
|
||||
* .... .000 .... .... = Recursion control: 0
|
||||
* .... .... 1... .... = Acknowledgment: Yes
|
||||
* .... .... .000 0... = Flags (Reserved): 0
|
||||
* .... .... .... .001 = Version: Enhanced GRE (1)
|
||||
* Protocol Type: PPP (0x880b)
|
||||
* Payload Length: 103
|
||||
* Call ID: 6016
|
||||
* Sequence Number: 430001
|
||||
* Acknowledgment Number: 539254
|
||||
*/
|
||||
|
||||
unsigned char ver1_data1[] = {
|
||||
0x30, 0x81, 0x88, 0x0b, 0x00, 0x67, 0x17, 0x80, 0x00, 0x06, 0x8f, 0xb1, 0x00, 0x08, 0x3a, 0x76};
|
||||
|
||||
TEST(GRE_VER1_UTILS, SEQ_ACK_OPTION)
|
||||
{
|
||||
const struct gre_hdr *hdr = (struct gre_hdr *)ver1_data1;
|
||||
|
||||
EXPECT_TRUE(gre_hdr_get_ver(hdr) == 1);
|
||||
EXPECT_TRUE(gre_hdr_get_proto(hdr) == 0x880b);
|
||||
EXPECT_TRUE(calc_gre_hdr_len((const char *)ver1_data1, sizeof(ver1_data1)) == 16);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
Reference in New Issue
Block a user