> From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Xueming Li > Sent: Thursday, October 19, 2017 3:07 PM > To: Wu, Jingjing <jingjing...@intel.com> > Cc: Xueming Li <xuemi...@mellanox.com>; dev@dpdk.org > Subject: [dpdk-dev] [RFC PATCH 0/2] using scapy to generate packet templates
Hi, First off - cool to make DPDK more dynamic with Scapy, and I see value in "somehow" enabling DPDK with Scapy. > The target is to make testpmd flexible to generate all kinds of packet > in just one line. Examples: > > # send UDP packet to port 0 queue 0 > testpmd> scapy 0 Ether()/IP()/UDP()/"hello_world" > > # send 4 L3 VXLAN packets with inner UDP dport 1-4 to port 1 queue 1-4, one > packet per queue > testpmd> scapy 1 Ether()/IP()/UDP()/VXLAN()/IPv6()/UDP(dport=(1,4))/"cool" > > # Random > testpmd> scapy 2 > Ether(src=RandMAC())/IP(dst=RandIP())/TCP(sport=RandShort(),dport=0x1234) > > This patch introduce scapy - a python tool to generate static packet > templates. > Txonly forwarding mode is modified to support template if available. Testpmd is a good use-case, but perhaps we're limiting the scope of DPDK/Scapy if we only integrate with Testpmd. What if I wanted to easily generate some traffic from a sample app? As a suggestion, what about building a library that provides Scapy functionality, allowing any application to easily generate mbufs using the rte_scapy* functions: /* demo usage */ rte_scapy *scapy = rte_scapy_init(); rte_mbuf *m = rte_scapy_mbuf_from_str(scapy, "Ether()/IP()/UDP()"); Testpmd could then use the rte_scapy library, passing in any parameters after testpmd> scapy command as a string? Had you already considered this library type design? > Two new configuration: > CONFIG_RTE_TEST_PMD_SCAPY=y > CONFIG_RTE_PYTHON=python2.7 > > Scapy quick demo: http://www.secdev.org/projects/scapy/demo.html > > There are 2 other potential solution to support more fancy sending in the > future: > 1. Invoke scapy and expose mbuf hugepage pointers to python > This should allow more flexible and dynamic processing > 2. Scapy uses wrapped DPDK port as regular port > Make scapy capable to send high speed streams. Not a strong opinion, but a gut feeling; I see more value in generating packets with Python and using them from C than giving Python full access to DPDK internals and hugepages. Regards, -Harry > Xueming Li (2): > app/testpmd: add packet template > app/testpmd: add scapy command as pkt template > > app/test-pmd/Makefile | 5 +++ > app/test-pmd/cmdline.c | 99 > +++++++++++++++++++++++++++++++++++++++++++++++++- > app/test-pmd/testpmd.c | 3 ++ > app/test-pmd/testpmd.h | 1 + > app/test-pmd/txonly.c | 42 +++++++++++++-------- > config/common_base | 2 + > 6 files changed, 135 insertions(+), 17 deletions(-) > > -- > 2.13.3