void* generate_traffic(void *arg) { int ue_num; bool time_exceeded; ue_num = *((int*)arg); time_exceeded = false; while (1) { Client to_mme; UE ue(ue_num); to_mme.bind_client(); to_mme.fill_server_details(g_mme_port, g_mme_addr); to_mme.connect_with_server(ue_num); attach(ue, to_mme); send_traffic(ue); detach(ue, to_mme); time_check(g_start_time, g_req_duration, time_exceeded); if (time_exceeded) { break; } } return NULL; }
int main(int argc, char* argv[]) { char *device = NULL, c; int i; startTime.tv_sec = 0; while((c = getopt(argc,argv,"ab:c:g:hi:n:p:l:z")) != '?') { if((c == 255) || (c == -1)) break; switch(c) { case 'h': printHelp(); break; case 'a': active = 1; break; case 'b': num_ips = atoi(optarg); break; case 'c': cluster_id = atoi(optarg); break; case 'i': device = strdup(optarg); break; case 'l': packet_len = atoi(optarg); break; case 'n': num_to_send = atoi(optarg); break; case 'p': pps = atoi(optarg); break; case 'g': bind_core = atoi(optarg); break; #ifdef BURST_API case 'z': use_pkt_burst_api = 1; break; #endif } } if (cluster_id < 0) printHelp(); if (device) { num_queue_buffers = MAX_CARD_SLOTS; } else { num_queue_buffers = QUEUE_LEN; } stdin_packet_len = read_packet_hex(stdin_packet, sizeof(stdin_packet)); if (stdin_packet_len > 0) packet_len = stdin_packet_len; zc = pfring_zc_create_cluster( cluster_id, 1536, 0, num_queue_buffers + NBUFF, numa_node_of_cpu(bind_core), NULL /* auto hugetlb mountpoint */ ); if(zc == NULL) { fprintf(stderr, "pfring_zc_create_cluster error [%s] Please check your hugetlb configuration\n", strerror(errno)); return -1; } for (i = 0; i < NBUFF; i++) { buffers[i] = pfring_zc_get_packet_handle(zc); if (buffers[i] == NULL) { fprintf(stderr, "pfring_zc_get_packet_handle error\n"); return -1; } } if (device) { zq = pfring_zc_open_device(zc, device, tx_only, 0); if(zq == NULL) { fprintf(stderr, "pfring_zc_open_device error [%s] Please check that %s is up and not already used\n", strerror(errno), device); return -1; } fprintf(stderr, "Sending packets to %s\n", device); } else { zq = pfring_zc_create_queue(zc, num_queue_buffers); if(zq == NULL) { fprintf(stderr, "pfring_zc_create_queue error [%s]\n", strerror(errno)); return -1; } zp = pfring_zc_create_buffer_pool(zc, POOL_SIZE); if (zp == NULL) { fprintf(stderr, "pfring_zc_create_buffer_pool error\n"); return -1; } fprintf(stderr, "Sending packets to cluster %u queue %u\n", cluster_id, 0); } signal(SIGINT, sigproc); signal(SIGTERM, sigproc); signal(SIGINT, sigproc); signal(SIGALRM, my_sigalarm); alarm(ALARM_SLEEP); send_traffic(); print_stats(); pfring_zc_destroy_cluster(zc); return 0; }
int main(int argc, char* argv[]) { char *device = NULL, c; int i; startTime.tv_sec = 0; while((c = getopt(argc,argv,"ab:c:g:hi:n:p:l:zN:")) != '?') { if((c == 255) || (c == -1)) break; switch(c) { case 'h': printHelp(); break; case 'a': active = 1; break; case 'b': num_ips = atoi(optarg); break; case 'c': cluster_id = atoi(optarg); break; case 'i': device = strdup(optarg); break; case 'l': packet_len = atoi(optarg); break; case 'n': num_to_send = atoi(optarg); break; case 'p': pps = atoi(optarg); break; case 'g': bind_core = atoi(optarg); break; #ifdef BURST_API case 'z': use_pkt_burst_api = 1; break; #endif case 'N': n2disk_producer = 1; n2disk_threads = atoi(optarg); break; } } if (cluster_id < 0) printHelp(); if (n2disk_producer) { if (device != NULL) printHelp(); if (n2disk_threads < 1) printHelp(); metadata_len = N2DISK_METADATA; num_consumer_buffers += (n2disk_threads * (N2DISK_CONSUMER_QUEUE_LEN + 1)) + N2DISK_PREFETCH_BUFFERS; } if (device) { num_queue_buffers = MAX_CARD_SLOTS; } else { num_queue_buffers = QUEUE_LEN; } stdin_packet_len = read_packet_hex(stdin_packet, sizeof(stdin_packet)); if (stdin_packet_len > 0) packet_len = stdin_packet_len; zc = pfring_zc_create_cluster( cluster_id, max_packet_len(device), metadata_len, num_queue_buffers + NBUFF + num_consumer_buffers, numa_node_of_cpu(bind_core), NULL /* auto hugetlb mountpoint */ ); if(zc == NULL) { fprintf(stderr, "pfring_zc_create_cluster error [%s] Please check your hugetlb configuration\n", strerror(errno)); return -1; } for (i = 0; i < NBUFF; i++) { buffers[i] = pfring_zc_get_packet_handle(zc); if (buffers[i] == NULL) { fprintf(stderr, "pfring_zc_get_packet_handle error\n"); return -1; } } if (device) { zq = pfring_zc_open_device(zc, device, tx_only, 0); if(zq == NULL) { fprintf(stderr, "pfring_zc_open_device error [%s] Please check that %s is up and not already used\n", strerror(errno), device); return -1; } fprintf(stderr, "Sending packets to %s\n", device); } else { zq = pfring_zc_create_queue(zc, num_queue_buffers); if(zq == NULL) { fprintf(stderr, "pfring_zc_create_queue error [%s]\n", strerror(errno)); return -1; } fprintf(stderr, "Sending packets to cluster %u queue %u\n", cluster_id, 0); if (n2disk_producer) { char queues_list[256]; queues_list[0] = '\0'; for (i = 0; i < n2disk_threads; i++) { if(pfring_zc_create_queue(zc, N2DISK_CONSUMER_QUEUE_LEN) == NULL) { fprintf(stderr, "pfring_zc_create_queue error [%s]\n", strerror(errno)); return -1; } sprintf(&queues_list[strlen(queues_list)], "%d,", i+1); } queues_list[strlen(queues_list)-1] = '\0'; if (pfring_zc_create_buffer_pool(zc, N2DISK_PREFETCH_BUFFERS + n2disk_threads) == NULL) { fprintf(stderr, "pfring_zc_create_buffer_pool error\n"); return -1; } fprintf(stderr, "Run n2disk with: --cluster-ipc-attach --cluster-id %d --cluster-ipc-queues %s --cluster-ipc-pool 0\n", cluster_id, queues_list); } } signal(SIGINT, sigproc); signal(SIGTERM, sigproc); signal(SIGINT, sigproc); signal(SIGALRM, my_sigalarm); alarm(ALARM_SLEEP); send_traffic(); print_stats(); pfring_zc_destroy_cluster(zc); return 0; }