packet parser suppoort skip IPv6 extension headers
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include <unistd.h>
|
||||
#include <pcap/pcap.h>
|
||||
#include "ipv6_utils.h"
|
||||
#include "packet_priv.h"
|
||||
|
||||
struct options
|
||||
@@ -11,6 +12,42 @@ struct options
|
||||
|
||||
static uint64_t number = 0;
|
||||
|
||||
static int ipv6_proto_to_str(const struct packet_layer *ipv6_layer, char *buff, int size)
|
||||
{
|
||||
int used = snprintf(buff, size, "ipv6");
|
||||
uint16_t skip_len = sizeof(struct ip6_hdr);
|
||||
uint8_t next_hdr = ipv6_hdr_get_next_header((const struct ip6_hdr *)ipv6_layer->hdr_ptr);
|
||||
while (skip_len < ipv6_layer->hdr_len)
|
||||
{
|
||||
if (next_hdr == IPPROTO_HOPOPTS)
|
||||
{
|
||||
used += snprintf(buff + used, size - used, ":ipv6.hopopt");
|
||||
}
|
||||
else if (next_hdr == IPPROTO_ROUTING)
|
||||
{
|
||||
used += snprintf(buff + used, size - used, ":ipv6.routing");
|
||||
}
|
||||
else if (next_hdr == IPPROTO_AH)
|
||||
{
|
||||
used += snprintf(buff + used, size - used, ":ipv6.ah");
|
||||
}
|
||||
else if (next_hdr == IPPROTO_DSTOPTS)
|
||||
{
|
||||
used += snprintf(buff + used, size - used, ":ipv6.dstopts");
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
struct ip6_ext *ext = (struct ip6_ext *)ipv6_layer->hdr_ptr + skip_len;
|
||||
skip_len += ext->ip6e_len * 8 + 8;
|
||||
next_hdr = ext->ip6e_nxt;
|
||||
}
|
||||
|
||||
return used;
|
||||
}
|
||||
|
||||
static int packet_proto_to_str(const struct packet *pkt, char *buff, int size)
|
||||
{
|
||||
int used = 0;
|
||||
@@ -45,7 +82,7 @@ static int packet_proto_to_str(const struct packet *pkt, char *buff, int size)
|
||||
used += snprintf(buff + used, size - used, "ip");
|
||||
break;
|
||||
case LAYER_TYPE_IPV6:
|
||||
used += snprintf(buff + used, size - used, "ipv6");
|
||||
used += ipv6_proto_to_str(layer, buff + used, size - used);
|
||||
break;
|
||||
case LAYER_TYPE_GRE:
|
||||
used += snprintf(buff + used, size - used, "gre");
|
||||
|
||||
Reference in New Issue
Block a user