diff --git a/src/node.c b/src/node.c index d167a90..04652ea 100644 --- a/src/node.c +++ b/src/node.c @@ -36,10 +36,13 @@ int ask_for_peers(int socket_num) { struct in6_addr ip = peer->ip; int16_t port = peer->port; - int ifindex = if_nametoindex("eth0"); + int ifindex = if_nametoindex("enp3s0"); if(ifindex == 0) { - perror("if_nametoindex failed"); - return -1; + int ifindex = if_nametoindex("eth0"); + if(ifindex == 0) { + perror("if_nametoindex failed"); + return -1; + } } // Initialize sockaddr @@ -52,10 +55,20 @@ int ask_for_peers(int socket_num) { // Send neighbour request TLV tlv neighbour_req; - build_neighbour_req(&neighbour_req); - - return send_single_tlv(&neighbour_req, &dest, socket_num); + neighbour_req.pad1 = NULL; + int rc = build_neighbour_req(&neighbour_req); + if (rc < 0) { + printf(">> Failed to build neighbour_req\n"); + } + rc = send_single_tlv(&neighbour_req, &dest, socket_num); + if (rc < 0) { + printf(">> Error while sending a TLV.\n"); + return -1; + } else { + printf(">> Send TLV.\n"); + return 0; + } } } @@ -73,15 +86,16 @@ int len_list(list *l) { // Get a random neighbour neighbour_peer *get_random_neighbour() { + printf(">> Getting random peer...\n"); // Get a random number time_t t; srand((unsigned) time(NULL)); - int n = rand() % len_list(neighbour_list); - printf("%i\n", n ); + int n = (rand() % len_list(neighbour_list)) + 1; + int l_l = len_list(neighbour_list); // Get nth neighbour list *tmp = neighbour_list; - for(int i=0; inext; } @@ -408,7 +422,7 @@ int add_tlv(packet *pack, tlv *tlv, struct sockaddr_in6 *dest, int socket_num) { // Send length bytes from packet int send_packet(char *packet_buff, int16_t length, struct sockaddr_in6 *dest, int socket_num) { // Vectorized buffer - struct iovec vec_buff = {.iov_len = length, .iov_base = packet_buff}; + struct iovec vec_buff = {.iov_len = sizeof(packet_buff), .iov_base = packet_buff}; int error_while_sending = 0; @@ -422,17 +436,16 @@ int send_packet(char *packet_buff, int16_t length, struct sockaddr_in6 *dest, in int response_code = sendmsg(socket_num, &packet_tlv_send_out, 0); if (response_code < 0) { - // debug_print("Unable to send out the packet to peer %i", i); + printf(">> Unable to send out the packet to peer.\n"); error_while_sending = 1; } else if (response_code < length) { - // debug_print("Sent out only part of the packet."); + printf(">> Sent out only part of the packet.\n"); error_while_sending = 1; } else { - // debug_print("Send out packet to peer %i", i); + printf(">> Send out packet to peer\n"); } if (error_while_sending == 1) { - // debug_print("Error occured while sending out a packet."); return -1; } else { return 0; @@ -666,11 +679,13 @@ int work_with_tlvs(char * data, int16_t packet_len, struct sockaddr_in6 *sender, packet pack = (packet) {.magic = 95, .version = 1, .length = 0}; memset(pack.body, 0, 1020); - int ifindex = if_nametoindex("eth0"); - + int ifindex = if_nametoindex("enp3s0"); if(ifindex == 0) { - perror("if_nametoindex failed"); - return -1; + int ifindex = if_nametoindex("eth0"); + if(ifindex == 0) { + perror("if_nametoindex failed"); + return -1; + } } while(pos < packet_len) { @@ -985,7 +1000,7 @@ int run_node(int sock_fd){ break; } if (bytes > 0) { - printf("Received: %.*s\r", (int)bytes, output_buffer); + printf("Received %i bytes as : %s\n", (int)bytes, output_buffer); // Treat incoming packets. int work_tlv_status = listen_for_packets(output_buffer, bytes, &sender, sock_fd); if (work_tlv_status < 0) { @@ -1027,20 +1042,24 @@ int bootstrap_node(int * sock_fd){ } /* Make the first peer*/ - struct neighbour_peer root_peer; + struct neighbour_peer * root_peer = (struct neighbour_peer *) malloc(sizeof(struct neighbour_peer)); time_t root_peer_seen = time(NULL); - int inet_p = inet_pton(AF_INET6, ROOT_PEER_ADDR, &root_peer.ip); + int inet_p = inet_pton(AF_INET6, ROOT_PEER_ADDR, &root_peer->ip); if(inet_p < 1){ perror(">> Failed to create the root peer."); return -3; } - root_peer.port = 1212; - root_peer.is_temporary = 0; - root_peer.last_seen = root_peer_seen; + root_peer->port = 1212; + root_peer->is_temporary = 0; + root_peer->last_seen = root_peer_seen; // TODO: Add the first peer to the neighbourhood + printf(">> Adding the first root peer to the list...\n"); + neighbour_list = malloc(sizeof(struct list)); + neighbour_list->data = (void *) root_peer; + neighbour_list->next = NULL; printf(">> Boostraping done.\n"); return 0; diff --git a/src/tlv.c b/src/tlv.c index 1f5b4e8..82de813 100644 --- a/src/tlv.c +++ b/src/tlv.c @@ -62,12 +62,15 @@ int build_padn(tlv *tlv, size_t len) { int build_neighbour_req(tlv *tlv) { // Free the previously allocated memory - free(tlv->pad1); + // if (tlv != NULL) { + // free(tlv->pad1); + // } neighbour_req *new = (neighbour_req*) malloc(sizeof(neighbour_req)); - if(new == NULL) + if(new == NULL){ return -1; + } new->type = 2; new->length = 0;