Take less space in the TCPVars for tracking if SACKOK is set.
Reduces size by 16 bytes.
Ticket: #6938.
if (olen != TCP_OPT_SACKOK_LEN) {
ENGINE_SET_EVENT(p,TCP_OPT_INVALID_LEN);
} else {
- if (p->tcpvars.sackok.type != 0) {
+ if (TCP_GET_SACKOK(p)) {
ENGINE_SET_EVENT(p,TCP_OPT_DUPLICATE);
} else {
- SET_OPTS(p->tcpvars.sackok, tcp_opts[tcp_opt_cnt]);
+ p->tcpvars.sack_ok = true;
}
}
break;
StatsIncr(tv, dtv->counter_tcp_rst);
}
#ifdef DEBUG
- SCLogDebug("TCP sp: %" PRIu32 " -> dp: %" PRIu32 " - HLEN: %" PRIu32 " LEN: %" PRIu32 " %s%s%s%s%s%s",
- GET_TCP_SRC_PORT(p), GET_TCP_DST_PORT(p), TCP_GET_HLEN(p), len,
- TCP_HAS_SACKOK(p) ? "SACKOK " : "", TCP_HAS_SACK(p) ? "SACK " : "",
- TCP_HAS_WSCALE(p) ? "WS " : "", TCP_HAS_TS(p) ? "TS " : "",
- TCP_HAS_MSS(p) ? "MSS " : "", TCP_HAS_TFO(p) ? "TFO " : "");
+ SCLogDebug("TCP sp: %" PRIu32 " -> dp: %" PRIu32 " - HLEN: %" PRIu32 " LEN: %" PRIu32
+ " %s%s%s%s%s%s",
+ GET_TCP_SRC_PORT(p), GET_TCP_DST_PORT(p), TCP_GET_HLEN(p), len,
+ TCP_GET_SACKOK(p) ? "SACKOK " : "", TCP_HAS_SACK(p) ? "SACK " : "",
+ TCP_HAS_WSCALE(p) ? "WS " : "", TCP_HAS_TS(p) ? "TS " : "",
+ TCP_HAS_MSS(p) ? "MSS " : "", TCP_HAS_TFO(p) ? "TFO " : "");
#endif
FlowSetupPacket(p);
#define TCP_HAS_WSCALE(p) ((p)->tcpvars.ws.type == TCP_OPT_WS)
#define TCP_HAS_SACK(p) ((p)->tcpvars.sack.type == TCP_OPT_SACK)
-#define TCP_HAS_SACKOK(p) ((p)->tcpvars.sackok.type == TCP_OPT_SACKOK)
#define TCP_HAS_TS(p) ((p)->tcpvars.ts_set)
#define TCP_HAS_MSS(p) ((p)->tcpvars.mss.type == TCP_OPT_MSS)
#define TCP_HAS_TFO(p) ((p)->tcpvars.tfo.type == TCP_OPT_TFO)
(((*(uint8_t *)(p)->tcpvars.ws.data) <= TCP_WSCALE_MAX) ? \
(*(uint8_t *)((p)->tcpvars.ws.data)) : 0) : 0)
-#define TCP_GET_SACKOK(p) (TCP_HAS_SACKOK((p)) ? 1 : 0)
+#define TCP_GET_SACKOK(p) (p)->tcpvars.sack_ok
#define TCP_GET_SACK_PTR(p) TCP_HAS_SACK((p)) ? (p)->tcpvars.sack.data : NULL
#define TCP_GET_SACK_CNT(p) (TCP_HAS_SACK((p)) ? (((p)->tcpvars.sack.len - 2) / 8) : 0)
#define TCP_GET_MSS(p) SCNtohs(*(uint16_t *)((p)->tcpvars.mss.data))
bool md5_option_present;
bool ao_option_present;
bool ts_set;
+ bool sack_ok;
uint32_t ts_val; /* host-order */
uint32_t ts_ecr; /* host-order */
uint16_t stream_pkt_flags;
TCPOpt sack;
- TCPOpt sackok;
TCPOpt ws;
TCPOpt mss;
TCPOpt tfo; /* tcp fast open */
ssn->client.last_ts = 0;
}
- if (TCP_GET_SACKOK(p) == 1) {
+ if (TCP_GET_SACKOK(p)) {
ssn->flags |= STREAMTCP_FLAG_SACKOK;
SCLogDebug("ssn %p: SYN/ACK with SACK permitted, assuming "
"SACK permitted for both sides", ssn);
ssn->server.wscale = TCP_GET_WSCALE(p);
}
- if (TCP_GET_SACKOK(p) == 1) {
+ if (TCP_GET_SACKOK(p)) {
ssn->flags |= STREAMTCP_FLAG_CLIENT_SACKOK;
SCLogDebug("ssn %p: SACK permitted on SYN packet", ssn);
}
q->ack = TCP_GET_ACK(p);
q->pkt_ts = SCTIME_SECS(p->ts);
- if (TCP_GET_SACKOK(p) == 1)
+ if (TCP_GET_SACKOK(p))
q->flags |= STREAMTCP_QUEUE_FLAG_SACK;
if (TCP_HAS_WSCALE(p)) {
q->win = TCP_GET_WINDOW(p);
q->pkt_ts = SCTIME_SECS(p->ts);
- if (TCP_GET_SACKOK(p) == 1) {
+ if (TCP_GET_SACKOK(p)) {
q->flags |= STREAMTCP_QUEUE_FLAG_SACK;
}
if (TCP_HAS_WSCALE(p)) {
q->win = TCP_GET_WINDOW(p);
q->pkt_ts = SCTIME_SECS(p->ts);
- if (TCP_GET_SACKOK(p) == 1) {
+ if (TCP_GET_SACKOK(p)) {
q->flags |= STREAMTCP_QUEUE_FLAG_SACK;
}
if (TCP_HAS_WSCALE(p)) {
ssn->server.wscale = 0;
}
- if ((ssn->flags & STREAMTCP_FLAG_CLIENT_SACKOK) && TCP_GET_SACKOK(p) == 1) {
+ if ((ssn->flags & STREAMTCP_FLAG_CLIENT_SACKOK) && TCP_GET_SACKOK(p)) {
ssn->flags |= STREAMTCP_FLAG_SACKOK;
SCLogDebug("ssn %p: SACK permitted for 4WHS session", ssn);
}
ssn->server.wscale = 0;
}
- if (TCP_GET_SACKOK(p) == 1) {
+ if (TCP_GET_SACKOK(p)) {
ssn->flags |= STREAMTCP_FLAG_CLIENT_SACKOK;
} else {
ssn->flags &= ~STREAMTCP_FLAG_CLIENT_SACKOK;