Changeset f9a70ca
- Timestamp:
- 08/04/14 17:44:53 (6 years ago)
- 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
- Location:
- lib
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/format_linux.c
r17c5749 rf9a70ca 167 167 // Something to do with fragmented packets and hashing problems !! TODO figure out if this needs to be on 168 168 #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 */ 170 170 // if one socket if full roll over to the next 171 171 #define PACKET_FANOUT_ROLLOVER 3 172 172 // This flag makes any other system roll over 173 173 #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 */ 175 175 // schedule random 176 176 #define PACKET_FANOUT_RND 4 … … 1360 1360 1361 1361 static 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); 1363 1363 int fd = PERPKT_FORMAT(t)->fd; 1364 1364 int *rxring_offset = &PERPKT_FORMAT(t)->rxring_offset; … … 1735 1735 /* Number of packets that passed filtering */ 1736 1736 static uint64_t linuxnative_get_captured_packets(libtrace_t *trace) { 1737 struct tpacket_stats stats; 1738 1737 1739 if (trace->format_data == NULL) 1738 1740 return UINT64_MAX; … … 1743 1745 } 1744 1746 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 } 1755 1775 } 1756 1776 … … 1765 1785 */ 1766 1786 static uint64_t linuxnative_get_dropped_packets(libtrace_t *trace) { 1787 struct tpacket_stats stats; 1767 1788 if (trace->format_data == NULL) 1768 1789 return UINT64_MAX; … … 1772 1793 return UINT64_MAX; 1773 1794 } 1774 1795 1775 1796 #ifdef HAVE_NETPACKET_PACKET_H 1776 1797 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 } 1785 1823 } 1786 1824 -
lib/trace.c
rbe3f75b rf9a70ca 287 287 libtrace->first_packets.packets = NULL; 288 288 libtrace->dropped_packets = UINT64_MAX; 289 libtrace->accepted_packets = UINT64_MAX;290 289 291 290 /* Parse the URI to determine what sort of trace we are dealing with */
Note: See TracChangeset
for help on using the changeset viewer.