summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorAlexei Starovoitov <ast@plumgrid.com>2015-05-12 01:19:48 +0300
committerDavid S. Miller <davem@davemloft.net>2015-05-13 06:09:52 +0300
commit9eea92226407e7a117ef1ceef45380ebd000a0e2 (patch)
tree03e230448302879dc3f7bd25601e1d22fa129c5f /net
parent147ef3e218eab03e84f165e8352728719f5d7be4 (diff)
downloadlinux-9eea92226407e7a117ef1ceef45380ebd000a0e2.tar.xz
pktgen: fix packet generation
pkt_gen->last_ok was not set properly, so after the first burst pktgen instead of allocating new packet, will reuse old one, advance eth_type_trans further, which would mean the stack will be seeing very short bogus packets. Fixes: 62f64aed622b ("pktgen: introduce xmit_mode '<start_xmit|netif_receive>'") Signed-off-by: Alexei Starovoitov <ast@plumgrid.com> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/pktgen.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index 8f2687da058e..62f979984a23 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -1189,6 +1189,16 @@ static ssize_t pktgen_if_write(struct file *file,
return -ENOTSUPP;
pkt_dev->xmit_mode = M_NETIF_RECEIVE;
+
+ /* make sure new packet is allocated every time
+ * pktgen_xmit() is called
+ */
+ pkt_dev->last_ok = 1;
+
+ /* override clone_skb if user passed default value
+ * at module loading time
+ */
+ pkt_dev->clone_skb = 0;
} else {
sprintf(pg_result,
"xmit_mode -:%s:- unknown\nAvailable modes: %s",
@@ -3415,7 +3425,6 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
/* get out of the loop and wait
* until skb is consumed
*/
- pkt_dev->last_ok = 1;
break;
}
/* skb was 'freed' by stack, so clean few