Changeset 35c5a72


Ignore:
Timestamp:
03/24/09 12:30:55 (13 years ago)
Author:
Daniel Lawson <dlawson@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
7babe98
Parents:
752353b
Message:

dag_write_packet() now works correctly for ERF - fixed issues with calculating size to send.
dag_write_packet() still needs to handle type conversions from other formats.

Replaced all references to FORMAT_DATA in the output path to FORMAT_DATA_OUT, to correctly use the format_out_t data structure. This struct only differs in that it lacks a DUCK structure, so perhaps it's worth collapsing these two structs back into a single one, and removing the FORMAT_DATA / FORMAT_DATA_OUT confusion.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_dag25.c

    rf0b87a7 r35c5a72  
    6666
    6767#define DATA(x) ((struct dag_format_data_t *)x->format_data)
     68#define DATA_OUT(x) ((struct dag_format_data_out_t *)x->format_data)
     69
    6870#define FORMAT_DATA DATA(libtrace)
    69 #define DATA_OUT(x) ((struct dag_format_data_out_t *)x->format_data)
    7071#define FORMAT_DATA_OUT DATA_OUT(libtrace)
    7172
     
    112113struct dag_dev_t *open_dags = NULL;
    113114
    114 static void dag_probe_filename(const char *filename)
     115static int dag_probe_filename(const char *filename)
    115116{
    116117        struct stat statbuf;
     
    289290                stream = atoi(++scan);
    290291        }
    291         FORMAT_DATA->dagstream = stream;
     292        FORMAT_DATA_OUT->dagstream = stream;
    292293
    293294        dag_device = dag_find_open_device(dag_dev_name);
     
    302303
    303304        if (dag_device == NULL) {
    304                 if (dag_dev_name)
     305                if (dag_dev_name) {
    305306                        free(dag_dev_name);
     307                }
    306308                return -1;
    307309        }
    308310
    309         FORMAT_DATA->device = dag_device;
     311        FORMAT_DATA_OUT->device = dag_device;
    310312        pthread_mutex_unlock(&open_dag_mutex);
    311313        return 0;
     
    381383        struct timeval zero, nopoll;
    382384        uint8_t *top, *bottom;
    383         uint8_t diff = 0;
    384385        top = bottom = NULL;
    385386
     
    388389        nopoll = zero;
    389390
    390         if (dag_attach_stream(FORMAT_DATA->device->fd,
    391                         FORMAT_DATA->dagstream, 0, 1048576) < 0) {
     391        if (dag_attach_stream(FORMAT_DATA_OUT->device->fd,
     392                        FORMAT_DATA_OUT->dagstream, 0, 1048576) < 0) {
    392393                trace_set_err_out(libtrace, errno, "Cannot attach DAG stream");
    393394                return -1;
    394395        }
    395396
    396         if (dag_start_stream(FORMAT_DATA->device->fd,
    397                         FORMAT_DATA->dagstream) < 0) {
     397        if (dag_start_stream(FORMAT_DATA_OUT->device->fd,
     398                        FORMAT_DATA_OUT->dagstream) < 0) {
    398399                trace_set_err_out(libtrace, errno, "Cannot start DAG stream");
    399400                return -1;
    400401        }
    401         FORMAT_DATA->stream_attached = 1;
     402        FORMAT_DATA_OUT->stream_attached = 1;
    402403
    403404        /* We don't want the dag card to do any sleeping */
     405        /*
    404406        dag_set_stream_poll(FORMAT_DATA->device->fd,
    405407                        FORMAT_DATA->dagstream, 0, &zero,
    406408                        &nopoll);
    407 
     409*/
    408410        return 0;
    409411}
     
    457459
    458460static int dag_pause_output(libtrace_out_t *libtrace) {
    459         if (dag_stop_stream(FORMAT_DATA->device->fd,
    460                         FORMAT_DATA->dagstream) < 0) {
     461        if (dag_stop_stream(FORMAT_DATA_OUT->device->fd,
     462                        FORMAT_DATA_OUT->dagstream) < 0) {
    461463                trace_set_err_out(libtrace, errno, "Could not stop DAG stream");
    462464                return -1;
    463465        }
    464         if (dag_detach_stream(FORMAT_DATA->device->fd,
    465                         FORMAT_DATA->dagstream) < 0) {
     466        if (dag_detach_stream(FORMAT_DATA_OUT->device->fd,
     467                        FORMAT_DATA_OUT->dagstream) < 0) {
    466468                trace_set_err_out(libtrace, errno, "Could not detach DAG stream");
    467469                return -1;
    468470        }
    469         FORMAT_DATA->stream_attached = 0;
     471        FORMAT_DATA_OUT->stream_attached = 0;
    470472        return 0;
    471473}
     
    503505static int dag_fin_output(libtrace_out_t *libtrace) {
    504506        pthread_mutex_lock(&open_dag_mutex);
    505         if (FORMAT_DATA->stream_attached)
     507        if (FORMAT_DATA_OUT->stream_attached)
    506508                dag_pause_output(libtrace);
    507         FORMAT_DATA->device->ref_count --;
    508 
    509         if (FORMAT_DATA->device->ref_count == 0)
    510                 dag_close_device(FORMAT_DATA->device);
     509        FORMAT_DATA_OUT->device->ref_count --;
     510
     511        if (FORMAT_DATA_OUT->device->ref_count == 0)
     512                dag_close_device(FORMAT_DATA_OUT->device);
    511513        free(libtrace->format_data);
    512514        pthread_mutex_unlock(&open_dag_mutex);
     
    629631        int err;
    630632        void *record;
    631         int size = trace_get_capture_length(packet);
     633        int size = trace_get_capture_length(packet) + dag_record_size;
    632634        size = size + (8 - (size % 8));
    633635
    634         err = dag_tx_stream_copy_bytes(FORMAT_DATA->device->fd, FORMAT_DATA->dagstream,
    635                         packet->buffer, size);
    636 
    637         if (err == NULL)
    638                 trace_set_err(libtrace, errno, "dag_tx_stream_copy_bytes failed!");
     636
     637        //dag_record_t *erf = packet->buffer;
     638/*
     639        record = dag_tx_get_stream_space(FORMAT_DATA_OUT->device->fd, FORMAT_DATA_OUT->dagstream, 65535);
     640
     641        memcpy(record,packet->buffer,size);
     642
     643        dag_tx_stream_commit_bytes(FORMAT_DATA_OUT->device->fd, FORMAT_DATA_OUT->dagstream,
     644                        size );
     645*/
     646
     647
     648
     649        if (dag_tx_stream_copy_bytes(FORMAT_DATA_OUT->device->fd, FORMAT_DATA_OUT->dagstream,
     650                        packet->buffer, size) == -1 ) {
     651                trace_set_err_out(libtrace, errno, "dag_tx_stream_copy_bytes failed!");
     652                return 1;
     653        }
    639654
    640655        return 0;
     
    764779        dag_start_input,                /* start_input */
    765780        dag_pause_input,                /* pause_input */
    766         dag_init_output,                /* init_output */ /* done */
     781        dag_init_output,                /* init_output */
    767782        NULL,                           /* config_output */
    768         dag_start_output,               /* start_output */ /* done */
     783        dag_start_output,               /* start_output */
    769784        dag_fin_input,                  /* fin_input */
    770         dag_fin_output,                 /* fin_output */ /* done */
     785        dag_fin_output,                 /* fin_output */
    771786        dag_read_packet,                /* read_packet */
    772787        dag_prepare_packet,             /* prepare_packet */
    773788        NULL,                           /* fin_packet */
    774         dag_write_packet,               /* write_packet */ /* todo */
     789        dag_write_packet,               /* write_packet */
    775790        erf_get_link_type,              /* get_link_type */
    776791        erf_get_direction,              /* get_direction */
Note: See TracChangeset for help on using the changeset viewer.