| 83 | } |
| 84 | |
| 85 | int |
| 86 | ff_dump_packets(const char* dump_path, struct rte_mbuf* pkt, uint16_t snap_len, uint32_t f_maxlen) |
| 87 | { |
| 88 | unsigned int out_len = 0, wr_len = 0; |
| 89 | struct pcap_pkthdr pcap_hdr; |
| 90 | void* hdr = &pcap_hdr; |
| 91 | struct timeval ts; |
| 92 | char pcap_f_path[FILE_PATH_LEN] = {0}; |
| 93 | |
| 94 | if (g_pcap_fp == NULL) { |
| 95 | return -1; |
| 96 | } |
| 97 | snap_len = pkt->pkt_len < snap_len ? pkt->pkt_len : snap_len; |
| 98 | gettimeofday(&ts, NULL); |
| 99 | pcap_hdr.sec = ts.tv_sec; |
| 100 | pcap_hdr.usec = ts.tv_usec; |
| 101 | pcap_hdr.caplen = snap_len; |
| 102 | pcap_hdr.len = pkt->pkt_len; |
| 103 | fwrite(hdr, sizeof(struct pcap_pkthdr), 1, g_pcap_fp); |
| 104 | g_flen += sizeof(struct pcap_pkthdr); |
| 105 | |
| 106 | while(pkt != NULL && out_len <= snap_len) { |
| 107 | wr_len = snap_len - out_len; |
| 108 | wr_len = wr_len > pkt->data_len ? pkt->data_len : wr_len ; |
| 109 | fwrite(rte_pktmbuf_mtod(pkt, char*), wr_len, 1, g_pcap_fp); |
| 110 | out_len += wr_len; |
| 111 | pkt = pkt->next; |
| 112 | } |
| 113 | g_flen += out_len; |
| 114 | |
| 115 | if ( g_flen >= f_maxlen ){ |
| 116 | fclose(g_pcap_fp); |
| 117 | if ( ++seq >= PCAP_FILE_NUM ) |
| 118 | seq = 0; |
| 119 | |
| 120 | ff_enable_pcap(dump_path, snap_len); |
| 121 | } |
| 122 | |
| 123 | return 0; |
| 124 | } |
| 125 |
no test coverage detected