Bachelor's thesis: Using Metadata to Optimize the Suricata IDS/IPS
Author: Shchapaniak Andrei

## Submitted files
* bachelor_thesis.pdf
* README.md
* src_thesis.zip - all necessary files to compile work in PDF format
* statistics.py - python script for performance tests 
* suricata.zip - source files for Suricata and DPDK Prefilter
* suricata-verify.zip - python script for integration tests + tests for metadata

## suricata
### Running
suricata:
```bash
sudo suricata -c <path_to_conf_file> -S <path_to_file_with_rules> --dpdk
```

DPDK prefilter:
```bash
sudo prefilter -l num_cpus -- -c <path_to_conf_file>
```

### Performance tests
```bash
python3 statistics.py
```
Requirements:
* `lbr_trex_client`:https://gitlab.liberouter.org/testing/trex-client#installation
* `lbr_testsuite`:https://gitlab.liberouter.org/tmc/testsuite#installation-and-dependency-on-lbr_trex_client-package
* matplotlib==3.3.4
* trex-api==0.0.1
* trex-stl-lib==0.3

## suricata-verify 
### Running
```bash
Usage: ./run.py --testdir <path_to_prefilter_tests> --prefilter [--metadata] -j 1
	--testdir - specify the path to the directory with tests
	--prefilter - run program with prefilter support
	--metadata - use prefilter configuration file with turned metadata on. 
				 Should be used in combination with --prefilter
	-j - specify the number of threads
```
#### Tests
* ipv4
* ipv6
* tcp
* udp