Changeset 32ee9b2


Ignore:
Timestamp:
06/26/18 18:05:08 (2 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
cachetimestamps, develop, master, rc-4.0.4, ringdecrementfix, ringperformance
Children:
95ca714
Parents:
528a27c
Message:

Add new trace_flush_output() to public API

Can be used to force a libtrace output to dump any buffered output
to disk immediately.

Note that if the file is compressed or the output trace format
requires a trailer, the flushed file will still not be properly
readable afterwards as this will not result in any trailers
being written. You'll still have to close the file for that.

Mainly this is useful for ensuring that output file sizes grow
over time in situations where the amount of output is relatively
small, rather than staying stuck at 0 bytes until we either reach
1MB of output or the file is closed. For instance, you could have
a timer that calls trace_flush_output() every 30 seconds so that
the output file size will grow if any packets were written in the
last 30 seconds.

Location:
lib
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • lib/format_atmhdr.c

    r2c457ec r32ee9b2  
    202202        NULL,                           /* fin_packet */
    203203        NULL,                           /* write_packet */
     204        NULL,                           /* flush_output */
    204205        atmhdr_get_link_type,           /* get_link_type */
    205206        NULL,                           /* get_direction */
  • lib/format_bpf.c

    r5e3f16c r32ee9b2  
    666666        NULL,                   /* fin_packet */
    667667        NULL,                   /* write_packet */
     668        NULL,                   /* flush_output */
    668669        bpf_get_link_type,      /* get_link_type */
    669670        bpf_get_direction,      /* get_direction */
  • lib/format_dag24.c

    ree6e802 r32ee9b2  
    529529        NULL,                           /* fin_packet */
    530530        NULL,                           /* write_packet */
     531        NULL,                           /* flush_output */
    531532        erf_get_link_type,              /* get_link_type */
    532533        erf_get_direction,              /* get_direction */
  • lib/format_dag25.c

    rcc9c9de r32ee9b2  
    15641564        NULL,                           /* fin_packet */
    15651565        dag_write_packet,               /* write_packet */
     1566        NULL,                           /* flush_output */
    15661567        erf_get_link_type,              /* get_link_type */
    15671568        erf_get_direction,              /* get_direction */
  • lib/format_dpdk.c

    r6d17620 r32ee9b2  
    21592159        dpdk_fin_packet,                    /* fin_packet */
    21602160        dpdk_write_packet,                  /* write_packet */
     2161        NULL,                               /* flush_output */
    21612162        dpdk_get_link_type,                 /* get_link_type */
    21622163        dpdk_get_direction,                 /* get_direction */
  • lib/format_dpdkndag.c

    re54bd5f r32ee9b2  
    733733        NULL,                   /* fin_packet */
    734734        NULL,                   /* write_packet */
     735        NULL,                   /* flush_output */
    735736        erf_get_link_type,      /* get_link_type */
    736737        erf_get_direction,      /* get_direction */
  • lib/format_duck.c

    ree6e802 r32ee9b2  
    337337        NULL,                           /* fin_packet */
    338338        duck_write_packet,              /* write_packet */
     339        NULL,                           /* flush_output */
    339340        duck_get_link_type,             /* get_link_type */
    340341        NULL,                           /* get_direction */
  • lib/format_erf.c

    r207e288 r32ee9b2  
    597597        }
    598598        return numbytes + framinglen;
     599}
     600
     601static int erf_flush_output(libtrace_out_t *libtrace) {
     602        return wandio_wflush(OUTPUT->file);
    599603}
    600604
     
    868872        NULL,                           /* fin_packet */
    869873        erf_write_packet,               /* write_packet */
     874        erf_flush_output,               /* flush_output */
    870875        erf_get_link_type,              /* get_link_type */
    871876        erf_get_direction,              /* get_direction */
     
    912917        NULL,                           /* fin_packet */
    913918        erf_write_packet,               /* write_packet */
     919        erf_flush_output,               /* flush_output */
    914920        erf_get_link_type,              /* get_link_type */
    915921        erf_get_direction,              /* get_direction */
  • lib/format_etsilive.c

    r5577521 r32ee9b2  
    648648        NULL,                           /* fin_packet */
    649649        NULL,                           /* write_packet */
     650        NULL,                           /* flush_output */
    650651        etsilive_get_link_type,         /* get_link_type */
    651652        NULL,                           /* get_direction */
  • lib/format_legacy.c

    r2c457ec r32ee9b2  
    523523        NULL,                           /* fin_packet */
    524524        NULL,                           /* write_packet */
     525        NULL,                           /* flush_output */
    525526        legacyatm_get_link_type,        /* get_link_type */
    526527        NULL,                           /* get_direction */
     
    567568        NULL,                           /* fin_packet */
    568569        NULL,                           /* write_packet */
     570        NULL,                           /* flush_output */
    569571        legacyeth_get_link_type,        /* get_link_type */
    570572        NULL,                           /* get_direction */
     
    611613        NULL,                           /* fin_packet */
    612614        NULL,                           /* write_packet */
     615        NULL,                           /* flush_output */
    613616        legacypos_get_link_type,        /* get_link_type */
    614617        NULL,                           /* get_direction */
     
    655658        NULL,                           /* fin_packet */
    656659        NULL,                           /* write_packet */
     660        NULL,                           /* flush_output */
    657661        legacynzix_get_link_type,       /* get_link_type */
    658662        NULL,                           /* get_direction */
  • lib/format_linux_int.c

    rdb84bb2 r32ee9b2  
    496496        NULL,                           /* fin_packet */
    497497        linuxnative_write_packet,       /* write_packet */
     498        NULL,                           /* flush_output */
    498499        linuxnative_get_link_type,      /* get_link_type */
    499500        linuxnative_get_direction,      /* get_direction */
     
    556557        NULL,                           /* fin_packet */
    557558        NULL,                           /* write_packet */
     559        NULL,                           /* flush_output */
    558560        linuxnative_get_link_type,      /* get_link_type */
    559561        linuxnative_get_direction,      /* get_direction */
  • lib/format_linux_ring.c

    r528a27c r32ee9b2  
    551551
    552552        stream->last_timestamp = packet->order;
    553                
    554553
    555554        /* We just need to get prepare_packet to set all our packet pointers
     
    749748        linuxring_fin_packet,           /* fin_packet */
    750749        linuxring_write_packet,         /* write_packet */
     750        NULL,                           /* flush_output */
    751751        linuxring_get_link_type,        /* get_link_type */
    752752        linuxring_get_direction,        /* get_direction */
     
    811811        NULL,                           /* fin_packet */
    812812        NULL,                           /* write_packet */
     813        NULL,                           /* flush_output */
    813814        linuxring_get_link_type,        /* get_link_type */
    814815        linuxring_get_direction,        /* get_direction */
  • lib/format_ndag.c

    r7c33187 r32ee9b2  
    14341434        NULL,                   /* fin_packet */
    14351435        NULL,                   /* write_packet */
     1436        NULL,                   /* flush_output */
    14361437        erf_get_link_type,      /* get_link_type */
    14371438        erf_get_direction,      /* get_direction */
  • lib/format_pcap.c

    r5a70a80 r32ee9b2  
    583583}
    584584
     585static int pcap_flush_output(libtrace_out_t *libtrace) {
     586        return pcap_dump_flush(OUTPUT.trace.dump);
     587}
     588
    585589static int pcapint_write_packet(libtrace_out_t *libtrace,
    586590                libtrace_packet_t *packet)
     
    779783        NULL,                           /* fin_packet */
    780784        pcap_write_packet,              /* write_packet */
     785        pcap_flush_output,              /* flush_output */
    781786        pcap_get_link_type,             /* get_link_type */
    782787        pcapint_get_direction,          /* get_direction */
     
    823828        NULL,                           /* fin_packet */
    824829        pcapint_write_packet,           /* write_packet */
     830        NULL,                           /* flush_output */
    825831        pcap_get_link_type,             /* get_link_type */
    826832        pcapint_get_direction,          /* get_direction */
  • lib/format_pcapfile.c

    rcc9c9de r32ee9b2  
    532532
    533533        return numbytes+ret;
     534}
     535
     536static int pcapfile_flush_output(libtrace_out_t *out) {
     537
     538        return wandio_wflush(DATAOUT(out)->file);
    534539}
    535540
     
    696701        NULL,                           /* fin_packet */
    697702        pcapfile_write_packet,          /* write_packet */
     703        pcapfile_flush_output,          /* flush_output */
    698704        pcapfile_get_link_type,         /* get_link_type */
    699705        pcapfile_get_direction,         /* get_direction */
  • lib/format_pcapng.c

    r9845e97 r32ee9b2  
    14701470        NULL,                           /* fin_packet */
    14711471        NULL,                           /* write_packet */
     1472        NULL,                           /* flush_output */
    14721473        pcapng_get_link_type,           /* get_link_type */
    14731474        pcapng_get_direction,           /* get_direction */
  • lib/format_rt.c

    ree6e802 r32ee9b2  
    845845        NULL,                           /* fin_packet */
    846846        NULL,                           /* write_packet */
     847        NULL,                           /* flush_output */
    847848        rt_get_link_type,               /* get_link_type */
    848849        NULL,                           /* get_direction */
  • lib/format_tsh.c

    r2c457ec r32ee9b2  
    245245        NULL,                           /* fin_packet */
    246246        NULL,                           /* write_packet */
     247        NULL,                           /* flush_output */
    247248        tsh_get_link_type,              /* get_link_type */
    248249        tsh_get_direction,              /* get_direction */
     
    294295        NULL,                           /* fin_packet */
    295296        NULL,                           /* write_packet */
     297        NULL,                           /* flush_output */
    296298        tsh_get_link_type,              /* get_link_type */
    297299        tsh_get_direction,              /* get_direction */
  • lib/libtrace.h.in

    rcc9c9de r32ee9b2  
    15371537DLLEXPORT void trace_destroy_output(libtrace_out_t *trace);
    15381538
     1539/** Flush an output trace, forcing any buffered packets to be written
     1540 * @param libtrace      The output trace to be flushed
     1541 */
     1542DLLEXPORT int trace_flush_output(libtrace_out_t *libtrace);
     1543
    15391544/** Check (and clear) the current error state of an input trace
    15401545 * @param trace         The input trace to check the error state on
  • lib/libtrace_int.h

    rcc9c9de r32ee9b2  
    624624         */
    625625        int (*write_packet)(libtrace_out_t *libtrace, libtrace_packet_t *packet);
     626
     627        /** Flush any buffered output for an output trace.
     628         *
     629         * @param libtrace      The output trace to be flushed
     630         */
     631        int (*flush_output)(libtrace_out_t *libtrace);
     632
    626633        /** Returns the libtrace link type for a packet.
    627634         *
  • lib/trace.c

    rcc9c9de r32ee9b2  
    816816}
    817817
     818DLLEXPORT int trace_flush_output(libtrace_out_t *libtrace) {
     819        if (!libtrace) {
     820                return -1;
     821        }
     822        if (libtrace->format && libtrace->format->flush_output) {
     823                return libtrace->format->flush_output(libtrace);
     824        }
     825        return 0;
     826}
     827
    818828DLLEXPORT libtrace_packet_t *trace_create_packet(void)
    819829{
Note: See TracChangeset for help on using the changeset viewer.