diff options
| author | Andreas Lindhé <andreas@lindhe.io> | 2017-10-31 08:33:46 +0100 | 
|---|---|---|
| committer | Andreas Lindhé <andreas@lindhe.io> | 2017-10-31 08:41:40 +0100 | 
| commit | bc5ecd6da7f068a12b9ee5397178723481c7a3ea (patch) | |
| tree | 6ac5bb33df7c3aacde8eb254c4aee1ce1df9dd29 /broccoli/src | |
| parent | 2d5d5be5702867a7a719312a5a148489c3b68f31 (diff) | |
| download | midbro-bc5ecd6da7f068a12b9ee5397178723481c7a3ea.tar.gz midbro-bc5ecd6da7f068a12b9ee5397178723481c7a3ea.tar.bz2 | |
Move all files one level down
Diffstat (limited to 'broccoli/src')
| -rw-r--r-- | broccoli/src/broevent.c | 85 | ||||
| -rw-r--r-- | broccoli/src/fifoqueue.c | 132 | ||||
| -rw-r--r-- | broccoli/src/midbro.c | 74 | ||||
| -rw-r--r-- | broccoli/src/pasad.c | 160 | 
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; -} | 
