54 if (host_tag_id.
id == -1) {
55 FatalError(
"Can't initiate host storage for tag");
58 if (flow_tag_id.
id == -1) {
59 FatalError(
"Can't initiate flow storage for tag");
115 uint16_t tag_cnt = 0;
124 for (; iter != NULL; iter = iter->
next) {
147 if (new_tde != NULL) {
155 SCLogDebug(
"Max tags for sessions reached (%"PRIu16
")", tag_cnt);
195 if (new_tde != NULL) {
207 for (iter =
tag; iter != NULL; iter = iter->
next) {
228 if (new_tde != NULL) {
235 SCLogDebug(
"Max tags for sessions reached (%"PRIu16
")", ntags);
251 uint8_t flag_added = 0;
253 while (iter != NULL) {
275 SCLogDebug(
"flow tag expired: packets %u > %u",
293 }
else if (flag_added == 0) {
320 }
else if (flag_added == 0) {
332 SCLogDebug(
"flow tag expired: %" PRIu64
" - %" PRIu64
" = %" PRIu64
" > %u",
354 }
else if (flag_added == 0) {
370 static void TagHandlePacketHost(
Host *host,
Packet *
p)
375 uint8_t flag_added = 0;
379 while (iter != NULL) {
417 }
else if (flag_added == 0) {
443 }
else if (flag_added == 0) {
454 SCLogDebug(
"host tag expired: %" PRIu64
" - %" PRIu64
" = %" PRIu64
" > %u",
476 }
else if (flag_added == 0) {
526 if (current_tags == 0)
530 if (
p->
flow != NULL) {
531 TagHandlePacketFlow(
p->
flow,
p);
537 TagHandlePacketHost(
src,
p);
545 TagHandlePacketHost(
dst,
p);
574 while (tmp != NULL) {
611 static int DetectTagTestPacket01 (
void)
613 uint8_t *buf = (uint8_t *)
"Hi all!";
614 uint8_t *buf2 = (uint8_t *)
"lalala!";
615 uint16_t buf_len = strlen((
char *)buf);
616 uint16_t buf_len2 = strlen((
char *)buf2);
620 "192.168.1.5",
"192.168.1.1",
623 "192.168.1.5",
"192.168.1.1",
626 "192.168.1.5",
"192.168.1.9",
629 "192.168.1.5",
"192.168.1.9",
632 "192.168.1.1",
"192.168.1.9",
635 "192.168.1.1",
"192.168.1.11",
638 "192.168.1.5",
"192.168.1.11",
642 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host,3,packets,src; sid:1;)";
643 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host,4,packets,dst; sid:2;)";
644 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
645 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
646 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
649 uint32_t sid[5] = {1,2,3,4,5};
651 int32_t results[7][5] = {
702 static int DetectTagTestPacket02 (
void)
704 uint8_t *buf = (uint8_t *)
"Hi all!";
705 uint8_t *buf2 = (uint8_t *)
"lalala!";
706 uint16_t buf_len = strlen((
char *)buf);
707 uint16_t buf_len2 = strlen((
char *)buf2);
728 "192.168.1.5",
"192.168.1.1",
731 "192.168.1.5",
"192.168.1.1",
734 "192.168.1.5",
"192.168.1.9",
737 "192.168.1.5",
"192.168.1.9",
740 "192.168.1.1",
"192.168.1.9",
743 "192.168.1.1",
"192.168.1.11",
746 "192.168.1.5",
"192.168.1.11",
750 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host,3,seconds,src; sid:1;)";
751 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host,8,seconds,dst; sid:2;)";
752 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
753 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
754 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
757 uint32_t sid[5] = {1,2,3,4,5};
764 int32_t results[7][5] = {
779 for (; i < num_packets; i++) {
789 bool expect = (i == 1 || i == 4);
807 static int DetectTagTestPacket03 (
void)
809 uint8_t *buf = (uint8_t *)
"Hi all!";
810 uint8_t *buf2 = (uint8_t *)
"lalala!";
811 uint16_t buf_len = strlen((
char *)buf);
812 uint16_t buf_len2 = strlen((
char *)buf2);
834 "192.168.1.5",
"192.168.1.1",
837 "192.168.1.5",
"192.168.1.1",
840 "192.168.1.5",
"192.168.1.9",
843 "192.168.1.5",
"192.168.1.9",
846 "192.168.1.1",
"192.168.1.9",
849 "192.168.1.1",
"192.168.1.11",
852 "192.168.1.5",
"192.168.1.11",
856 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host, 150, bytes, src; sid:1;)";
857 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host, 150, bytes, dst; sid:2;)";
858 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
859 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
860 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
863 uint32_t sid[5] = {1,2,3,4,5};
868 int32_t results[7][5] = {
883 for (; i < num_packets; i++) {
891 bool expect = (i == 1 || i == 2 || i == 4);
909 static int DetectTagTestPacket04 (
void)
911 uint8_t *buf = (uint8_t *)
"Hi all!";
912 uint8_t *buf2 = (uint8_t *)
"lalala!";
913 uint16_t buf_len = strlen((
char *)buf);
914 uint16_t buf_len2 = strlen((
char *)buf2);
917 memset(&
ssn, 0,
sizeof(
ssn));
931 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5",
f->
src.addr_data32) != 1);
932 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1",
f->
dst.addr_data32) != 1);
947 "192.168.1.5",
"192.168.1.1",
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.1",
"192.168.1.5",
962 "192.168.1.1",
"192.168.1.5",
965 "192.168.1.5",
"192.168.1.1",
969 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,4,packets; sid:1;)";
970 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
971 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
972 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
973 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
976 uint32_t sid[5] = {1,2,3,4,5};
981 int32_t results[7][5] = {
996 for (; i < num_packets; i++) {
1005 bool expect = (i == 1 || i == 2 || i == 3);
1030 static int DetectTagTestPacket05 (
void)
1032 uint8_t *buf = (uint8_t *)
"Hi all!";
1033 uint8_t *buf2 = (uint8_t *)
"lalala!";
1034 uint16_t buf_len = strlen((
char *)buf);
1035 uint16_t buf_len2 = strlen((
char *)buf2);
1038 memset(&
ssn, 0,
sizeof(
ssn));
1052 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5",
f->
src.addr_data32) != 1);
1053 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1",
f->
dst.addr_data32) != 1);
1068 "192.168.1.5",
"192.168.1.1",
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.1",
"192.168.1.5",
1083 "192.168.1.1",
"192.168.1.5",
1086 "192.168.1.5",
"192.168.1.1",
1089 const char *sigs[5];
1090 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,8,seconds; sid:1;)";
1091 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1092 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1093 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1094 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1097 uint32_t sid[5] = {1,2,3,4,5};
1102 int32_t results[7][5] = {
1112 int num_packets = 7;
1117 for (; i < num_packets; i++) {
1131 bool expect = (i == 1 || i == 2 || i == 3 || i == 4);
1156 static int DetectTagTestPacket06 (
void)
1158 uint8_t *buf = (uint8_t *)
"Hi all!";
1159 uint8_t *buf2 = (uint8_t *)
"lalala!";
1160 uint16_t buf_len = strlen((
char *)buf);
1161 uint16_t buf_len2 = strlen((
char *)buf2);
1164 memset(&
ssn, 0,
sizeof(
ssn));
1178 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5",
f->
src.addr_data32) != 1);
1179 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1",
f->
dst.addr_data32) != 1);
1194 "192.168.1.5",
"192.168.1.1",
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.1",
"192.168.1.5",
1209 "192.168.1.1",
"192.168.1.5",
1212 "192.168.1.5",
"192.168.1.1",
1215 const char *sigs[5];
1216 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,150,bytes; sid:1;)";
1217 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1218 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1219 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1220 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1223 uint32_t sid[5] = {1,2,3,4,5};
1228 int32_t results[7][5] = {
1238 int num_packets = 7;
1243 for (; i < num_packets; i++) {
1253 bool expect = (i == 1 || i == 2);
1278 static int DetectTagTestPacket07 (
void)
1280 uint8_t *buf = (uint8_t *)
"Hi all!";
1281 uint8_t *buf2 = (uint8_t *)
"lalala!";
1282 uint16_t buf_len = strlen((
char *)buf);
1283 uint16_t buf_len2 = strlen((
char *)buf2);
1286 memset(&
ssn, 0,
sizeof(
ssn));
1300 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5",
f->
src.addr_data32) != 1);
1301 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1",
f->
dst.addr_data32) != 1);
1316 "192.168.1.5",
"192.168.1.1",
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.1",
"192.168.1.5",
1331 "192.168.1.1",
"192.168.1.5",
1334 "192.168.1.5",
"192.168.1.1",
1337 const char *sigs[5];
1338 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,150,bytes; sid:1;)";
1339 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1340 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1341 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1342 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1345 uint32_t sid[5] = {1,2,3,4,5};
1349 int32_t results[7][5] = {
1359 int num_packets = 7;
1364 for (; i < num_packets; i++) {
1374 bool expect = (i == 1 || i == 2 || i == 3 || i == 4 || i == 5);