Optimize GTP utility functions

This commit is contained in:
luwenpeng
2024-07-11 14:19:38 +08:00
parent d816ad058f
commit 6d552acfd0
6 changed files with 69 additions and 45 deletions

View File

@@ -11,8 +11,7 @@
#include "tcp_utils.h"
#include "ip4_utils.h"
#include "ip6_utils.h"
#include "gtp1_utils.h"
#include "gtp2_utils.h"
#include "gtp_utils.h"
#include "mpls_utils.h"
#include "l2tp_utils.h"
#include "vlan_utils.h"
@@ -689,7 +688,7 @@ static inline const char *parse_gre(struct packet *pkt, const char *data, uint16
{
return data;
}
uint16_t next_proto = gre_hdr_get_proto((const struct gre_hdr *)data);
uint16_t next_proto = peek_gre_proto(data, len);
SET_LAYER(pkt, layer, LAYER_PROTO_GRE, hdr_len, data, len, 0);
return parse_l3(pkt, next_proto, layer->pld_ptr, layer->pld_len);
@@ -856,7 +855,7 @@ static inline const char *parse_gtp_u(struct packet *pkt, const char *data, uint
return data;
}
uint16_t hdr_len = calc_gtp1_hdr_len(data, len);
uint16_t hdr_len = calc_gtp_hdr_len(data, len);
if (unlikely(hdr_len == 0 || hdr_len > len))
{
PACKET_LOG_DATA_INSUFFICIENCY(pkt, LAYER_PROTO_GTP_U);
@@ -886,20 +885,7 @@ static inline const char *parse_gtp_u(struct packet *pkt, const char *data, uint
static inline const char *parse_gtp_c(struct packet *pkt, const char *data, uint16_t len)
{
// GTPv1-C or GTPv2-C
uint16_t hdr_len = 0;
uint8_t version = peek_gtp_version(data, len);
switch (version)
{
case 1:
hdr_len = calc_gtp1_hdr_len(data, len);
break;
case 2:
hdr_len = calc_gtp2_hdr_len(data, len);
break;
default:
return data;
}
uint16_t hdr_len = calc_gtp_hdr_len(data, len);
if (unlikely(hdr_len == 0 || hdr_len > len))
{
PACKET_LOG_DATA_INSUFFICIENCY(pkt, LAYER_PROTO_GTP_C);
@@ -1033,7 +1019,7 @@ void packet_print(const struct packet *pkt)
case LAYER_PROTO_IPAH:
break;
case LAYER_PROTO_GRE:
used = gre_hdr_to_str((const struct gre_hdr *)layer->hdr_ptr, buffer, sizeof(buffer));
used = gre_hdr_to_str(layer->hdr_ptr, layer->hdr_len, buffer, sizeof(buffer));
break;
case LAYER_PROTO_UDP:
used = udp_hdr_to_str((const struct udphdr *)layer->hdr_ptr, buffer, sizeof(buffer));
@@ -1050,14 +1036,7 @@ void packet_print(const struct packet *pkt)
break;
case LAYER_PROTO_GTP_C:
case LAYER_PROTO_GTP_U:
if (peek_gtp_version(layer->hdr_ptr, layer->hdr_len) == 1)
{
used = gtp1_hdr_to_str((const struct gtp1_hdr *)layer->hdr_ptr, buffer, sizeof(buffer));
}
if (peek_gtp_version(layer->hdr_ptr, layer->hdr_len) == 2)
{
used = gtp2_hdr_to_str((const struct gtp2_hdr *)layer->hdr_ptr, buffer, sizeof(buffer));
}
used = gtp_hdr_to_str(layer->hdr_ptr, layer->hdr_len, buffer, sizeof(buffer));
break;
default:
break;