JNIEXPORT jint JNICALL Java_OnloadExt_SetStackOption (JNIEnv* env, jclass cls, jstring option, jint opt_val ) { int64_t val = opt_val; char* opt = JNU_GetStringNativeChars(env, option); jint rval; (void) cls; if ( !opt ) return -EINVAL; rval = (jint) onload_stack_opt_set_int( opt, val ); free(opt); return rval; }
int main(int argc, char* argv[]) { int c; while( (c = getopt(argc, argv, "hr:n:i:w:sl:p:")) != -1 ) switch( c ) { case 'h': usage_msg(stdout); exit(0); break; case 'r': cfg_send_rate = atoi(optarg); break; case 'n': cfg_measure_nth = atoi(optarg); break; case 'i': cfg_iter = atoi(optarg); break; case 'w': cfg_warm_n = atoi(optarg); break; case 's': cfg_hw_ts = false; break; case 'l': cfg_log_level = atoi(optarg); break; case 'p': cfg_port = optarg; break; case '?': usage_err(); break; default: TEST(0); break; } argc -= optind; argv += optind; if( argc != 1 ) usage_err(); const char* mcast_intf = argv[0]; if( onload_is_present() ) { if( cfg_hw_ts ) { TRY( onload_stack_opt_set_int("EF_RX_TIMESTAMPING", 3) ); TRY( onload_stack_opt_set_int("EF_TX_TIMESTAMPING", 3) ); } } else if( cfg_hw_ts ) { fprintf(stderr, "ERROR: Cannot use hardware timestamp because Onload is " "not being used. You can use -s to use software timestamps, but " "they are much less accurate.\n"); exit(4); } else { msg(1, "Using software timestamps\n"); cfg_hw_ts = false; } struct server_state ss; init(&ss, mcast_intf); wait_for_client(&ss); event_loop(&ss); return 0; }