Cleaned global variables and simplified the partially reliable send

This commit is contained in:
Nicolas Van Wambeke 2016-06-19 21:04:55 +02:00
parent eda791330c
commit 5c3e257904
2 changed files with 27 additions and 37 deletions

View file

@ -22,6 +22,10 @@ unsigned long get_now_time_usec();
/********************************************************************** /**********************************************************************
* Private core functions, should not be used for implementing mictcp * * Private core functions, should not be used for implementing mictcp *
**********************************************************************/ **********************************************************************/
#define API_CS_Port 8524
#define API_SC_Port 8525
int full_send(mic_tcp_payload); int full_send(mic_tcp_payload);
int partial_send(mic_tcp_payload); int partial_send(mic_tcp_payload);
mic_tcp_payload get_full_stream(mic_tcp_pdu); mic_tcp_payload get_full_stream(mic_tcp_pdu);

View file

@ -8,26 +8,16 @@
/***************** /*****************
* API Variables * * API Variables *
*****************/ *****************/
int first_free = 0;
int initialized = -1; int initialized = -1;
int sys_socket; int sys_socket;
unsigned short API_CS_Port = 8524;
unsigned short API_SC_Port = 8525;
float reliability = 100;
mic_tcp_sock current_socket;
int exite_status = -1;
pthread_t listen_th; pthread_t listen_th;
pthread_mutex_t lock; pthread_mutex_t lock;
unsigned int global_id = 0; float loss_rate = 0.0f;
unsigned short loss_rate = 0;
float jump = 0; float jump = 0;
float range = 0; float range = 0;
int count = 0; int count = 0;
int reverse = 1; int reverse = 1;
struct sockaddr_in local_addr, remote_addr, tmp_addr;
socklen_t local_size, remote_size;
socklen_t tmp_addr_size = sizeof(struct sockaddr);
/* This is for the buffer */ /* This is for the buffer */
TAILQ_HEAD(tailhead, app_buffer_entry) app_buffer_head; TAILQ_HEAD(tailhead, app_buffer_entry) app_buffer_head;
@ -43,7 +33,10 @@ struct app_buffer_entry {
int initialize_components(start_mode mode) int initialize_components(start_mode mode)
{ {
int bnd; int bnd;
struct sockaddr_in local_addr;
struct sockaddr_in remote_addr;
struct hostent * hp; struct hostent * hp;
if(initialized != -1) return initialized; if(initialized != -1) return initialized;
if((sys_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1) return -1; if((sys_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1) return -1;
else initialized = 1; else initialized = 1;
@ -68,7 +61,6 @@ int initialize_components(start_mode mode)
remote_addr.sin_port = htons(API_SC_Port); remote_addr.sin_port = htons(API_SC_Port);
hp = gethostbyname("localhost"); hp = gethostbyname("localhost");
memcpy (&(remote_addr.sin_addr.s_addr), hp->h_addr, hp->h_length); memcpy (&(remote_addr.sin_addr.s_addr), hp->h_addr, hp->h_length);
remote_size = sizeof(remote_addr);
initialized = 1; initialized = 1;
} }
@ -83,7 +75,6 @@ int initialize_components(start_mode mode)
remote_addr.sin_port = htons(API_CS_Port); remote_addr.sin_port = htons(API_CS_Port);
hp = gethostbyname("localhost"); hp = gethostbyname("localhost");
memcpy (&(remote_addr.sin_addr.s_addr), hp->h_addr, hp->h_length); memcpy (&(remote_addr.sin_addr.s_addr), hp->h_addr, hp->h_length);
remote_size = sizeof(remote_addr);
memset((char *) &local_addr, 0, sizeof(local_addr)); memset((char *) &local_addr, 0, sizeof(local_addr));
local_addr.sin_family = AF_INET; local_addr.sin_family = AF_INET;
@ -121,6 +112,8 @@ int IP_send(mic_tcp_pdu pk, mic_tcp_sock_addr addr)
int IP_recv(mic_tcp_payload* pk,mic_tcp_sock_addr* addr, unsigned long delay) int IP_recv(mic_tcp_payload* pk,mic_tcp_sock_addr* addr, unsigned long delay)
{ {
struct timeval tv; struct timeval tv;
struct sockaddr_in tmp_addr;
socklen_t tmp_addr_size = sizeof(struct sockaddr);
/* Send data over a fake IP */ /* Send data over a fake IP */
if(initialized == -1) return -1; if(initialized == -1) return -1;
@ -181,33 +174,26 @@ mic_tcp_payload get_data(mic_tcp_payload packet)
int full_send(mic_tcp_payload buff) int full_send(mic_tcp_payload buff)
{ {
return sendto(sys_socket, buff.data, buff.size, 0, (struct sockaddr *)&remote_addr, remote_size); struct sockaddr_in remote_addr;
int result = 0;
result = sendto(sys_socket, buff.data, buff.size, 0, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr));
return result;
} }
int partial_send(mic_tcp_payload buff) int partial_send(mic_tcp_payload buff)
{ {
count ++; struct sockaddr_in remote_addr;
int random = rand();
int result = buff.size;
int lr_tresh = (int) round(loss_rate*RAND_MAX);
if(range == 0) if(random > lr_thresh) {
{ result = sendto(sys_socket, buff.data, buff.size, 0, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr));
jump = 1000.0 /((float) loss_rate);
range += jump;
}
if(((int)range) == count)
{
reverse = -reverse;
jump = 1000.0 /((float) loss_rate);
range += jump + ( (jump / 4) * reverse);
printf("\n -- Lost\n");
return buff.size;
}
else
{
return sendto(sys_socket, buff.data, buff.size, 0, (struct sockaddr *)&remote_addr, remote_size);
} }
return result;
} }
int app_buffer_get(mic_tcp_payload app_buff) int app_buffer_get(mic_tcp_payload app_buff)
@ -298,13 +284,13 @@ void* listening(void* arg)
void set_loss_rate(unsigned short rate) void set_loss_rate(unsigned short rate)
{ {
loss_rate = rate; loss_rate = ((float) rate) / 100.0;
} }
void print_header(mic_tcp_payload bf) void print_header(mic_tcp_payload bf)
{ {
mic_tcp_header hd = get_header(bf.data); mic_tcp_header hd = get_header(bf.data);
printf("\nSP: %d, DP: %d, SEQ: %d, ACK: %d, Count: %d, Size: %d.", hd.source_port, hd.dest_port, hd.seq_num, hd.ack_num, app_buffer_count, app_buffer_size); printf("\nSP: %d, DP: %d, SEQ: %d, ACK: %d", hd.source_port, hd.dest_port, hd.seq_num, hd.ack_num);
} }
unsigned long get_now_time_msec() unsigned long get_now_time_msec()