diff --git a/src/util-validate.h b/src/util-validate.h index 670f3acf25..3dd6c6eb3b 100644 --- a/src/util-validate.h +++ b/src/util-validate.h @@ -33,33 +33,56 @@ #ifdef DEBUG_VALIDATION +/** \brief validate the integrity of the flow + * + * BUG_ON's on problems + */ +#define DEBUG_VALIDATE_FLOW(f) do { \ + if ((f) != NULL) { \ + SCMutexLock(&(f)->m); \ + BUG_ON((f)->flags & FLOW_IPV4 && \ + (f)->flags & FLOW_IPV6); \ + if ((f)->proto == IPPROTO_TCP) { \ + BUG_ON((f)->alstate != NULL && \ + (f)->alparser == NULL); \ + } \ + SCMutexUnlock(&(f)->m); \ + } \ +} while(0) + /** \brief validate the integrity of the packet * * BUG_ON's on problems */ -#define DEBUG_VALIDATE_PACKET(p) do { \ - if ((p) != NULL) { \ - if ((p)->proto == IPPROTO_TCP) { \ - BUG_ON((p)->tcph == NULL); \ - } else if ((p)->proto == IPPROTO_UDP) { \ - BUG_ON((p)->udph == NULL); \ - } else if ((p)->proto == IPPROTO_ICMP) { \ - BUG_ON((p)->icmpv4h == NULL); \ - } else if ((p)->proto == IPPROTO_SCTP) { \ - BUG_ON((p)->sctph == NULL); \ - } else if ((p)->proto == IPPROTO_ICMPV6) { \ - BUG_ON((p)->icmpv6h == NULL); \ - } \ - if ((p)->payload_len > 0) { \ - BUG_ON((p)->payload == NULL); \ - } \ - BUG_ON((p)->ip4h != NULL && (p)->ip6h != NULL); \ - BUG_ON((p)->flowflags != 0 && (p)->flow == NULL); \ - } \ - } while(0) +#define DEBUG_VALIDATE_PACKET(p) do { \ + if ((p) != NULL) { \ + if ((p)->flow != NULL) { \ + DEBUG_VALIDATE_FLOW((p)->flow); \ + } \ + if ((p)->proto == IPPROTO_TCP) { \ + BUG_ON((p)->tcph == NULL); \ + } else if ((p)->proto == IPPROTO_UDP) { \ + BUG_ON((p)->udph == NULL); \ + } else if ((p)->proto == IPPROTO_ICMP) { \ + BUG_ON((p)->icmpv4h == NULL); \ + } else if ((p)->proto == IPPROTO_SCTP) { \ + BUG_ON((p)->sctph == NULL); \ + } else if ((p)->proto == IPPROTO_ICMPV6) { \ + BUG_ON((p)->icmpv6h == NULL); \ + } \ + if ((p)->payload_len > 0) { \ + BUG_ON((p)->payload == NULL); \ + } \ + BUG_ON((p)->ip4h != NULL && (p)->ip6h != NULL); \ + BUG_ON((p)->flowflags != 0 && (p)->flow == NULL); \ + BUG_ON((p)->flowflags & FLOW_PKT_TOSERVER &&\ + (p)->flowflags & FLOW_PKT_TOCLIENT); \ + } \ +} while(0) #else /* DEBUG_VALIDATE */ +#define DEBUG_VALIDATE_FLOW(f) #define DEBUG_VALIDATE_PACKET(p) #endif /* DEBUG_VALIDATE */