From b728916ca685e18c77f24ebabc86a8e8c160605a Mon Sep 17 00:00:00 2001 From: Giuseppe Longo Date: Mon, 18 Mar 2024 11:02:16 +0100 Subject: [PATCH] decode/gre: decode arp packets --- src/decode-gre.c | 10 ++++++++++ src/decode.c | 3 +++ src/decode.h | 1 + 3 files changed, 14 insertions(+) diff --git a/src/decode-gre.c b/src/decode-gre.c index 4fe0bcab5f85..a383c815c2cf 100644 --- a/src/decode-gre.c +++ b/src/decode-gre.c @@ -274,6 +274,16 @@ int DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, const uint8_t *p break; } + case ETHERNET_TYPE_ARP: { + Packet *tp = PacketTunnelPktSetup( + tv, dtv, p, pkt + header_len, len - header_len, DECODE_TUNNEL_ARP); + if (tp != NULL) { + PKT_SET_SRC(tp, PKT_SRC_DECODER_GRE); + PacketEnqueueNoLock(&tv->decode_pq, tp); + } + break; + } + default: return TM_ECODE_OK; } diff --git a/src/decode.c b/src/decode.c index 0f4c84eba59f..ff99f9a77e4d 100644 --- a/src/decode.c +++ b/src/decode.c @@ -61,6 +61,7 @@ #include "decode-geneve.h" #include "decode-erspan.h" #include "decode-teredo.h" +#include "decode-arp.h" #include "defrag-hash.h" @@ -177,6 +178,8 @@ static int DecodeTunnel(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, const return DecodeERSPANTypeI(tv, dtv, p, pkt, len); case DECODE_TUNNEL_NSH: return DecodeNSH(tv, dtv, p, pkt, len); + case DECODE_TUNNEL_ARP: + return DecodeARP(tv, dtv, p, pkt, len); default: SCLogDebug("FIXME: DecodeTunnel: protocol %" PRIu32 " not supported.", proto); break; diff --git a/src/decode.h b/src/decode.h index 168253750b90..2f282e0621b0 100644 --- a/src/decode.h +++ b/src/decode.h @@ -1091,6 +1091,7 @@ enum DecodeTunnelProto { DECODE_TUNNEL_IPV6_TEREDO, /**< separate protocol for stricter error handling */ DECODE_TUNNEL_PPP, DECODE_TUNNEL_NSH, + DECODE_TUNNEL_ARP, DECODE_TUNNEL_UNSET };