/* Since two or more ippairs can have the same hash key, we need to compare * the ippair with the current addresses. */ static inline int IPPairCompare(IPPair *p, Address *a, Address *b) { /* compare in both directions */ if ((CMP_ADDR(&p->a[0], a) && CMP_ADDR(&p->a[1], b)) || (CMP_ADDR(&p->a[0], b) && CMP_ADDR(&p->a[1], a))) return 1; return 0; }
/** * \brief Compare elements into the hash table * * \param data1 First element to compare * \param len1 length of first element * \param data2 Second element to compare * \param len2 length of second element * * \retval 1 Match or 0 No Match */ char ThresholdCompareFunc(void *data1, uint16_t len1, void *data2,uint16_t len2) { SCEnter(); DetectThresholdEntry *a = (DetectThresholdEntry *)data1; DetectThresholdEntry *b = (DetectThresholdEntry *)data2; if ((a->sid == b->sid) && (a->gid == b->gid) && (CMP_ADDR(&a->addr,&b->addr))) { SCReturnInt(1); } SCReturnInt(0); }
/** * \internal * \brief This function is used to match packets with same src/dst IPs * * \param t pointer to thread vars * \param det_ctx pointer to the pattern matcher thread * \param p pointer to the current packet * \param m pointer to the sigmatch that we will cast into DetectSameipData * * \retval 0 no match * \retval 1 match */ static int DetectSameipMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx, Packet *p, Signature *s, const SigMatchCtx *ctx) { return CMP_ADDR(&p->src, &p->dst) ? 1 : 0; }