diff --git a/main_dsender.c b/main_dsender.c index 8cc0efe..5bdccd0 100644 --- a/main_dsender.c +++ b/main_dsender.c @@ -1,7 +1,21 @@ -#include +#include +#include +#include +#include "src/include/comm.h" #include "src/include/datalink.h" -int main(){ + + +int main(int argc, char *argv[]) { + + srand(time(NULL)); + + if (argc >= 2) { + int rate = atoi(argv[1]); + set_loss_rate(rate); + printf("Fault Injection Enabled: drop 1 in %d frames\n", rate); + } + dsender(); return 0; -} \ No newline at end of file +} diff --git a/src/include/comm.h b/src/include/comm.h index ded4dbb..fe65bf0 100644 --- a/src/include/comm.h +++ b/src/include/comm.h @@ -3,4 +3,5 @@ #include "packet.h" void send_frame(int fd, frame_t *f); -int receive_frame(int fd, frame_t *f); \ No newline at end of file +int receive_frame(int fd, frame_t *f); +void set_loss_rate(int rate); diff --git a/src/src/comm.c b/src/src/comm.c index 57c4e87..6e82b65 100644 --- a/src/src/comm.c +++ b/src/src/comm.c @@ -2,8 +2,17 @@ #include #include "../include/packet.h" #include "../include/comm.h" +#include +#include + +static int loss_rate = 0; // 0 = no loss, N = drop 1 in N frames + void send_frame(int fd, frame_t *f){ + if (loss_rate > 0 && rand() % loss_rate == 0) { + printf("FAULT INJECTION: Frame dropped intentionally\n"); + return; + } ssize_t bytes_written = write(fd, f, sizeof(*f)); if(bytes_written > 0){ printf("Sender: Data sent successfully!\n"); @@ -27,5 +36,8 @@ int receive_frame(int fd, frame_t *f){ printf("Receiver: Error Reading file\n"); return 0; } +void set_loss_rate(int rate) { + loss_rate = rate; +}