Changeset f9a70ca


Ignore:
Timestamp:
08/04/14 17:44:53 (6 years ago)
Author:
Richard Sanger <rsangerarj@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, 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:
7e4e9b8, f051c1b
Parents:
be3f75b
Message:

Fix an off by one error with the accepted packets counter.
Fix stats counts returned by the linux formats to return totals.

Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/format_linux.c

    r17c5749 rf9a70ca  
    167167// Something to do with fragmented packets and hashing problems !! TODO figure out if this needs to be on
    168168#define PACKET_FANOUT_FLAG_DEFRAG       0x8000
    169 /* Included but unused by libtrace since 3.10 */
     169/* Included but unused by libtrace since Linux 3.10 */
    170170// if one socket if full roll over to the next
    171171#define PACKET_FANOUT_ROLLOVER          3
    172172// This flag makes any other system roll over
    173173#define PACKET_FANOUT_FLAG_ROLLOVER     0x1000
    174 /* Included but unused by libtrace since 3.12 */
     174/* Included but unused by libtrace since Linux 3.12 */
    175175// schedule random
    176176#define PACKET_FANOUT_RND               4
     
    13601360
    13611361static int linuxring_pread_packet(libtrace_t *libtrace, libtrace_thread_t *t, libtrace_packet_t *packet) {
    1362         fprintf(stderr, "Thread number is #%d\n", t->perpkt_num);
     1362        //fprintf(stderr, "Thread number is #%d\n", t->perpkt_num);
    13631363        int fd = PERPKT_FORMAT(t)->fd;
    13641364        int *rxring_offset = &PERPKT_FORMAT(t)->rxring_offset;
     
    17351735/* Number of packets that passed filtering */
    17361736static uint64_t linuxnative_get_captured_packets(libtrace_t *trace) {
     1737        struct tpacket_stats stats;
     1738
    17371739        if (trace->format_data == NULL)
    17381740                return UINT64_MAX;
     
    17431745        }
    17441746
    1745 #ifdef HAVE_NETPACKET_PACKET_H 
    1746         if ((FORMAT(trace->format_data)->stats_valid & 1)
    1747                         || FORMAT(trace->format_data)->stats_valid == 0) {
    1748                 socklen_t len = sizeof(FORMAT(trace->format_data)->stats);
    1749                 getsockopt(FORMAT(trace->format_data)->fd,
    1750                                 SOL_PACKET,
    1751                                 PACKET_STATISTICS,
    1752                                 &FORMAT(trace->format_data)->stats,
    1753                                 &len);
    1754                 FORMAT(trace->format_data)->stats_valid |= 1;
     1747#ifdef HAVE_NETPACKET_PACKET_H
     1748
     1749        if ((FORMAT(trace->format_data)->stats_valid & 1)
     1750                || FORMAT(trace->format_data)->stats_valid == 0) {
     1751                if (FORMAT(trace->format_data)->per_thread) {
     1752                        size_t i;
     1753                        FORMAT(trace->format_data)->stats.tp_drops = 0;
     1754                        FORMAT(trace->format_data)->stats.tp_packets = 0;
     1755                        for (i = 0; i < trace->perpkt_thread_count; ++i) {
     1756                                socklen_t len = sizeof(stats);
     1757                                getsockopt(FORMAT(trace->format_data)->per_thread[i].fd,
     1758                                           SOL_PACKET,
     1759                                           PACKET_STATISTICS,
     1760                                           &stats,
     1761                                           &len);
     1762                                FORMAT(trace->format_data)->stats.tp_drops += stats.tp_drops;
     1763                                FORMAT(trace->format_data)->stats.tp_packets += stats.tp_packets;
     1764                        }
     1765                        FORMAT(trace->format_data)->stats_valid |= 1;
     1766                } else {
     1767                        socklen_t len = sizeof(FORMAT(trace->format_data)->stats);
     1768                        getsockopt(FORMAT(trace->format_data)->fd,
     1769                                   SOL_PACKET,
     1770                                   PACKET_STATISTICS,
     1771                                   &FORMAT(trace->format_data)->stats,
     1772                                   &len);
     1773                        FORMAT(trace->format_data)->stats_valid |= 1;
     1774                }
    17551775        }
    17561776
     
    17651785 */
    17661786static uint64_t linuxnative_get_dropped_packets(libtrace_t *trace) {
     1787        struct tpacket_stats stats;
    17671788        if (trace->format_data == NULL)
    17681789                return UINT64_MAX;
     
    17721793                return UINT64_MAX;
    17731794        }
    1774        
     1795
    17751796#ifdef HAVE_NETPACKET_PACKET_H 
    17761797        if ((FORMAT(trace->format_data)->stats_valid & 2)
    1777                         || (FORMAT(trace->format_data)->stats_valid==0)) {
    1778                 socklen_t len = sizeof(FORMAT(trace->format_data)->stats);
    1779                 getsockopt(FORMAT(trace->format_data)->fd,
    1780                                 SOL_PACKET,
    1781                                 PACKET_STATISTICS,
    1782                                 &FORMAT(trace->format_data)->stats,
    1783                                 &len);
    1784                 FORMAT(trace->format_data)->stats_valid |= 2;
     1798                || (FORMAT(trace->format_data)->stats_valid==0)) {
     1799                if (FORMAT(trace->format_data)->per_thread) {
     1800                        size_t i;
     1801                        FORMAT(trace->format_data)->stats.tp_drops = 0;
     1802                        FORMAT(trace->format_data)->stats.tp_packets = 0;
     1803                        for (i = 0; i < trace->perpkt_thread_count; ++i) {
     1804                                socklen_t len = sizeof(stats);
     1805                                getsockopt(FORMAT(trace->format_data)->per_thread[i].fd,
     1806                                           SOL_PACKET,
     1807                                           PACKET_STATISTICS,
     1808                                           &stats,
     1809                                           &len);
     1810                                FORMAT(trace->format_data)->stats.tp_drops += stats.tp_drops;
     1811                                FORMAT(trace->format_data)->stats.tp_packets += stats.tp_packets;
     1812                        }
     1813                        FORMAT(trace->format_data)->stats_valid |= 2;
     1814                } else {
     1815                        socklen_t len = sizeof(FORMAT(trace->format_data)->stats);
     1816                        getsockopt(FORMAT(trace->format_data)->fd,
     1817                                   SOL_PACKET,
     1818                                   PACKET_STATISTICS,
     1819                                   &FORMAT(trace->format_data)->stats,
     1820                                   &len);
     1821                        FORMAT(trace->format_data)->stats_valid |= 2;
     1822                }
    17851823        }
    17861824
  • lib/trace.c

    rbe3f75b rf9a70ca  
    287287        libtrace->first_packets.packets = NULL;
    288288        libtrace->dropped_packets = UINT64_MAX;
    289         libtrace->accepted_packets = UINT64_MAX;
    290289
    291290        /* Parse the URI to determine what sort of trace we are dealing with */
Note: See TracChangeset for help on using the changeset viewer.