Go to the documentation of this file.
45 #define TEREDO_ORIG_INDICATION_LENGTH 8
46 #define TEREDO_MAX_PORTS 4
47 #define TEREDO_UNSET_PORT -1
49 static bool g_teredo_enabled =
true;
50 static bool g_teredo_ports_any =
true;
51 static int g_teredo_ports_cnt = 0;
57 SCLogDebug(
"ports %u->%u ports %d %d %d %d", sp, dp, g_teredo_ports[0], g_teredo_ports[1],
58 g_teredo_ports[2], g_teredo_ports[3]);
60 if (g_teredo_enabled) {
62 if (g_teredo_ports_any) {
66 for (
int i = 0; i < g_teredo_ports_cnt; i++) {
69 const int port = g_teredo_ports[i];
70 if (port == (
const int)sp || port == (
const int)dp)
77 static void DecodeTeredoConfigPorts(
const char *pstr)
81 if (strcmp(pstr,
"any") == 0) {
82 g_teredo_ports_any =
true;
89 g_teredo_ports_any =
false;
90 g_teredo_ports_cnt = 0;
97 g_teredo_ports[g_teredo_ports_cnt++] = (int)p->port;
106 if (
ConfGetBool(
"decoder.teredo.enabled", &enabled) == 1) {
108 g_teredo_enabled =
true;
110 g_teredo_enabled =
false;
113 if (g_teredo_enabled) {
115 if (node && node->
val) {
116 DecodeTeredoConfigPorts(node->
val);
127 const uint8_t *pkt, uint16_t
len)
131 if (!g_teredo_enabled)
134 const uint8_t *start = pkt;
143 if (start[0] == 0x0) {
145 if (start[1] == 0x0) {
184 int blen =
len - (start - pkt);
#define IPV6_GET_RAW_PLEN(ip6h)
void StatsIncr(ThreadVars *tv, uint16_t id)
Increments the local counter.
#define IPV6_GET_RAW_HLIM(ip6h)
#define IPV6_GET_RAW_NH(ip6h)
int ConfGetBool(const char *name, int *val)
Retrieve a configuration value as an boolen.
void DecodeTeredoConfig(void)
@ DECODE_TUNNEL_IPV6_TEREDO
ConfNode * ConfGetNode(const char *name)
Get a ConfNode by name.
#define IP_GET_RAW_VER(pkt)
#define PKT_SET_SRC(p, src_val)
int DetectPortParse(const DetectEngineCtx *de_ctx, DetectPort **head, const char *str)
Function for parsing port strings.
bool DecodeTeredoEnabledForPort(const uint16_t sp, const uint16_t dp)
Per thread variable structure.
Port structure for detection engine.
@ SC_ERR_INVALID_YAML_CONF_ENTRY
void PacketEnqueueNoLock(PacketQueueNoLock *qnl, Packet *p)
#define TEREDO_UNSET_PORT
#define TEREDO_ORIG_INDICATION_LENGTH
#define SCLogWarning(err_code,...)
Macro used to log WARNING messages.
Structure to hold thread specific data for all decode modules.
PacketQueueNoLock decode_pq
Packet * PacketTunnelPktSetup(ThreadVars *tv, DecodeThreadVars *dtv, Packet *parent, const uint8_t *pkt, uint32_t len, enum DecodeTunnelProto proto)
Setup a pseudo packet (tunnel)
void DetectPortCleanupList(const DetectEngineCtx *de_ctx, DetectPort *head)
Free a DetectPort list and each of its members.
#define DEBUG_VALIDATE_BUG_ON(exp)
int DecodeTeredo(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, const uint8_t *pkt, uint16_t len)
Function to decode Teredo packets.