void check_arp() { struct ether_addr * dst_eth_addr = NULL; static arp_resolv_count = 0; dst_eth_addr = tw_search_arp_entry(ip); //checks if address exist in arp table against this IP. if(dst_eth_addr == NULL) { tw_send_arp_request(tw_convert_ip_str_to_dec(ip), "tw0"); arp_resolv_count++; } else { printf("MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n", dst_eth_addr->addr_bytes[0], dst_eth_addr->addr_bytes[1], dst_eth_addr->addr_bytes[2], dst_eth_addr->addr_bytes[3], dst_eth_addr->addr_bytes[4], dst_eth_addr->addr_bytes[5]); exit(0); } if(arp_flag == 1 && arp_resolv_count > 5) { printf("arp not resolved.\n"); exit(1); } }
bool isSameNetwork(char* ip) { uint32_t ipp = tw_convert_ip_str_to_dec(ip); uint32_t desAnd = ipp & tw_get_subnet_mask("tw0"); uint32_t souAnd = tw_get_ip_addr("tw0") & tw_get_subnet_mask("tw0"); return desAnd == souAnd; }
void check_arp() { static arp_resolv_count = 0; arp_resolv_count++; tw_send_arp_request(tw_convert_ip_str_to_dec(ip), "tw0"); if ( arp_flag == 1 && arp_resolv_count > 4 ) { printf("arp not resolved.\n"); exit(1); } }
int parse_user_params(char * file_name) { uint8_t i; cJSON * json_file = tw_parse_json_file(file_name); if (!json_file) { printf("Error before: [%s]n",cJSON_GetErrorPtr()); return -1; } for (i = 0 ; i < cJSON_GetArraySize(json_file) ; i++) { cJSON * subitem = cJSON_GetArrayItem(json_file, i); user_params.server_ip = tw_convert_ip_str_to_dec(cJSON_GetObjectItem(subitem, "ServerIP")->valuestring); user_params.server_port = tw_convert_str_to_int(cJSON_GetObjectItem(subitem, "ServerPort")->valuestring, strlen(cJSON_GetObjectItem(subitem, "ServerPort")->valuestring)); user_params.payload_size = tw_convert_str_to_int(cJSON_GetObjectItem(subitem, "Payload")->valuestring, strlen(cJSON_GetObjectItem(subitem, "Payload")->valuestring)); user_params.test_runtime = tw_convert_str_to_int(cJSON_GetObjectItem(subitem, "testRuntime")->valuestring, strlen(cJSON_GetObjectItem(subitem, "testRuntime")->valuestring)); user_params.pps_limit = tw_convert_str_to_int(cJSON_GetObjectItem(subitem, "ppsLimit")->valuestring, strlen(cJSON_GetObjectItem(subitem, "ppsLimit")->valuestring)); global_stats_option.payload_size=user_params.payload_size ; } return 0; }
int twiperf_parse_arguments(struct iperf_test *test, int argc, char **argv) /*parsing user given arguments*/ { int udp_flag, ethernet_flag; static struct option longopts[] = { { "udp", no_argument, NULL, 'u' }, { "ethernet", no_argument, NULL, 'e' }, { "server", no_argument, NULL, 's' }, { "client", required_argument, NULL, 'c' }, { "help", no_argument, NULL, 'h' }, { "port", required_argument, NULL, 'p' }, { "bytes", required_argument, NULL, 'n' }, { "bandwith", required_argument, NULL, 'b'}, { NULL, 0, NULL, 0 } }; int flag; server_flag = client_flag = udp_flag = ethernet_flag = 0; test->packet_size = 1500; //initialized to default value of 64 bytes pcket size test->server_port = 5001; //initialized to default port of 5001 test->client_port = 7777; //initialized to default port of 5001 test->test_runtime = 0; //initialized to default infinite runtime udp_flag = 1; test->protocol_id = 2; while ((flag = getopt_long(argc, argv, "b:n:p:uec:hs", longopts, NULL)) != -1) { switch (flag) { case 'p': test->server_port = atoi(optarg); break; case 'n': test->packet_size = atoi(optarg); break; case 'b': test->rate = unit_atof_rate(optarg); rate_flag = 1; client_flag = 1; break; case 'c': client_flag = 1; test->role = 2; test->client_mac = tw_get_ether_addr("tw0"); test->server_ip = tw_cpu_to_be_32(tw_convert_ip_str_to_dec(strdup(optarg))); if(test->server_ip == 0) { twiperf_usage(); exit(1); } test->client_ip = tw_cpu_to_be_32(tw_get_ip_addr("tw0")); break; case 's': server_flag = 1; test->role = 1; test->server_mac = tw_get_ether_addr("tw0"); test->server_ip = tw_cpu_to_be_32(tw_get_ip_addr("tw0")); break; case 'e': ethernet_flag = 1; udp_flag = 0; test->protocol_id = 1; break; case 'u': udp_flag = 1; test->protocol_id = 2; break; case 'h': twiperf_usage(); exit(1); break; default: twiperf_usage(); exit(1); } } if(server_flag == 1 && client_flag == 1 || udp_flag == 1 && ethernet_flag == 1) { twiperf_usage(); exit(1); } if(server_flag == 0 && client_flag == 0 || udp_flag == 0 && ethernet_flag == 0) { twiperf_usage(); exit(1); } if((test->role != 1) && (test->role != 2)) { i_errno = IENOROLE; return -1; } if(udp_flag == 1 && test->packet_size > MAX_UDP_BLOCKSIZE) { i_errno = IEUDPBLOCKSIZE; return -1; } return 0; }