static int setup_device(struct CI* CI){ char dev[256]; snprintf(dev, 256, "/dev/%s", CI->iface); char config[256]; snprintf(config, sizeof(config), "slen=%d %s", snaplen(), dag_config); logmsg(verbose, CAPTURE, "\tdevice: %s\n", dev); logmsg(verbose, CAPTURE, "\tconfig: \"%s\"\n", config); if ( dag_mode == 0 ){ logmsg(verbose, CAPTURE, "\tPort A: RX\n"); logmsg(verbose, CAPTURE, "\tPort B: TX\n"); } else { logmsg(verbose, CAPTURE, "\tPort A: RX -> B [wiretap]\n"); logmsg(verbose, CAPTURE, "\tPort B: TX -> A [wiretap]\n"); } CI->sd = dag_open(dev); if ( CI->sd < 0 ) { int e = errno; logmsg(stderr, CAPTURE, "dag_open() on interface %s returned %d: %s\n", dev, e, strerror(e)); return 0; } #if DAGDRIVER_MAJOR < 5 if ( dag_configure(CI->sd, config) < 0 ) { int e = errno; logmsg(stderr, CAPTURE, "dag_configure() on interface %s returned %d: %s\n", dev, e, strerror(e)); return 0; } #endif #if DAGDRIVER_MAJOR >4 card_ref = NULL; root_component = NULL; card_ref = dag_config_init(dev); root_component = dag_config_get_root_component(card_ref); uint32_t count = dag_component_get_subcomponent_count_of_type(root_component,kComponentGpp); logmsg(stderr,CAPTURE, "subcomponents -> %d \n", count); dag_component_t port = NULL; port = dag_component_get_subcomponent(root_component, kComponentGpp,0); attr_uuid_t csnaplen = dag_component_get_config_attribute_uuid(port,kUint32AttributeSnaplength); logmsg(stderr,CAPTURE, "dag_card snaplen = %d bytes\n", (int)csnaplen); #endif if (!timesync_init(CI)){ logmsg(stderr,CAPTURE, "problem with timesync_init .\n"); } return 1; }
static int endace_daq_start(void *handle) { char options[128]; EndaceDAGCtx_t *ctx = (EndaceDAGCtx_t *) handle; if (!ctx) { return DAQ_ERROR; } if ((ctx->fd = dag_open(ctx->name)) < 0) { snprintf(ctx->errbuf, ERROR_BUF_SIZE, "%s: failed opening to Endace adapter %s!", __FUNCTION__, ctx->name); return DAQ_ERROR; } snprintf(options, sizeof(options), "slen=%d", ctx->snaplen); if ((dag_configure(ctx->fd, options)) < 0) { snprintf(ctx->errbuf, ERROR_BUF_SIZE, "%s: failed configuring the Endace adapter %s!", __FUNCTION__, ctx->name); return DAQ_ERROR; } if ((dag_attach_stream(ctx->fd, ctx->stream, 0, 0)) < 0) { snprintf(ctx->errbuf, ERROR_BUF_SIZE, "%s: failed attaching to Endace adapter:stream %s:%d!", __FUNCTION__, ctx->name, ctx->stream); return DAQ_ERROR; } if ((dag_start_stream(ctx->fd,ctx->stream)) < 0) { snprintf(ctx->errbuf, ERROR_BUF_SIZE, "%s: failed starting stream: %d on Endace adapter: %s!", __FUNCTION__, ctx->stream, ctx->name); return DAQ_ERROR; } ctx->timeout.tv_sec = 0; ctx->timeout.tv_usec = 100 * 1000; // 100ms wait time ctx->poll.tv_sec = 0; ctx->poll.tv_usec = 10 * 1000; // 10ms poll time dag_set_stream_poll(ctx->fd, ctx->stream, 32 * 1024, &(ctx->timeout), &(ctx->poll)); ctx->state = DAQ_STATE_STARTED; return DAQ_SUCCESS; }
int open_device(char *dagname_buf) { struct timeval maxwait; struct timeval poll; //daginf_t *daginfo; //dagutil_set_progname("DAG_CAPD"); /* Set up default DAG device. */ #if 0 if (-1 == dag_parse_name(dagname_buf, dagname, DAGNAME_BUFSIZE, &dag_devnum)) { log_print(LOGN_CRI, "%s: FAIL[dag_parse_name] [%s]", __FUNCTION__, strerror(errno)); exit(errno); } if((dag_fd = dag_open(dagname)) < 0) { log_print(LOGN_CRI, "%s: FAIL[dag_open] [%s]", __FUNCTION__, strerror(errno)); exit(errno); } /* No option configured now.*/ buffer[0] = 0; if(dag_configure(dag_fd, buffer) < 0) { log_print(LOGN_CRI, "%s: FAIL[dag_configure] [%s]", __FUNCTION__, strerror(errno)); exit(errno); } if(dag_attach_stream(dag_fd, dag_devnum, 0, 0) < 0) { log_print(LOGN_CRI, "%s: FAIL[dag_attach_stream] [%s]", __FUNCTION__, strerror(errno)); exit(errno); } if(dag_start_stream(dag_fd, dag_devnum) < 0) { log_print(LOGN_CRI, "%s: FAIL[dag_start_stream] [%s]", __FUNCTION__, strerror(errno)); exit(errno); } /* Query the card first for special cases. */ daginfo = dag_info(dag_fd); if ((0x4200 == daginfo->device_code) || (0x4230 == daginfo->device_code)) { /* DAG 4.2S and 4.23S already strip the FCS. */ /* Stripping the final word again truncates the packet. */ /* (pcap-dag.c of libpcap) */ fcs_bits = 0; } log_print(LOGN_INFO, "DEVICE[%04x]: %s [FCS: %d]", daginfo->device_code, dag_device_name(daginfo->device_code, 1), fcs_bits); #endif /* * Initialise DAG Polling parameters. */ #if 0 timerclear(&maxwait); maxwait.tv_usec = 100 * 1000; /* 100ms timeout */ timerclear(&poll); poll.tv_usec = 10 * 1000; /* 10ms poll interval */ /* 32kB minimum data to return */ dag_set_stream_poll(dag_fd, dag_devnum, 32*ONE_KIBI, &maxwait, &poll); #endif #if 1 uint32_t mindata; timerclear(&maxwait); //maxwait.tv_usec = 100 * 1000; /* 100ms timeout */ timerclear(&poll); //poll.tv_usec = 10 * 1000; /* 10ms poll interval */ //mindata = 32*1024; mindata = 0; /* 32kB minimum data to return */ //dag_set_stream_poll(dag_fd, dag_devnum, mindata, &maxwait, &poll); #endif log_print( LOGN_DEBUG, "dag_devnum:%d", dag_devnum ); return 0; }