57 if (host_tag_id.
id == -1) {
58 FatalError(
"Can't initiate host storage for tag");
61 if (flow_tag_id.
id == -1) {
62 FatalError(
"Can't initiate flow storage for tag");
118 uint16_t tag_cnt = 0;
127 for (; iter != NULL; iter = iter->
next) {
150 if (new_tde != NULL) {
158 SCLogDebug(
"Max tags for sessions reached (%"PRIu16
")", tag_cnt);
198 if (new_tde != NULL) {
210 for (iter =
tag; iter != NULL; iter = iter->
next) {
231 if (new_tde != NULL) {
238 SCLogDebug(
"Max tags for sessions reached (%"PRIu16
")", ntags);
246 static void TagHandlePacketFlow(
Flow *f,
Packet *p)
254 uint8_t flag_added = 0;
256 while (iter != NULL) {
278 SCLogDebug(
"flow tag expired: packets %u > %u",
296 }
else if (flag_added == 0) {
323 }
else if (flag_added == 0) {
335 SCLogDebug(
"flow tag expired: %" PRIu64
" - %" PRIu64
" = %" PRIu64
" > %u",
357 }
else if (flag_added == 0) {
373 static void TagHandlePacketHost(
Host *host,
Packet *p)
378 uint8_t flag_added = 0;
382 while (iter != NULL) {
420 }
else if (flag_added == 0) {
446 }
else if (flag_added == 0) {
457 SCLogDebug(
"host tag expired: %" PRIu64
" - %" PRIu64
" = %" PRIu64
" > %u",
479 }
else if (flag_added == 0) {
529 if (current_tags == 0)
533 if (p->
flow != NULL) {
534 TagHandlePacketFlow(p->
flow, p);
537 Host *
src = GetLockedSrcHost(p);
540 TagHandlePacketHost(
src, p);
545 Host *
dst = GetLockedDstHost(p);
548 TagHandlePacketHost(
dst, p);
577 while (tmp != NULL) {
614 static int DetectTagTestPacket01 (
void)
616 uint8_t *buf = (uint8_t *)
"Hi all!";
617 uint8_t *buf2 = (uint8_t *)
"lalala!";
618 uint16_t buf_len = strlen((
char *)buf);
619 uint16_t buf_len2 = strlen((
char *)buf2);
623 "192.168.1.5",
"192.168.1.1",
626 "192.168.1.5",
"192.168.1.1",
629 "192.168.1.5",
"192.168.1.9",
632 "192.168.1.5",
"192.168.1.9",
635 "192.168.1.1",
"192.168.1.9",
638 "192.168.1.1",
"192.168.1.11",
641 "192.168.1.5",
"192.168.1.11",
645 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host,3,packets,src; sid:1;)";
646 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host,4,packets,dst; sid:2;)";
647 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
648 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
649 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
652 uint32_t sid[5] = {1,2,3,4,5};
654 int32_t results[7][5] = {
705 static int DetectTagTestPacket02 (
void)
707 uint8_t *buf = (uint8_t *)
"Hi all!";
708 uint8_t *buf2 = (uint8_t *)
"lalala!";
709 uint16_t buf_len = strlen((
char *)buf);
710 uint16_t buf_len2 = strlen((
char *)buf2);
716 memset(&th_v, 0,
sizeof(th_v));
731 "192.168.1.5",
"192.168.1.1",
734 "192.168.1.5",
"192.168.1.1",
737 "192.168.1.5",
"192.168.1.9",
740 "192.168.1.5",
"192.168.1.9",
743 "192.168.1.1",
"192.168.1.9",
746 "192.168.1.1",
"192.168.1.11",
749 "192.168.1.5",
"192.168.1.11",
753 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host,3,seconds,src; sid:1;)";
754 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host,8,seconds,dst; sid:2;)";
755 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
756 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
757 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
760 uint32_t sid[5] = {1,2,3,4,5};
767 int32_t results[7][5] = {
782 for (; i < num_packets; i++) {
792 bool expect = (i == 1 || i == 4);
810 static int DetectTagTestPacket03 (
void)
812 uint8_t *buf = (uint8_t *)
"Hi all!";
813 uint8_t *buf2 = (uint8_t *)
"lalala!";
814 uint16_t buf_len = strlen((
char *)buf);
815 uint16_t buf_len2 = strlen((
char *)buf2);
821 memset(&th_v, 0,
sizeof(th_v));
837 "192.168.1.5",
"192.168.1.1",
840 "192.168.1.5",
"192.168.1.1",
843 "192.168.1.5",
"192.168.1.9",
846 "192.168.1.5",
"192.168.1.9",
849 "192.168.1.1",
"192.168.1.9",
852 "192.168.1.1",
"192.168.1.11",
855 "192.168.1.5",
"192.168.1.11",
859 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host, 150, bytes, src; sid:1;)";
860 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host, 150, bytes, dst; sid:2;)";
861 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
862 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
863 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
866 uint32_t sid[5] = {1,2,3,4,5};
871 int32_t results[7][5] = {
886 for (; i < num_packets; i++) {
894 bool expect = (i == 1 || i == 2 || i == 4);
912 static int DetectTagTestPacket04 (
void)
914 uint8_t *buf = (uint8_t *)
"Hi all!";
915 uint8_t *buf2 = (uint8_t *)
"lalala!";
916 uint16_t buf_len = strlen((
char *)buf);
917 uint16_t buf_len2 = strlen((
char *)buf2);
920 memset(&ssn, 0,
sizeof(ssn));
934 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5", f->
src.addr_data32) != 1);
935 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1", f->
dst.addr_data32) != 1);
941 memset(&th_v, 0,
sizeof(th_v));
950 "192.168.1.5",
"192.168.1.1",
953 "192.168.1.5",
"192.168.1.1",
956 "192.168.1.5",
"192.168.1.1",
959 "192.168.1.5",
"192.168.1.1",
962 "192.168.1.1",
"192.168.1.5",
965 "192.168.1.1",
"192.168.1.5",
968 "192.168.1.5",
"192.168.1.1",
972 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,4,packets; sid:1;)";
973 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
974 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
975 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
976 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
979 uint32_t sid[5] = {1,2,3,4,5};
984 int32_t results[7][5] = {
999 for (; i < num_packets; i++) {
1008 bool expect = (i == 1 || i == 2 || i == 3);
1033 static int DetectTagTestPacket05 (
void)
1035 uint8_t *buf = (uint8_t *)
"Hi all!";
1036 uint8_t *buf2 = (uint8_t *)
"lalala!";
1037 uint16_t buf_len = strlen((
char *)buf);
1038 uint16_t buf_len2 = strlen((
char *)buf2);
1041 memset(&ssn, 0,
sizeof(ssn));
1055 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5", f->
src.addr_data32) != 1);
1056 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1", f->
dst.addr_data32) != 1);
1062 memset(&th_v, 0,
sizeof(th_v));
1071 "192.168.1.5",
"192.168.1.1",
1074 "192.168.1.5",
"192.168.1.1",
1077 "192.168.1.5",
"192.168.1.1",
1080 "192.168.1.5",
"192.168.1.1",
1083 "192.168.1.1",
"192.168.1.5",
1086 "192.168.1.1",
"192.168.1.5",
1089 "192.168.1.5",
"192.168.1.1",
1092 const char *sigs[5];
1093 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,8,seconds; sid:1;)";
1094 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1095 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1096 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1097 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1100 uint32_t sid[5] = {1,2,3,4,5};
1105 int32_t results[7][5] = {
1115 int num_packets = 7;
1120 for (; i < num_packets; i++) {
1134 bool expect = (i == 1 || i == 2 || i == 3 || i == 4);
1159 static int DetectTagTestPacket06 (
void)
1161 uint8_t *buf = (uint8_t *)
"Hi all!";
1162 uint8_t *buf2 = (uint8_t *)
"lalala!";
1163 uint16_t buf_len = strlen((
char *)buf);
1164 uint16_t buf_len2 = strlen((
char *)buf2);
1167 memset(&ssn, 0,
sizeof(ssn));
1181 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5", f->
src.addr_data32) != 1);
1182 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1", f->
dst.addr_data32) != 1);
1188 memset(&th_v, 0,
sizeof(th_v));
1197 "192.168.1.5",
"192.168.1.1",
1200 "192.168.1.5",
"192.168.1.1",
1203 "192.168.1.5",
"192.168.1.1",
1206 "192.168.1.5",
"192.168.1.1",
1209 "192.168.1.1",
"192.168.1.5",
1212 "192.168.1.1",
"192.168.1.5",
1215 "192.168.1.5",
"192.168.1.1",
1218 const char *sigs[5];
1219 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,150,bytes; sid:1;)";
1220 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1221 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1222 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1223 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1226 uint32_t sid[5] = {1,2,3,4,5};
1231 int32_t results[7][5] = {
1241 int num_packets = 7;
1246 for (; i < num_packets; i++) {
1256 bool expect = (i == 1 || i == 2);
1281 static int DetectTagTestPacket07 (
void)
1283 uint8_t *buf = (uint8_t *)
"Hi all!";
1284 uint8_t *buf2 = (uint8_t *)
"lalala!";
1285 uint16_t buf_len = strlen((
char *)buf);
1286 uint16_t buf_len2 = strlen((
char *)buf2);
1289 memset(&ssn, 0,
sizeof(ssn));
1303 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5", f->
src.addr_data32) != 1);
1304 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1", f->
dst.addr_data32) != 1);
1310 memset(&th_v, 0,
sizeof(th_v));
1319 "192.168.1.5",
"192.168.1.1",
1322 "192.168.1.5",
"192.168.1.1",
1325 "192.168.1.5",
"192.168.1.1",
1328 "192.168.1.5",
"192.168.1.1",
1331 "192.168.1.1",
"192.168.1.5",
1334 "192.168.1.1",
"192.168.1.5",
1337 "192.168.1.5",
"192.168.1.1",
1340 const char *sigs[5];
1341 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,150,bytes; sid:1;)";
1342 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1343 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1344 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1345 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1348 uint32_t sid[5] = {1,2,3,4,5};
1352 int32_t results[7][5] = {
1362 int num_packets = 7;
1367 for (; i < num_packets; i++) {
1377 bool expect = (i == 1 || i == 2 || i == 3 || i == 4 || i == 5);