/** \todo What if more data exist after EOL (possible covert channel or data leakage)? */
SCLogDebug("IPV4OPT %" PRIu16 " len 1 @ %" PRIu16 "/%" PRIu16 "",
*pkt, (len - plen), (len - 1));
- p->ip4vars.eol = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_EOL;
break;
} else if (*pkt == IPV4_OPT_NOP) {
SCLogDebug("IPV4OPT %" PRIu16 " len 1 @ %" PRIu16 "/%" PRIu16 "",
pkt++;
plen--;
- p->ip4vars.nop = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_NOP;
/* multibyte options */
} else {
return -1;
}
opts->o_ts = opt;
- p->ip4vars.ts = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_TS;
break;
case IPV4_OPT_RR:
if (opts->o_rr.type != 0) {
return -1;
}
opts->o_rr = opt;
- p->ip4vars.rr = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_RR;
break;
case IPV4_OPT_QS:
if (opts->o_qs.type != 0) {
return -1;
}
opts->o_qs = opt;
- p->ip4vars.qs = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_QS;
break;
case IPV4_OPT_SEC:
if (opts->o_sec.type != 0) {
return -1;
}
opts->o_sec = opt;
- p->ip4vars.sec = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_SEC;
break;
case IPV4_OPT_LSRR:
if (opts->o_lsrr.type != 0) {
return -1;
}
opts->o_lsrr = opt;
- p->ip4vars.lsrr = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_LSRR;
break;
case IPV4_OPT_CIPSO:
if (opts->o_cipso.type != 0) {
return -1;
}
opts->o_cipso = opt;
- p->ip4vars.cipso = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_CIPSO;
break;
case IPV4_OPT_SID:
if (opts->o_sid.type != 0) {
return -1;
}
opts->o_sid = opt;
- p->ip4vars.sid = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_SID;
break;
case IPV4_OPT_SSRR:
if (opts->o_ssrr.type != 0) {
return -1;
}
opts->o_ssrr = opt;
- p->ip4vars.ssrr = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_SSRR;
break;
case IPV4_OPT_RTRALT:
if (opts->o_rtralt.type != 0) {
return -1;
}
opts->o_rtralt = opt;
- p->ip4vars.rtralt = TRUE;
+ p->ip4vars.opts_set |= IPV4_OPT_FLAG_RTRALT;
break;
default:
SCLogDebug("IPV4OPT <unknown> (%" PRIu8 ") len %" PRIu8,
switch (de->ipopt) {
case IPV4_OPT_RR:
- return (p->ip4vars.rr);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_RR);
break;
case IPV4_OPT_LSRR:
- return (p->ip4vars.lsrr);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_LSRR);
break;
case IPV4_OPT_EOL:
- return (p->ip4vars.eol);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_EOL);
break;
case IPV4_OPT_NOP:
- return (p->ip4vars.nop);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_NOP);
break;
case IPV4_OPT_TS:
- return (p->ip4vars.ts);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_TS);
break;
case IPV4_OPT_SEC:
- return (p->ip4vars.sec);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_SEC);
break;
case IPV4_OPT_SSRR:
- return (p->ip4vars.ssrr);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_SSRR);
break;
case IPV4_OPT_SID:
- return (p->ip4vars.sid);
+ return (p->ip4vars.opts_set & IPV4_OPT_FLAG_SID);
break;
}
memset(&ip4h, 0, sizeof(IPV4Hdr));
p->ip4h = &ip4h;
- p->ip4vars.rr = TRUE;
+ p->ip4vars.opts_set = IPV4_OPT_FLAG_RR;
de = DetectIpOptsParse("rr");
memset(&ip4h, 0, sizeof(IPV4Hdr));
p->ip4h = &ip4h;
- p->ip4vars.rr = TRUE;
+ p->ip4vars.opts_set = IPV4_OPT_FLAG_RR;
de = DetectIpOptsParse("lsrr");