bugfix: calculate L2TPv2 offset

This commit is contained in:
luwenpeng
2024-05-30 18:45:39 +08:00
parent 1a7f74025b
commit 2d958dbe07
3 changed files with 32 additions and 29 deletions

View File

@@ -15,34 +15,23 @@ 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)
switch (next_hdr)
{
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;
case IPPROTO_HOPOPTS:
used += snprintf(buff + used, size - used, ":ipv6.hopopt");
break;
case IPPROTO_ROUTING:
used += snprintf(buff + used, size - used, ":ipv6.routing");
break;
case IPPROTO_AH:
used += snprintf(buff + used, size - used, ":ipv6.ah");
break;
case IPPROTO_DSTOPTS:
used += snprintf(buff + used, size - used, ":ipv6.dstopts");
break;
default:
break;
}
return used;
@@ -73,7 +62,7 @@ static int packet_proto_to_str(const struct packet *pkt, char *buff, int size)
used += snprintf(buff + used, size - used, "vlan:ethertype");
break;
case LAYER_TYPE_PPPOE:
used += snprintf(buff + used, size - used, "pppoe");
used += snprintf(buff + used, size - used, "pppoes:ppp");
break;
case LAYER_TYPE_MPLS:
used += snprintf(buff + used, size - used, "mpls");