aboutsummaryrefslogtreecommitdiff
path: root/broccoli/src
diff options
context:
space:
mode:
Diffstat (limited to 'broccoli/src')
-rw-r--r--broccoli/src/broevent.c85
-rw-r--r--broccoli/src/fifoqueue.c132
-rw-r--r--broccoli/src/midbro.c74
-rw-r--r--broccoli/src/pasad.c160
4 files changed, 0 insertions, 451 deletions
diff --git a/broccoli/src/broevent.c b/broccoli/src/broevent.c
deleted file mode 100644
index 362ed5e..0000000
--- a/broccoli/src/broevent.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "fifoqueue.h"
-#include "broevent.h"
-#ifdef BROCCOLI
-#include <broccoli.h>
-#endif
-
-char *host_default = "127.0.0.1";
-char *port_default = "47760";
-Fifo_q * q;
-
- static void
-modbus_register_received(BroConn *conn, void *data, BroRecord *record)
-{
- int type = BRO_TYPE_COUNT;
- uint64 *address = NULL;
- uint64 *value = NULL;
-
- // TODO: handle regtype
- address = bro_record_get_named_val(record, "address", &type);
- if (!address) {
- // TODO: handle error
- return;
- }
- value = bro_record_get_named_val(record, "register", &type);
- if (!value) {
- // TODO: handle error
- return;
- }
- #ifdef DEBUG
- printf("Received value %"PRIu64" from uid=%"PRIu64"\n",*value,*address);
- #endif
-
- add_to_queue(q, create_sensor_object(*value, *address));
-
- #ifdef DEBUG
- printf("Added to queue.\n");
- #endif
-}
-
- void *
-bro_event_listener(void * args)
-{
- q = (Fifo_q *) args;
- int fd = -1;
- BroConn *bc = NULL;
- bro_init(NULL);
- char hostname[512];
-
- snprintf(hostname, 512, "%s:%s", host_default, port_default);
- if (! (bc = bro_conn_new_str(hostname, BRO_CFLAG_RECONNECT | BRO_CFLAG_ALWAYS_QUEUE)))
- {
- printf("Could not get Bro connection handle.\n");
- exit(-1);
- }
- bro_debug_calltrace = 0;
- bro_debug_messages = 0;
-
- bro_event_registry_add(bc, "pasad_register_received",
- (BroEventFunc) modbus_register_received, NULL);
-
- if (! bro_conn_connect(bc))
- {
- printf("Could not connect to Bro at %s:%s.\n", host_default,
- port_default);
- exit(-1);
- }
-
- fd =bro_conn_get_fd(bc);
- fd_set rfds;
- setbuf(stdout,NULL);
-
- while(true)
- {
- FD_ZERO(&rfds);
- FD_SET(fd,&rfds);
- if(select(fd+1,&rfds,NULL,NULL,NULL) == -1){
- printf("select(): Bad file descriptor");
- break;
- }
-
- bro_conn_process_input(bc);
- }
-
- bro_conn_delete(bc);
-}
diff --git a/broccoli/src/fifoqueue.c b/broccoli/src/fifoqueue.c
deleted file mode 100644
index e7ed8f6..0000000
--- a/broccoli/src/fifoqueue.c
+++ /dev/null
@@ -1,132 +0,0 @@
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <semaphore.h>
-#include "types.h"
-#include "fifoqueue.h"
-
- Fifo_q *
-init_queue(int size)
-{
- Fifo_q * q = (Fifo_q *) malloc(sizeof(Fifo_q));
- q->head = NULL;
- q->tail = NULL;
- q->maxSize = size;
- q->currentSize = 0;
- q->droppedValues = 0;
- q->largestBufferSize = 0;
- q->valuesReceived = 0;
- q->valuesReleased = 0;
- /*Queue empty from the beginning (block)*/
- sem_init(&q->bufferEmptyBlock, 0, 0);
- sem_init(&q->bufferFullBlock, 0, size);
- sem_init(&q->lock, 0, 1);
- return q;
-}
-
- boolean
-is_full(Fifo_q * q)
-{
- if(q->currentSize < q->maxSize)
- return false;
- else
- return true;
-}
-
- boolean
-is_empty(Fifo_q * q)
-{
- if(q->head==NULL)
- return true;
- else
- return false;
-}
-
- int
-add_to_queue(Fifo_q * q, Sensor_t * sensor)
-{
-
- if(q == NULL){
- printf("Error: Queue not initialized\n");
- free(sensor); //free if not appended
- return -1;
- }
- /* Drop Least Recently or Drop Most Recently */
- #ifdef DLR
- if(is_full(q)){
- pop_from_queue(q);
- q->droppedValues++;
- return 0;
- }
- #else
- sem_wait(&q->bufferFullBlock);
- #endif
- sem_wait(&q->lock);
- Queue_t * new_elem = (Queue_t *) malloc(sizeof(Queue_t));
- new_elem->next = NULL;
- new_elem->sensor = sensor;
- if(is_empty(q)){
- q->head = new_elem;
- }else
- q->tail->next = new_elem;
- q->tail = new_elem;
- q->currentSize++;
- q->valuesReceived++;
- if(q->currentSize > q->largestBufferSize)
- q->largestBufferSize = q->currentSize;
- sem_post(&q->lock);
- sem_post(&q->bufferEmptyBlock);
- return 1;
-}
-
- Sensor_t *
-pop_from_queue(Fifo_q * q)
-{
- int semStat;
- sem_wait(&q->bufferEmptyBlock);
- sem_wait(&q->lock);
- Queue_t * head = q->head;
- Sensor_t * sensor = head->sensor;
- /* If dequeue the last element */
- if(q->currentSize == 1){
- q->head = NULL;
- q->tail = NULL;
- }else{
- q->head = head->next;
- }
- free(head);
- q->currentSize--;
- q->valuesReleased++;
- sem_post(&q->lock);
- #ifndef DLR
- sem_post(&q->bufferFullBlock);
- #endif
- return sensor;
-}
-
- Sensor_t *
-create_sensor_object(int value, int uid)
-{
- Sensor_t * sensor = (Sensor_t *) malloc(sizeof(Sensor_t));
- sensor->value = value;
- sensor->uid = uid;
- return sensor;
-}
- void
-print_queue(Fifo_q * q)
-{
- sem_wait(&q->lock);
- Queue_t * current = q->head;
- printf("\nContent of the queue with size=%d\n",q->currentSize);
- if(current == NULL){
- printf("The queue is empty!\n");
- sem_post(&q->lock);
- return;
- }
- while(current != NULL){
- printf("sensor value=%d, sensor uid=%d\n",
- current->sensor->value, current->sensor->uid);
- current = current->next;
- }
- sem_post(&q->lock);
-}
diff --git a/broccoli/src/midbro.c b/broccoli/src/midbro.c
deleted file mode 100644
index e2f9644..0000000
--- a/broccoli/src/midbro.c
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <pthread.h>
-#include <unistd.h>
-#include <signal.h>
-#include "fifoqueue.h"
-#include "broevent.h"
-#include "midbro.h"
-#ifdef BROCCOLI
-#include <broccoli.h>
-#endif
-
-Fifo_q * queue;
-pthread_t event_listener;
-sigset_t signal_set;
-
- void
-sigint_handler(int signal)
-{
- printf("\nStatistics:\n"
- "Total values received: %d\n"
- "Total values dropped: %d\n"
- "Total values released: %d\n"
- "Maximum buffer utilization: %d\n"
- "Buffer fixed size: %d\n"
- "Buffer size upon termination: %d\n",
- queue->valuesReceived, queue->droppedValues,
- queue->valuesReleased, queue->largestBufferSize,
- queue->maxSize, queue->currentSize);
- exit(0);
-}
- void
-request_n_values(int number, int arrayOfValues[])
-{
- int i;
- Sensor_t * sensor;
- for(i=0; i<number; ++i){
- sensor = pop_from_queue(queue);
- arrayOfValues[i] = sensor->value;
- free(sensor);
- }
- printf("Release %d sensor data values\n", number);
-}
- int
-request_value()
-{
- int value;
- Sensor_t * sensor;
- sensor = pop_from_queue(queue);
- value = sensor->value;
- free(sensor);
- printf("Release 1 sensor data value\n");
- return value;
-}
-
- void
-start_data_capture()
-{
- int res;
- queue = init_queue(500); /* Initiate queue with fixed size */
- /* Create producer thread that listen for bro events */
- sigemptyset(&signal_set);
- sigaddset(&signal_set, SIGINT);
- res = pthread_sigmask(SIG_BLOCK, &signal_set, NULL);
- if(res != 0)
- perror("SIGINT block");
- res = pthread_create(&event_listener, NULL, bro_event_listener, queue);
- if(res){
- perror("Unable to create thread");
- exit(-1);
- }
- res = pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL);
- if(res != 0)
- perror("SIGINT unblock");
- signal(SIGINT, sigint_handler);
-}
diff --git a/broccoli/src/pasad.c b/broccoli/src/pasad.c
deleted file mode 100644
index 58dc9ab..0000000
--- a/broccoli/src/pasad.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-
- -Course-
- DAT300: Data-driven support for cyber-physical systems
-
- -Project-
- Intrusion Detection for Industrial Control Networks
-
- -Group 8-
- Hassan Ghalayini - hassang@student.chalmers.se
- Malama Kasanda - malama@student.chalmers.se
- Vaios Taxiarchis - vaios@student.chalmers.se
-
- Modified by Robin Krahl <guskraro@student.gu.se>, Group 3:
- - Write sensor readings and distance to text files
- - Take the arguments N, L, r from argc
- - Formatting
-
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include "midbro.h"
-
-int main(int argc, char **argv)
-{
- clock_t begin;
- int l=0;
- double t=30;
-
- if (argc != 4) {
- fprintf(stderr, "Usage: %s N L r\n", argv[0]);
- fprintf(stderr, " Example values: N = 1000, L = 500, r = 18\n");
- fprintf(stderr, "Wrong argument count. Aborting.\n");
- return 1;
- }
-
- int N = atoi(argv[1]);
- int L = atoi(argv[2]);
- int r = atoi(argv[3]);
-
- /* Arrays and variables */
- int sL=86336;
- double s[sL];
- double U[L][r];
- double X[L];
- double product_Xt_P_X;
- double product_Xt_X;
- int i=0,j=0,c=0,d=0,k=0;
- double sum=0.0,dist=0.0;
-
- start_data_capture();
-
- /* File Descriptor to read projection matrix from U.txt */
- FILE *file;
- char ch='a';
- int flag=0;
- file=fopen("U.txt", "r");
- if (!file) {
- fprintf(stderr, "Could not open U.txt. Aborting.\n");
- return 1;
- }
- printf(" >Reading U[%dx%d] matrix from .txt file...",L,r);
- /* Read all values to an array */
- for(i=0;i<L;i++)
- {
- if(flag==1){break;}
- for(j=0;j<r;j++)
- {
- /* Use %lf format specifier, to read doubles with scanf */
- if(!fscanf(file,"%lf",&U[i][j]))
- break;
- /* Break the inner loop and set flag=true */
- ch = getc(file);
- if(ch == EOF)
- {
- flag=1;
- break;
- }
- /* Break the inner loop when find \n */
- else if(ch - '0'== -38)
- break;
- }
- }
- /* Close File Descriptor */
- fclose(file);
- printf("Completed!\n");
-
- for(i=0;i<N;i++)
- {
- s[i] = (double)request_value();
- }
-
- int p=1;
- X[0]=0;
-
- for(i=N-L+1;i<N;i++)
- {
- X[p] = s[i];
- sum = sum + X[p]*X[p];
- p++;
- }
- product_Xt_X = sum;
- sum = 0;
-
- FILE *file_sensor = fopen("sensor.dat", "w");
- FILE *file_distance = fopen("distance.dat", "w");
-
- begin = clock();
- while(1)
- {
- int value = request_value();
- s[p] = (double) value;
- fprintf(file_sensor, "%d\n", value);
-
- /* Xt[1xL] * X[Lx1] */
- product_Xt_X = product_Xt_X - X[0]*X[0] + s[p]*s[p];
-
- /* Generate new test vector Xtest */
- for(j=0;j<L-1;j++)
- {
- X[j] = X[j+1];
- }
- X[L-1] = s[p];
-
- product_Xt_P_X = 0;
- /* P_1 = Xt[1xL] * U[Lxr] */
- for (d=0;d<r;d++)
- {
- for (k=0;k<L;k++)
- {
- sum = sum + X[k]*U[k][d];
- }
- product_Xt_P_X = product_Xt_P_X + sum*sum;
- sum = 0;
- }
-
- dist = (product_Xt_X - product_Xt_P_X)/L;
- p++;
-
- printf("%lf\n",dist);
- fprintf(file_distance, "%lf\n", dist);
-
- fflush(file_sensor);
- fflush(file_distance);
- }
-
- fclose(file_sensor);
- fclose(file_distance);
-
- printf(" [Program exits]\n");
- /* Stop timer */
- clock_t end = clock();
-
- /* Print the time elapsed */
- printf("Time elapsed: %f milliseconds\n", 1000*((double)(end - begin) / CLOCKS_PER_SEC));
-
- return 0;
-}