示例#1
0
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;
}
示例#2
0
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;
}