diff options
author | Andrew Yourtchenko <ayourtch@gmail.com> | 2019-09-24 22:54:02 +0000 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2019-09-25 22:19:59 +0000 |
commit | cbc5e50cafa2c6e928c71513cd90b7c83f96ce99 (patch) | |
tree | 712a282fcdd5008d9e83df0589e778083045a55a /src/vnet/pg | |
parent | 662aa2f853c17de3bfde7ce77a0134ee9effd236 (diff) |
interface: fix pcap_write function
when use pcap cli to capture pcakets into two files rx01.pcap && rx02.pcap,
the first time:
1)pcap rx trace on max 100 intfc any file rx01.pcap
2)......the process of capture data to buffer......
3)pcap rx trace off
the second time:
4)pcap rx trace on max 100 intfc any file rx02.pcap
5)......the process of capture data to buffer......
6)pcap rx trace off
the pcap_write function bug in this two lines
pm->n_packets_captured = 0;
if (pm->n_packets_captured >= pm->n_packets_to_capture) referring to calling pcap_close()
will result in that the twice pcap cli both writes the packets
into rx01.pcap, but nothing into rx02.pcap. Beside, the rx02.pcap
file will not be created.
solution: separate the pcap_close() out of pcap_write()
The automatic cherrypick did not work, so
the manual cherrypick of commit 9af7e2e87e6a11fb69309fc9ce4432acbc4e3
was performed as follows:
0) git checkout stable/1908
1) git checkout -b stable-1908-history-rewrite
2) git rebase -i d1e17d00bb81659bf9e45caa62482bf7029d98f7~1
3) in the editor, mark the second commit as "edit", search for the following commits
and edit as in the snippet below:
edit 30d28bdfd api: enforce vla is last and fixed string type
drop 4c19bfd93 vlib: clean up the "pcap dispatch trace" debug CLI
pick 4aef0dd82 dpdk: fix extended stats
edit 1dafb7fd8 dpdk: initialize rte_mbuf during mempool dequeue
drop 4b943d632 misc: clean up "pcap [rx|tx] trace" debug CLI
4) close the editor
5) git cherry-pick 9af7e2e87e6a11fb69309fc9ce4bf8432acbc4e3
(it applies cleanly)
6) git rebase --continue
(rebase of a 1000+ patches)
7) at prompt - git cherry-pick -x e5948fb49a6eeaf437323cc1043a350cd33bcd47
8) git rebase --continue
9) at prompt - git cherry-pick -x b97641c79f4aaf0069268c550f263167ddea2b34
10) git rebase --continue
11) the rebase finished.
12) git checkout stable/1908
13) git diff stable/1908..stable-1908-history-rewrite | patch -p1
14) discard the whitespace-only hunk
15) git commit -a -s; edit this commit message
Type: fix
Change-Id: Iedeb46f9cf0a4cb12449fd75a4014f95f3bb3fa8
Signed-off-by: Jack Xu <jack.c.xu@ericsson.com>
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Diffstat (limited to 'src/vnet/pg')
-rw-r--r-- | src/vnet/pg/output.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/vnet/pg/output.c b/src/vnet/pg/output.c index a84f30301dc..b5ee157b4c6 100644 --- a/src/vnet/pg/output.c +++ b/src/vnet/pg/output.c @@ -79,7 +79,10 @@ pg_output (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) } if (pif->pcap_file_name != 0) pcap_write (&pif->pcap_main); - + if (pif->pcap_main.file_descriptor >= 0 + && pif->pcap_main.n_packets_captured >= + pif->pcap_main.n_packets_to_capture) + pcap_close (&pif->pcap_main); vlib_buffer_free (vm, vlib_frame_vector_args (frame), n_buffers); if (PREDICT_FALSE (pif->lockp != 0)) |