refactor: packet dump utils
This commit is contained in:
@@ -239,7 +239,7 @@ TEST(IPV4_REASSEMBLE, PADDING_ORDER)
|
|||||||
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
||||||
|
|
||||||
// check packet
|
// check packet
|
||||||
// packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
||||||
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
||||||
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
||||||
@@ -334,7 +334,7 @@ TEST(IPV4_REASSEMBLE, PADDING_UNORDER)
|
|||||||
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
||||||
|
|
||||||
// check packet
|
// check packet
|
||||||
// packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
||||||
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
||||||
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
||||||
@@ -494,7 +494,7 @@ TEST(IPV4_REASSEMBLE, DUP_FIRST_FRAG)
|
|||||||
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
||||||
|
|
||||||
// check packet
|
// check packet
|
||||||
// packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
||||||
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
||||||
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
||||||
@@ -601,7 +601,7 @@ TEST(IPV4_REASSEMBLE, DUP_LAST_FRAG)
|
|||||||
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
||||||
|
|
||||||
// check packet
|
// check packet
|
||||||
// packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 20 /* IPv4 */ + 20 /* TCP */ + 28 /* DATA */);
|
||||||
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
||||||
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
||||||
|
|||||||
@@ -674,7 +674,7 @@ TEST(IPV6_REASSEMBLE, NORMAL)
|
|||||||
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
0, 0, 0, 0, 0, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
||||||
|
|
||||||
// check packet
|
// check packet
|
||||||
// packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 40 /* IPv6 */ + 8 /* UDP */ + 5379 /* DATA */);
|
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 40 /* IPv6 */ + 8 /* UDP */ + 5379 /* DATA */);
|
||||||
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
||||||
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
||||||
@@ -852,7 +852,7 @@ TEST(IPV6_REASSEMBLE, DUP_FIRST_FRAG)
|
|||||||
0, 0, 0, 0, 1, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
0, 0, 0, 0, 1, 0); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
||||||
|
|
||||||
// check packet
|
// check packet
|
||||||
// packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 40 /* IPv6 */ + 8 /* UDP */ + 5379 /* DATA */);
|
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 40 /* IPv6 */ + 8 /* UDP */ + 5379 /* DATA */);
|
||||||
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
||||||
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
||||||
@@ -977,7 +977,7 @@ TEST(IPV6_REASSEMBLE, DUP_LAST_FRAG)
|
|||||||
0, 0, 0, 0, 0, 1); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
0, 0, 0, 0, 0, 1); // ip6: nospace, overlap, many frag, invalid length, dup first frag, dup last frag
|
||||||
|
|
||||||
// check packet
|
// check packet
|
||||||
// packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 40 /* IPv6 */ + 8 /* UDP */ + 5379 /* DATA */);
|
EXPECT_TRUE(new_pkt->data_len == 14 /* ETH */ + 40 /* IPv6 */ + 8 /* UDP */ + 5379 /* DATA */);
|
||||||
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
EXPECT_TRUE(new_pkt->data_len == sizeof(expect));
|
||||||
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
EXPECT_TRUE(memcmp(new_pkt->data_ptr, expect, new_pkt->data_len) == 0);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ extern "C"
|
|||||||
#include "ip6_utils.h"
|
#include "ip6_utils.h"
|
||||||
#include "ip_reassembly.h"
|
#include "ip_reassembly.h"
|
||||||
#include "packet_def.h"
|
#include "packet_def.h"
|
||||||
|
#include "packet_dump.h"
|
||||||
#include "packet_utils.h"
|
#include "packet_utils.h"
|
||||||
#include "packet_parse.h"
|
#include "packet_parse.h"
|
||||||
#include "packet_layer.h"
|
#include "packet_layer.h"
|
||||||
|
|||||||
@@ -6,7 +6,20 @@
|
|||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "hexdump.h"
|
#include "hexdump.h"
|
||||||
|
#include "eth_utils.h"
|
||||||
|
#include "gre_utils.h"
|
||||||
|
#include "udp_utils.h"
|
||||||
|
#include "tcp_utils.h"
|
||||||
|
#include "ip4_utils.h"
|
||||||
|
#include "ip6_utils.h"
|
||||||
|
#include "gtp_utils.h"
|
||||||
|
#include "mpls_utils.h"
|
||||||
|
#include "l2tp_utils.h"
|
||||||
|
#include "vlan_utils.h"
|
||||||
|
#include "vxlan_utils.h"
|
||||||
|
#include "packet_def.h"
|
||||||
#include "packet_dump.h"
|
#include "packet_dump.h"
|
||||||
|
#include "packet_parse.h"
|
||||||
#include "packet_utils.h"
|
#include "packet_utils.h"
|
||||||
|
|
||||||
#define PACKET_DUMP_LOG_ERROR(format, ...) LOG_ERROR("packet dump", format, ##__VA_ARGS__)
|
#define PACKET_DUMP_LOG_ERROR(format, ...) LOG_ERROR("packet dump", format, ##__VA_ARGS__)
|
||||||
@@ -83,4 +96,96 @@ void packet_dump_hex(const struct packet *pkt, int fd)
|
|||||||
const char *data = packet_get_raw_data(pkt);
|
const char *data = packet_get_raw_data(pkt);
|
||||||
|
|
||||||
hexdump_to_fd(fd, data, len);
|
hexdump_to_fd(fd, data, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int packet_dump_str(const struct packet *pkt, char *buff, int size)
|
||||||
|
{
|
||||||
|
if (pkt == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int used = 0;
|
||||||
|
memset(buff, 0, size);
|
||||||
|
used += snprintf(buff + used, size - used, "packet: %p, data_ptr: %p, data_len: %u, trim_len: %u, layers_used: %d, layers_size: %d\n",
|
||||||
|
pkt, pkt->data_ptr, pkt->data_len, pkt->trim_len,
|
||||||
|
pkt->layers_used, pkt->layers_size);
|
||||||
|
for (uint8_t i = 0; i < pkt->layers_used; i++)
|
||||||
|
{
|
||||||
|
const struct raw_layer *layer = &pkt->layers[i];
|
||||||
|
used += snprintf(buff + used, size - used, "=> layer[%u]: %p, proto: %s, header: {offset: %u, ptr: %p, len: %u}, payload: {ptr: %p, len: %u}\n",
|
||||||
|
i, layer, layer_proto_to_str(layer->proto), layer->hdr_offset,
|
||||||
|
layer->hdr_ptr, layer->hdr_len, layer->pld_ptr, layer->pld_len);
|
||||||
|
switch (layer->proto)
|
||||||
|
{
|
||||||
|
case LAYER_PROTO_ETHER:
|
||||||
|
used += eth_hdr_to_str((const struct ethhdr *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_PWETH:
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_PPP:
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_L2TP:
|
||||||
|
used += l2tp_hdr_to_str((const struct l2tp_hdr *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_VLAN:
|
||||||
|
used += vlan_hdr_to_str((const struct vlan_hdr *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_PPPOE:
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_MPLS:
|
||||||
|
used += mpls_label_to_str((const struct mpls_label *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_IPV4:
|
||||||
|
used += ip4_hdr_to_str((const struct ip *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_IPV6:
|
||||||
|
used += ip6_hdr_to_str((const struct ip6_hdr *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_IPAH:
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_GRE:
|
||||||
|
used += gre_hdr_to_str(layer->hdr_ptr, layer->hdr_len, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_UDP:
|
||||||
|
used += udp_hdr_to_str((const struct udphdr *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_TCP:
|
||||||
|
used += tcp_hdr_to_str((const struct tcphdr *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_ICMP:
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_ICMP6:
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_VXLAN:
|
||||||
|
used += vxlan_hdr_to_str((const struct vxlan_hdr *)layer->hdr_ptr, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
case LAYER_PROTO_GTP_C:
|
||||||
|
case LAYER_PROTO_GTP_U:
|
||||||
|
used += gtp_hdr_to_str(layer->hdr_ptr, layer->hdr_len, buff + used, size - used);
|
||||||
|
used += snprintf(buff + used, size - used, "\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return used;
|
||||||
|
}
|
||||||
|
|
||||||
|
void packet_dump_stdio(const struct packet *pkt)
|
||||||
|
{
|
||||||
|
char buff[4096] = {};
|
||||||
|
packet_dump_str(pkt, buff, sizeof(buff));
|
||||||
|
printf("%s\n", buff);
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,9 @@ extern "C"
|
|||||||
// return -1: failed
|
// return -1: failed
|
||||||
int packet_dump_pcap(const struct packet *pkt, const char *file);
|
int packet_dump_pcap(const struct packet *pkt, const char *file);
|
||||||
void packet_dump_hex(const struct packet *pkt, int fd);
|
void packet_dump_hex(const struct packet *pkt, int fd);
|
||||||
|
// return number of bytes written
|
||||||
|
int packet_dump_str(const struct packet *pkt, char *buff, int size);
|
||||||
|
void packet_dump_stdio(const struct packet *pkt);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,6 @@
|
|||||||
* Static API
|
* Static API
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
static inline const char *layer_proto_to_str(enum layer_proto proto);
|
|
||||||
static inline struct raw_layer *get_free_layer(struct packet *pkt);
|
static inline struct raw_layer *get_free_layer(struct packet *pkt);
|
||||||
|
|
||||||
// 数据链路层
|
// 数据链路层
|
||||||
@@ -92,51 +91,6 @@ static inline const char *parse_l4(struct packet *pkt, uint8_t next_proto, const
|
|||||||
* Private API -- Utils
|
* Private API -- Utils
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
static inline const char *layer_proto_to_str(enum layer_proto proto)
|
|
||||||
{
|
|
||||||
switch (proto)
|
|
||||||
{
|
|
||||||
case LAYER_PROTO_ETHER:
|
|
||||||
return "ETH";
|
|
||||||
case LAYER_PROTO_PWETH:
|
|
||||||
return "PWETH";
|
|
||||||
case LAYER_PROTO_PPP:
|
|
||||||
return "PPP";
|
|
||||||
case LAYER_PROTO_L2TP:
|
|
||||||
return "L2TP";
|
|
||||||
case LAYER_PROTO_VLAN:
|
|
||||||
return "VLAN";
|
|
||||||
case LAYER_PROTO_PPPOE:
|
|
||||||
return "PPPOE";
|
|
||||||
case LAYER_PROTO_MPLS:
|
|
||||||
return "MPLS";
|
|
||||||
case LAYER_PROTO_IPV4:
|
|
||||||
return "IPV4";
|
|
||||||
case LAYER_PROTO_IPV6:
|
|
||||||
return "IPV6";
|
|
||||||
case LAYER_PROTO_IPAH:
|
|
||||||
return "IPAH";
|
|
||||||
case LAYER_PROTO_GRE:
|
|
||||||
return "GRE";
|
|
||||||
case LAYER_PROTO_UDP:
|
|
||||||
return "UDP";
|
|
||||||
case LAYER_PROTO_TCP:
|
|
||||||
return "TCP";
|
|
||||||
case LAYER_PROTO_ICMP:
|
|
||||||
return "ICMP";
|
|
||||||
case LAYER_PROTO_ICMP6:
|
|
||||||
return "ICMP6";
|
|
||||||
case LAYER_PROTO_VXLAN:
|
|
||||||
return "VXLAN";
|
|
||||||
case LAYER_PROTO_GTP_C:
|
|
||||||
return "GTP-C";
|
|
||||||
case LAYER_PROTO_GTP_U:
|
|
||||||
return "GTP-U";
|
|
||||||
default:
|
|
||||||
return "UNKNOWN";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct raw_layer *get_free_layer(struct packet *pkt)
|
static inline struct raw_layer *get_free_layer(struct packet *pkt)
|
||||||
{
|
{
|
||||||
if (pkt->layers_used >= pkt->layers_size)
|
if (pkt->layers_used >= pkt->layers_size)
|
||||||
@@ -986,87 +940,47 @@ const char *packet_parse(struct packet *pkt, const char *data, uint16_t len)
|
|||||||
return parse_ether(pkt, data, len);
|
return parse_ether(pkt, data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
int packet_to_str(const struct packet *pkt, char *buff, int size)
|
const char *layer_proto_to_str(enum layer_proto proto)
|
||||||
{
|
{
|
||||||
if (pkt == NULL)
|
switch (proto)
|
||||||
{
|
{
|
||||||
return 0;
|
case LAYER_PROTO_ETHER:
|
||||||
|
return "ETH";
|
||||||
|
case LAYER_PROTO_PWETH:
|
||||||
|
return "PWETH";
|
||||||
|
case LAYER_PROTO_PPP:
|
||||||
|
return "PPP";
|
||||||
|
case LAYER_PROTO_L2TP:
|
||||||
|
return "L2TP";
|
||||||
|
case LAYER_PROTO_VLAN:
|
||||||
|
return "VLAN";
|
||||||
|
case LAYER_PROTO_PPPOE:
|
||||||
|
return "PPPOE";
|
||||||
|
case LAYER_PROTO_MPLS:
|
||||||
|
return "MPLS";
|
||||||
|
case LAYER_PROTO_IPV4:
|
||||||
|
return "IPV4";
|
||||||
|
case LAYER_PROTO_IPV6:
|
||||||
|
return "IPV6";
|
||||||
|
case LAYER_PROTO_IPAH:
|
||||||
|
return "IPAH";
|
||||||
|
case LAYER_PROTO_GRE:
|
||||||
|
return "GRE";
|
||||||
|
case LAYER_PROTO_UDP:
|
||||||
|
return "UDP";
|
||||||
|
case LAYER_PROTO_TCP:
|
||||||
|
return "TCP";
|
||||||
|
case LAYER_PROTO_ICMP:
|
||||||
|
return "ICMP";
|
||||||
|
case LAYER_PROTO_ICMP6:
|
||||||
|
return "ICMP6";
|
||||||
|
case LAYER_PROTO_VXLAN:
|
||||||
|
return "VXLAN";
|
||||||
|
case LAYER_PROTO_GTP_C:
|
||||||
|
return "GTP-C";
|
||||||
|
case LAYER_PROTO_GTP_U:
|
||||||
|
return "GTP-U";
|
||||||
|
default:
|
||||||
|
return "UNKNOWN";
|
||||||
}
|
}
|
||||||
|
|
||||||
int used = 0;
|
|
||||||
memset(buff, 0, size);
|
|
||||||
used += snprintf(buff + used, size - used, "packet: %p, data_ptr: %p, data_len: %u, trim_len: %u, layers_used: %d, layers_size: %d\n",
|
|
||||||
pkt, pkt->data_ptr, pkt->data_len, pkt->trim_len,
|
|
||||||
pkt->layers_used, pkt->layers_size);
|
|
||||||
for (uint8_t i = 0; i < pkt->layers_used; i++)
|
|
||||||
{
|
|
||||||
const struct raw_layer *layer = &pkt->layers[i];
|
|
||||||
used += snprintf(buff + used, size - used, "=> layer[%u]: %p, proto: %s, header: {offset: %u, ptr: %p, len: %u}, payload: {ptr: %p, len: %u}\n",
|
|
||||||
i, layer, layer_proto_to_str(layer->proto), layer->hdr_offset,
|
|
||||||
layer->hdr_ptr, layer->hdr_len, layer->pld_ptr, layer->pld_len);
|
|
||||||
switch (layer->proto)
|
|
||||||
{
|
|
||||||
case LAYER_PROTO_ETHER:
|
|
||||||
used += eth_hdr_to_str((const struct ethhdr *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_PWETH:
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_PPP:
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_L2TP:
|
|
||||||
used += l2tp_hdr_to_str((const struct l2tp_hdr *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_VLAN:
|
|
||||||
used += vlan_hdr_to_str((const struct vlan_hdr *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_PPPOE:
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_MPLS:
|
|
||||||
used += mpls_label_to_str((const struct mpls_label *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_IPV4:
|
|
||||||
used += ip4_hdr_to_str((const struct ip *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_IPV6:
|
|
||||||
used += ip6_hdr_to_str((const struct ip6_hdr *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_IPAH:
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_GRE:
|
|
||||||
used += gre_hdr_to_str(layer->hdr_ptr, layer->hdr_len, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_UDP:
|
|
||||||
used += udp_hdr_to_str((const struct udphdr *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_TCP:
|
|
||||||
used += tcp_hdr_to_str((const struct tcphdr *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_ICMP:
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_ICMP6:
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_VXLAN:
|
|
||||||
used += vxlan_hdr_to_str((const struct vxlan_hdr *)layer->hdr_ptr, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
case LAYER_PROTO_GTP_C:
|
|
||||||
case LAYER_PROTO_GTP_U:
|
|
||||||
used += gtp_hdr_to_str(layer->hdr_ptr, layer->hdr_len, buff + used, size - used);
|
|
||||||
used += snprintf(buff + used, size - used, "\n");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return used;
|
|
||||||
}
|
}
|
||||||
@@ -6,20 +6,9 @@ extern "C"
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
const char *packet_parse(struct packet *pkt, const char *data, uint16_t len);
|
const char *packet_parse(struct packet *pkt, const char *data, uint16_t len);
|
||||||
|
const char *layer_proto_to_str(enum layer_proto proto);
|
||||||
// bref : 1, output packet bref info
|
|
||||||
// bref : 0, output packet detail info
|
|
||||||
int packet_to_str(const struct packet *pkt, char *buff, int size);
|
|
||||||
|
|
||||||
static inline void packet_print(const struct packet *pkt)
|
|
||||||
{
|
|
||||||
char buff[4096];
|
|
||||||
packet_to_str(pkt, buff, sizeof(buff));
|
|
||||||
printf("%s\n", buff);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,12 +135,12 @@ TEST(PACKET_CRAFT_TCP, ETH_IP4_TCP)
|
|||||||
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
||||||
packet_parse(&orig_pkt, (const char *)data1, sizeof(data1));
|
packet_parse(&orig_pkt, (const char *)data1, sizeof(data1));
|
||||||
PRINT_GREEN("origin packet:");
|
PRINT_GREEN("origin packet:");
|
||||||
packet_print(&orig_pkt);
|
packet_dump_stdio(&orig_pkt);
|
||||||
|
|
||||||
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1, 2, TH_ACK, (const char *)&ts_pad_opt, sizeof(ts_pad_opt), "Hello", 5);
|
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1, 2, TH_ACK, (const char *)&ts_pad_opt, sizeof(ts_pad_opt), "Hello", 5);
|
||||||
EXPECT_TRUE(new_pkt != nullptr);
|
EXPECT_TRUE(new_pkt != nullptr);
|
||||||
PRINT_GREEN("new packet:");
|
PRINT_GREEN("new packet:");
|
||||||
packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
|
|
||||||
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
||||||
packet_dump_pcap(new_pkt, "craft-eth-ipv4-tcp.pcap");
|
packet_dump_pcap(new_pkt, "craft-eth-ipv4-tcp.pcap");
|
||||||
@@ -272,12 +272,12 @@ TEST(PACKET_CRAFT_TCP, ETH_IP4_IP6_TCP)
|
|||||||
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
||||||
packet_parse(&orig_pkt, (const char *)data2, sizeof(data2));
|
packet_parse(&orig_pkt, (const char *)data2, sizeof(data2));
|
||||||
PRINT_GREEN("origin packet:");
|
PRINT_GREEN("origin packet:");
|
||||||
packet_print(&orig_pkt);
|
packet_dump_stdio(&orig_pkt);
|
||||||
|
|
||||||
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1234, 2345, TH_ACK, NULL, 0, "Hello", 5);
|
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1234, 2345, TH_ACK, NULL, 0, "Hello", 5);
|
||||||
EXPECT_TRUE(new_pkt != nullptr);
|
EXPECT_TRUE(new_pkt != nullptr);
|
||||||
PRINT_GREEN("new packet:");
|
PRINT_GREEN("new packet:");
|
||||||
packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
|
|
||||||
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
||||||
packet_dump_pcap(new_pkt, "craft-eth-ipv4-ipv6-tcp.pcap");
|
packet_dump_pcap(new_pkt, "craft-eth-ipv4-ipv6-tcp.pcap");
|
||||||
@@ -488,12 +488,12 @@ TEST(PACKET_CRAFT_TCP, ETH_IP6_UDP_GTP_IP4_TCP)
|
|||||||
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
||||||
packet_parse(&orig_pkt, (const char *)data3, sizeof(data3));
|
packet_parse(&orig_pkt, (const char *)data3, sizeof(data3));
|
||||||
PRINT_GREEN("origin packet:");
|
PRINT_GREEN("origin packet:");
|
||||||
packet_print(&orig_pkt);
|
packet_dump_stdio(&orig_pkt);
|
||||||
|
|
||||||
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1, 2, TH_ACK, NULL, 0, "Hello", 5);
|
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1, 2, TH_ACK, NULL, 0, "Hello", 5);
|
||||||
EXPECT_TRUE(new_pkt != nullptr);
|
EXPECT_TRUE(new_pkt != nullptr);
|
||||||
PRINT_GREEN("new packet:");
|
PRINT_GREEN("new packet:");
|
||||||
packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
|
|
||||||
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
||||||
packet_dump_pcap(new_pkt, "craft-eth-ipv6-udp-gtp-ipv4-tcp.pcap");
|
packet_dump_pcap(new_pkt, "craft-eth-ipv6-udp-gtp-ipv4-tcp.pcap");
|
||||||
@@ -709,12 +709,12 @@ TEST(PACKET_CRAFT_TCP, ETH_IP4_GRE_IP6_TCP)
|
|||||||
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
||||||
packet_parse(&orig_pkt, (const char *)data4, sizeof(data4));
|
packet_parse(&orig_pkt, (const char *)data4, sizeof(data4));
|
||||||
PRINT_GREEN("origin packet:");
|
PRINT_GREEN("origin packet:");
|
||||||
packet_print(&orig_pkt);
|
packet_dump_stdio(&orig_pkt);
|
||||||
|
|
||||||
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1, 2, TH_ACK, NULL, 0, "Hello", 5);
|
struct packet *new_pkt = craft_tcp_packet(&orig_pkt, 1, 2, TH_ACK, NULL, 0, "Hello", 5);
|
||||||
EXPECT_TRUE(new_pkt != nullptr);
|
EXPECT_TRUE(new_pkt != nullptr);
|
||||||
PRINT_GREEN("new packet:");
|
PRINT_GREEN("new packet:");
|
||||||
packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
|
|
||||||
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
||||||
packet_dump_pcap(new_pkt, "craft-eth-ipv4-gre-ipv6-tcp.pcap");
|
packet_dump_pcap(new_pkt, "craft-eth-ipv4-gre-ipv6-tcp.pcap");
|
||||||
@@ -936,12 +936,12 @@ TEST(PACKET_CRAFT_UDP, ETH_VLAN_IPv6_IPv4_GRE_PPP_IPv4_UDP_DNS)
|
|||||||
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
||||||
packet_parse(&orig_pkt, (const char *)data5, sizeof(data5));
|
packet_parse(&orig_pkt, (const char *)data5, sizeof(data5));
|
||||||
PRINT_GREEN("origin packet:");
|
PRINT_GREEN("origin packet:");
|
||||||
packet_print(&orig_pkt);
|
packet_dump_stdio(&orig_pkt);
|
||||||
|
|
||||||
struct packet *new_pkt = craft_udp_packet(&orig_pkt, "Hello", 5);
|
struct packet *new_pkt = craft_udp_packet(&orig_pkt, "Hello", 5);
|
||||||
EXPECT_TRUE(new_pkt != nullptr);
|
EXPECT_TRUE(new_pkt != nullptr);
|
||||||
PRINT_GREEN("new packet:");
|
PRINT_GREEN("new packet:");
|
||||||
packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
|
|
||||||
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
||||||
packet_dump_pcap(new_pkt, "craft-eth-vlan-ipv6-ipv4-gre-ppp-ipv4-udp-dns.pcap");
|
packet_dump_pcap(new_pkt, "craft-eth-vlan-ipv6-ipv4-gre-ppp-ipv4-udp-dns.pcap");
|
||||||
@@ -1060,7 +1060,7 @@ TEST(PACKET_CRAFT_L3, ETH_IP4_ICMP)
|
|||||||
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
||||||
packet_parse(&orig_pkt, (const char *)data1, sizeof(data1));
|
packet_parse(&orig_pkt, (const char *)data1, sizeof(data1));
|
||||||
PRINT_GREEN("origin packet:");
|
PRINT_GREEN("origin packet:");
|
||||||
packet_print(&orig_pkt);
|
packet_dump_stdio(&orig_pkt);
|
||||||
|
|
||||||
struct icmphdr *icmp = (struct icmphdr *)icmp_resp;
|
struct icmphdr *icmp = (struct icmphdr *)icmp_resp;
|
||||||
icmp->checksum = 0;
|
icmp->checksum = 0;
|
||||||
@@ -1069,7 +1069,7 @@ TEST(PACKET_CRAFT_L3, ETH_IP4_ICMP)
|
|||||||
struct packet *new_pkt = craft_l3_packet(&orig_pkt, IPPROTO_ICMP, (const char *)icmp_resp, sizeof(icmp_resp));
|
struct packet *new_pkt = craft_l3_packet(&orig_pkt, IPPROTO_ICMP, (const char *)icmp_resp, sizeof(icmp_resp));
|
||||||
EXPECT_TRUE(new_pkt != nullptr);
|
EXPECT_TRUE(new_pkt != nullptr);
|
||||||
PRINT_GREEN("new packet:");
|
PRINT_GREEN("new packet:");
|
||||||
packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
|
|
||||||
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
||||||
packet_dump_pcap(new_pkt, "craft-eth-ipv4-icmpv4.pcap");
|
packet_dump_pcap(new_pkt, "craft-eth-ipv4-icmpv4.pcap");
|
||||||
@@ -1145,7 +1145,7 @@ TEST(PACKET_CRAFT_L3, ETH_IP6_ICMP)
|
|||||||
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
memset(&orig_pkt, 0, sizeof(orig_pkt));
|
||||||
packet_parse(&orig_pkt, (const char *)data2, sizeof(data2));
|
packet_parse(&orig_pkt, (const char *)data2, sizeof(data2));
|
||||||
PRINT_GREEN("origin packet:");
|
PRINT_GREEN("origin packet:");
|
||||||
packet_print(&orig_pkt);
|
packet_dump_stdio(&orig_pkt);
|
||||||
|
|
||||||
struct icmp6_hdr *icmp = (struct icmp6_hdr *)icmp_resp;
|
struct icmp6_hdr *icmp = (struct icmp6_hdr *)icmp_resp;
|
||||||
icmp->icmp6_cksum = 0;
|
icmp->icmp6_cksum = 0;
|
||||||
@@ -1164,7 +1164,7 @@ TEST(PACKET_CRAFT_L3, ETH_IP6_ICMP)
|
|||||||
struct packet *new_pkt = craft_l3_packet(&orig_pkt, IPPROTO_ICMPV6, (const char *)icmp_resp, sizeof(icmp_resp));
|
struct packet *new_pkt = craft_l3_packet(&orig_pkt, IPPROTO_ICMPV6, (const char *)icmp_resp, sizeof(icmp_resp));
|
||||||
EXPECT_TRUE(new_pkt != nullptr);
|
EXPECT_TRUE(new_pkt != nullptr);
|
||||||
PRINT_GREEN("new packet:");
|
PRINT_GREEN("new packet:");
|
||||||
packet_print(new_pkt);
|
packet_dump_stdio(new_pkt);
|
||||||
|
|
||||||
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
packet_dump_hex(new_pkt, STDOUT_FILENO);
|
||||||
packet_dump_pcap(new_pkt, "craft-eth-ipv4-ipv6-icmpv6.pcap");
|
packet_dump_pcap(new_pkt, "craft-eth-ipv4-ipv6-icmpv6.pcap");
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "packet_def.h"
|
#include "packet_def.h"
|
||||||
#include "packet_ldbc.h"
|
#include "packet_ldbc.h"
|
||||||
#include "packet_parse.h"
|
#include "packet_parse.h"
|
||||||
|
#include "packet_dump.h"
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* [Protocols in frame: eth:ethertype:ip:ipv6:tcp]
|
* [Protocols in frame: eth:ethertype:ip:ipv6:tcp]
|
||||||
@@ -76,7 +77,7 @@ TEST(PACKET_LDBC, HASH_VALUE)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data, sizeof(data));
|
const char *payload = packet_parse(&handler, (const char *)data, sizeof(data));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data == 106);
|
EXPECT_TRUE((char *)payload - (char *)&data == 106);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
// buffer: "2001:da8:200:900e:200:5efe:d24d:58a3 0 2600:140e:6::1702:1058 0"
|
// buffer: "2001:da8:200:900e:200:5efe:d24d:58a3 0 2600:140e:6::1702:1058 0"
|
||||||
// buffer: "210.77.88.163 0 59.66.4.50 0"
|
// buffer: "210.77.88.163 0 59.66.4.50 0"
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "packet_parse.h"
|
#include "packet_parse.h"
|
||||||
#include "packet_utils.h"
|
#include "packet_utils.h"
|
||||||
#include "packet_layer.h"
|
#include "packet_layer.h"
|
||||||
|
#include "packet_dump.h"
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* [Protocols in frame: eth:ethertype:vlan:ethertype:vlan:ethertype:ip:ip:udp:data]
|
* [Protocols in frame: eth:ethertype:vlan:ethertype:vlan:ethertype:ip:ip:udp:data]
|
||||||
@@ -87,7 +88,7 @@ TEST(PACKET_PARSE, ETH_VLAN_VLAN_IP4_IP4_UDP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
|
const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
|
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -291,7 +292,7 @@ TEST(PACKET_PARSE, ETH_IP6_IP4_TCP_SSH)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data2, sizeof(data2));
|
const char *payload = packet_parse(&handler, (const char *)data2, sizeof(data2));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data2 == 94);
|
EXPECT_TRUE((char *)payload - (char *)&data2 == 94);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -484,7 +485,7 @@ TEST(PACKET_PARSE, ETH_VLAN_IP6_IP4_GRE_PPP_IP4_UDP_DNS)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data3, sizeof(data3));
|
const char *payload = packet_parse(&handler, (const char *)data3, sizeof(data3));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data3 == 126);
|
EXPECT_TRUE((char *)payload - (char *)&data3 == 126);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -691,7 +692,7 @@ TEST(PACKET_PARSE, ETH_IP4_IP6_TCP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data4, sizeof(data4));
|
const char *payload = packet_parse(&handler, (const char *)data4, sizeof(data4));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data4 == 106);
|
EXPECT_TRUE((char *)payload - (char *)&data4 == 106);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -846,7 +847,7 @@ TEST(PACKET_PARSE, ETH_IP6_IP6_UDP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data5, sizeof(data5));
|
const char *payload = packet_parse(&handler, (const char *)data5, sizeof(data5));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data5 == 102);
|
EXPECT_TRUE((char *)payload - (char *)&data5 == 102);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -1002,7 +1003,7 @@ TEST(PACKET_PARSE, ETH_MPLS_IP4_TCP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data6, sizeof(data6));
|
const char *payload = packet_parse(&handler, (const char *)data6, sizeof(data6));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data6 == 70);
|
EXPECT_TRUE((char *)payload - (char *)&data6 == 70);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -1169,7 +1170,7 @@ TEST(PACKET_PARSE, ETH_MPLS_MPLS_IP4_TCP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data7, sizeof(data7));
|
const char *payload = packet_parse(&handler, (const char *)data7, sizeof(data7));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data7 == 66);
|
EXPECT_TRUE((char *)payload - (char *)&data7 == 66);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -1346,7 +1347,7 @@ TEST(PACKET_PARSE, ETH_VLAN_PPPOE_IP4_TCP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data8, sizeof(data8));
|
const char *payload = packet_parse(&handler, (const char *)data8, sizeof(data8));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data8 == 78);
|
EXPECT_TRUE((char *)payload - (char *)&data8 == 78);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -1599,7 +1600,7 @@ TEST(PACKET_PARSE, ETH_IP6_UDP_GTP_IP6_TCP_TLS)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data9, sizeof(data9));
|
const char *payload = packet_parse(&handler, (const char *)data9, sizeof(data9));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data9 == 130);
|
EXPECT_TRUE((char *)payload - (char *)&data9 == 130);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -1853,7 +1854,7 @@ TEST(PACKET_PARSE, ETH_IP6_UDP_GTP_IP4_TCP_TLS)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data10, sizeof(data10));
|
const char *payload = packet_parse(&handler, (const char *)data10, sizeof(data10));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data10 == 122);
|
EXPECT_TRUE((char *)payload - (char *)&data10 == 122);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -2055,7 +2056,7 @@ TEST(PACKET_PARSE, ETH_IP4_UDP_VXLAN_ETH_IP4_UDP_DNS)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data11, sizeof(data11));
|
const char *payload = packet_parse(&handler, (const char *)data11, sizeof(data11));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data11 == 92);
|
EXPECT_TRUE((char *)payload - (char *)&data11 == 92);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -2212,7 +2213,7 @@ TEST(PACKET_PARSE, ETH_MPLS_MPLS_PWETHCW_ETH_ARP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data12, sizeof(data12));
|
const char *payload = packet_parse(&handler, (const char *)data12, sizeof(data12));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data12 == 40);
|
EXPECT_TRUE((char *)payload - (char *)&data12 == 40);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -2349,7 +2350,7 @@ TEST(PACKET_PARSE, ETH_IP4_ICMP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data13, sizeof(data13));
|
const char *payload = packet_parse(&handler, (const char *)data13, sizeof(data13));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data13 == 14 + 20 + 8);
|
EXPECT_TRUE((char *)payload - (char *)&data13 == 14 + 20 + 8);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -2455,7 +2456,7 @@ TEST(PACKET_PARSE, ETH_IP6_ICMP6)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data14, sizeof(data14));
|
const char *payload = packet_parse(&handler, (const char *)data14, sizeof(data14));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data14 == 14 + 40 + 8);
|
EXPECT_TRUE((char *)payload - (char *)&data14 == 14 + 40 + 8);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -2620,7 +2621,7 @@ TEST(PACKET_PARSE, ETH_IP4_UDP_L2TPV2_PPP_IP4_UDP)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data15, sizeof(data15));
|
const char *payload = packet_parse(&handler, (const char *)data15, sizeof(data15));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data15 == 14 + 20 + 8 + 8 + 4 + 20 + 8);
|
EXPECT_TRUE((char *)payload - (char *)&data15 == 14 + 20 + 8 + 8 + 4 + 20 + 8);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
@@ -2785,7 +2786,7 @@ TEST(PACKET_PARSE, ETH_IP4_TCP_PADDING)
|
|||||||
const char *payload = packet_parse(&handler, (const char *)data16, sizeof(data16));
|
const char *payload = packet_parse(&handler, (const char *)data16, sizeof(data16));
|
||||||
EXPECT_TRUE(payload != nullptr);
|
EXPECT_TRUE(payload != nullptr);
|
||||||
EXPECT_TRUE((char *)payload - (char *)&data16 == 14 + 20 + 20);
|
EXPECT_TRUE((char *)payload - (char *)&data16 == 14 + 20 + 20);
|
||||||
packet_print(&handler);
|
packet_dump_stdio(&handler);
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* packet_get_outermost/innermost_layer
|
* packet_get_outermost/innermost_layer
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "vxlan_utils.h"
|
#include "vxlan_utils.h"
|
||||||
#include "packet_def.h"
|
#include "packet_def.h"
|
||||||
#include "packet_parse.h"
|
#include "packet_parse.h"
|
||||||
|
#include "packet_dump.h"
|
||||||
#include "stellar/layer.h"
|
#include "stellar/layer.h"
|
||||||
#include "stellar/tunnel.h"
|
#include "stellar/tunnel.h"
|
||||||
|
|
||||||
@@ -549,7 +550,7 @@ TEST(TUNNEL, IPV4)
|
|||||||
|
|
||||||
memset(&pkt, 0, sizeof(pkt));
|
memset(&pkt, 0, sizeof(pkt));
|
||||||
packet_parse(&pkt, (const char *)data1, sizeof(data1));
|
packet_parse(&pkt, (const char *)data1, sizeof(data1));
|
||||||
packet_print(&pkt);
|
packet_dump_stdio(&pkt);
|
||||||
|
|
||||||
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
||||||
|
|
||||||
@@ -577,7 +578,7 @@ TEST(TUNNEL, GRE)
|
|||||||
|
|
||||||
memset(&pkt, 0, sizeof(pkt));
|
memset(&pkt, 0, sizeof(pkt));
|
||||||
packet_parse(&pkt, (const char *)data2, sizeof(data2));
|
packet_parse(&pkt, (const char *)data2, sizeof(data2));
|
||||||
packet_print(&pkt);
|
packet_dump_stdio(&pkt);
|
||||||
|
|
||||||
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 2);
|
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 2);
|
||||||
|
|
||||||
@@ -611,7 +612,7 @@ TEST(TUNNEL, GTP)
|
|||||||
|
|
||||||
memset(&pkt, 0, sizeof(pkt));
|
memset(&pkt, 0, sizeof(pkt));
|
||||||
packet_parse(&pkt, (const char *)data3, sizeof(data3));
|
packet_parse(&pkt, (const char *)data3, sizeof(data3));
|
||||||
packet_print(&pkt);
|
packet_dump_stdio(&pkt);
|
||||||
|
|
||||||
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
||||||
|
|
||||||
@@ -640,7 +641,7 @@ TEST(TUNNEL, VXLAN)
|
|||||||
|
|
||||||
memset(&pkt, 0, sizeof(pkt));
|
memset(&pkt, 0, sizeof(pkt));
|
||||||
packet_parse(&pkt, (const char *)data4, sizeof(data4));
|
packet_parse(&pkt, (const char *)data4, sizeof(data4));
|
||||||
packet_print(&pkt);
|
packet_dump_stdio(&pkt);
|
||||||
|
|
||||||
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
||||||
|
|
||||||
@@ -669,7 +670,7 @@ TEST(TUNNEL, L2TP)
|
|||||||
|
|
||||||
memset(&pkt, 0, sizeof(pkt));
|
memset(&pkt, 0, sizeof(pkt));
|
||||||
packet_parse(&pkt, (const char *)data5, sizeof(data5));
|
packet_parse(&pkt, (const char *)data5, sizeof(data5));
|
||||||
packet_print(&pkt);
|
packet_dump_stdio(&pkt);
|
||||||
|
|
||||||
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
||||||
|
|
||||||
@@ -698,7 +699,7 @@ TEST(TUNNEL, TEREDO)
|
|||||||
|
|
||||||
memset(&pkt, 0, sizeof(pkt));
|
memset(&pkt, 0, sizeof(pkt));
|
||||||
packet_parse(&pkt, (const char *)data6, sizeof(data6));
|
packet_parse(&pkt, (const char *)data6, sizeof(data6));
|
||||||
packet_print(&pkt);
|
packet_dump_stdio(&pkt);
|
||||||
|
|
||||||
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
EXPECT_TRUE(packet_get_tunnel_count(&pkt) == 1);
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
#include "hexdump.h"
|
#include "hexdump.h"
|
||||||
#include "session_utils.h"
|
#include "session_utils.h"
|
||||||
#include "packet_dump.h"
|
#include "packet_dump.h"
|
||||||
#include "packet_parse.h"
|
|
||||||
#include "stellar/packet.h"
|
#include "stellar/packet.h"
|
||||||
#include "stellar/stellar_mq.h"
|
#include "stellar/stellar_mq.h"
|
||||||
|
|
||||||
@@ -104,7 +103,7 @@ static void on_sess_udp_msg(struct session *sess, int topic_id, const void *msg,
|
|||||||
log_print(ctx->fd, "debug plugin", "on UDP msg: %s", buff);
|
log_print(ctx->fd, "debug plugin", "on UDP msg: %s", buff);
|
||||||
|
|
||||||
memset(buff, 0, sizeof(buff));
|
memset(buff, 0, sizeof(buff));
|
||||||
packet_to_str(pkt, buff, sizeof(buff) - 1);
|
packet_dump_str(pkt, buff, sizeof(buff) - 1);
|
||||||
log_print(ctx->fd, "debug plugin", "rx UDP packet: \n%s", buff);
|
log_print(ctx->fd, "debug plugin", "rx UDP packet: \n%s", buff);
|
||||||
|
|
||||||
pthread_spin_lock(&ctx->lock);
|
pthread_spin_lock(&ctx->lock);
|
||||||
@@ -128,7 +127,7 @@ static void on_sess_tcp_msg(struct session *sess, int topic_id, const void *msg,
|
|||||||
log_print(ctx->fd, "debug plugin", "on TCP msg: %s", buff);
|
log_print(ctx->fd, "debug plugin", "on TCP msg: %s", buff);
|
||||||
|
|
||||||
memset(buff, 0, sizeof(buff));
|
memset(buff, 0, sizeof(buff));
|
||||||
packet_to_str(pkt, buff, sizeof(buff) - 1);
|
packet_dump_str(pkt, buff, sizeof(buff) - 1);
|
||||||
log_print(ctx->fd, "debug plugin", "rx TCP packet: \n%s", buff);
|
log_print(ctx->fd, "debug plugin", "rx TCP packet: \n%s", buff);
|
||||||
|
|
||||||
pthread_spin_lock(&ctx->lock);
|
pthread_spin_lock(&ctx->lock);
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ static void packet_handler(u_char *user, const struct pcap_pkthdr *h, const u_ch
|
|||||||
if (rte->print_verbose)
|
if (rte->print_verbose)
|
||||||
{
|
{
|
||||||
PRINT_GREEN("frame=%lu len=%u", rte->pcap_count, h->caplen);
|
PRINT_GREEN("frame=%lu len=%u", rte->pcap_count, h->caplen);
|
||||||
packet_print(&pkt);
|
packet_dump_stdio(&pkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rte->tshark_format)
|
if (rte->tshark_format)
|
||||||
|
|||||||
Reference in New Issue
Block a user