Add packet helpers

This commit is contained in:
luwenpeng
2023-12-18 16:51:17 +08:00
parent dda0cdf104
commit 2e56bd810c
7 changed files with 1110 additions and 25 deletions

View File

@@ -419,15 +419,18 @@ static inline struct layer_record *get_free_layer(struct packet *handler)
return &handler->layers[handler->layers_used];
}
#define SET_LAYER(_handler, _layer, _type, _hdr_len, _data, _len) \
{ \
(_layer)->type = (_type); \
(_layer)->hdr_offset = (_handler)->data_len - (_len); \
(_layer)->hdr_ptr = (_data); \
(_layer)->hdr_len = (_hdr_len); \
(_layer)->pld_ptr = (_data) + (_hdr_len); \
(_layer)->pld_len = (_len) - (_hdr_len); \
(_handler)->layers_used++; \
#define SET_LAYER(_handler, _layer, _type, _hdr_len, _data, _len) \
{ \
(_layer)->type = (_type); \
(_layer)->hdr_offset = (_handler)->data_len - (_len); \
(_layer)->hdr_ptr = (_data); \
(_layer)->hdr_len = (_hdr_len); \
(_layer)->pld_ptr = (_data) + (_hdr_len); \
(_layer)->pld_len = (_len) - (_hdr_len); \
(_handler)->layers_used++; \
PACKET_LOG_DEBUG("%s: layer[%d/%d]: %s, hdr_offset: %d, hdr_ptr: %p, hdr_len: %d, pld_ptr: %p, pld_len: %d", \
LOG_PACKET, (_handler)->layers_used - 1, (_handler)->layers_size, layer_type_tostring((_type)), \
(_layer)->hdr_offset, (_layer)->hdr_ptr, (_layer)->hdr_len, (_layer)->pld_ptr, (_layer)->pld_len); \
}
/******************************************************************************
@@ -859,6 +862,13 @@ static inline const char *parse_ipv4(struct packet *handler, const char *data, u
uint16_t hdr_len = (hdr->ip_hl & 0xf) * 4u;
SET_LAYER(handler, layer, LAYER_TYPE_IPV4, hdr_len, data, len);
// ip fragmented
if ((ntohs(hdr->ip_off) & IP_MF) || (ntohs(hdr->ip_off) & IP_OFFMASK))
{
PACKET_LOG_DEBUG("%s: ip is fragmented", LOG_PACKET);
return layer->pld_ptr;
}
// TESTED
return parse_l4(handler, next_proto, layer->pld_ptr, layer->pld_len);
}