Optimize GTP utility functions
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user