Esempio n. 1
0
File: dag.c Progetto: DPMI/mp
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}