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));
730 "192.168.1.5",
"192.168.1.1",
733 "192.168.1.5",
"192.168.1.1",
736 "192.168.1.5",
"192.168.1.9",
739 "192.168.1.5",
"192.168.1.9",
742 "192.168.1.1",
"192.168.1.9",
745 "192.168.1.1",
"192.168.1.11",
748 "192.168.1.5",
"192.168.1.11",
752 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host,3,seconds,src; sid:1;)";
753 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host,8,seconds,dst; sid:2;)";
754 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
755 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
756 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
759 uint32_t sid[5] = {1,2,3,4,5};
766 int32_t results[7][5] = {
781 for (; i < num_packets; i++) {
791 bool expect = (i == 1 || i == 4);
809 static int DetectTagTestPacket03 (
void)
811 uint8_t *buf = (uint8_t *)
"Hi all!";
812 uint8_t *buf2 = (uint8_t *)
"lalala!";
813 uint16_t buf_len = strlen((
char *)buf);
814 uint16_t buf_len2 = strlen((
char *)buf2);
820 memset(&th_v, 0,
sizeof(th_v));
835 "192.168.1.5",
"192.168.1.1",
838 "192.168.1.5",
"192.168.1.1",
841 "192.168.1.5",
"192.168.1.9",
844 "192.168.1.5",
"192.168.1.9",
847 "192.168.1.1",
"192.168.1.9",
850 "192.168.1.1",
"192.168.1.11",
853 "192.168.1.5",
"192.168.1.11",
857 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:host, 150, bytes, src; sid:1;)";
858 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"Hi all\"; tag:host, 150, bytes, dst; sid:2;)";
859 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
860 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
861 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
864 uint32_t sid[5] = {1,2,3,4,5};
869 int32_t results[7][5] = {
884 for (; i < num_packets; i++) {
892 bool expect = (i == 1 || i == 2 || i == 4);
910 static int DetectTagTestPacket04 (
void)
912 uint8_t *buf = (uint8_t *)
"Hi all!";
913 uint8_t *buf2 = (uint8_t *)
"lalala!";
914 uint16_t buf_len = strlen((
char *)buf);
915 uint16_t buf_len2 = strlen((
char *)buf2);
918 memset(&ssn, 0,
sizeof(ssn));
932 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5", f->
src.addr_data32) != 1);
933 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1", f->
dst.addr_data32) != 1);
939 memset(&th_v, 0,
sizeof(th_v));
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);
1059 memset(&th_v, 0,
sizeof(th_v));
1067 "192.168.1.5",
"192.168.1.1",
1070 "192.168.1.5",
"192.168.1.1",
1073 "192.168.1.5",
"192.168.1.1",
1076 "192.168.1.5",
"192.168.1.1",
1079 "192.168.1.1",
"192.168.1.5",
1082 "192.168.1.1",
"192.168.1.5",
1085 "192.168.1.5",
"192.168.1.1",
1088 const char *sigs[5];
1089 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,8,seconds; sid:1;)";
1090 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1091 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1092 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1093 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1096 uint32_t sid[5] = {1,2,3,4,5};
1101 int32_t results[7][5] = {
1111 int num_packets = 7;
1116 for (; i < num_packets; i++) {
1130 bool expect = (i == 1 || i == 2 || i == 3 || i == 4);
1155 static int DetectTagTestPacket06 (
void)
1157 uint8_t *buf = (uint8_t *)
"Hi all!";
1158 uint8_t *buf2 = (uint8_t *)
"lalala!";
1159 uint16_t buf_len = strlen((
char *)buf);
1160 uint16_t buf_len2 = strlen((
char *)buf2);
1163 memset(&ssn, 0,
sizeof(ssn));
1177 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5", f->
src.addr_data32) != 1);
1178 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1", f->
dst.addr_data32) != 1);
1184 memset(&th_v, 0,
sizeof(th_v));
1192 "192.168.1.5",
"192.168.1.1",
1195 "192.168.1.5",
"192.168.1.1",
1198 "192.168.1.5",
"192.168.1.1",
1201 "192.168.1.5",
"192.168.1.1",
1204 "192.168.1.1",
"192.168.1.5",
1207 "192.168.1.1",
"192.168.1.5",
1210 "192.168.1.5",
"192.168.1.1",
1213 const char *sigs[5];
1214 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,150,bytes; sid:1;)";
1215 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1216 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1217 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1218 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1221 uint32_t sid[5] = {1,2,3,4,5};
1226 int32_t results[7][5] = {
1236 int num_packets = 7;
1241 for (; i < num_packets; i++) {
1251 bool expect = (i == 1 || i == 2);
1276 static int DetectTagTestPacket07 (
void)
1278 uint8_t *buf = (uint8_t *)
"Hi all!";
1279 uint8_t *buf2 = (uint8_t *)
"lalala!";
1280 uint16_t buf_len = strlen((
char *)buf);
1281 uint16_t buf_len2 = strlen((
char *)buf2);
1284 memset(&ssn, 0,
sizeof(ssn));
1298 FAIL_IF(inet_pton(AF_INET,
"192.168.1.5", f->
src.addr_data32) != 1);
1299 FAIL_IF(inet_pton(AF_INET,
"192.168.1.1", f->
dst.addr_data32) != 1);
1305 memset(&th_v, 0,
sizeof(th_v));
1313 "192.168.1.5",
"192.168.1.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.1",
"192.168.1.5",
1328 "192.168.1.1",
"192.168.1.5",
1331 "192.168.1.5",
"192.168.1.1",
1334 const char *sigs[5];
1335 sigs[0]=
"alert tcp any any -> any any (msg:\"Testing tag 1\"; content:\"Hi all\"; tag:session,150,bytes; sid:1;)";
1336 sigs[1]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"blahblah\"; sid:2;)";
1337 sigs[2]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:3;)";
1338 sigs[3]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:4;)";
1339 sigs[4]=
"alert tcp any any -> any any (msg:\"Testing tag 2\"; content:\"no match\"; sid:5;)";
1342 uint32_t sid[5] = {1,2,3,4,5};
1346 int32_t results[7][5] = {
1356 int num_packets = 7;
1361 for (; i < num_packets; i++) {
1371 bool expect = (i == 1 || i == 2 || i == 3 || i == 4 || i == 5);