Add packet helpers
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user