Sorry, please ignore this patchset. As me and Jason came to an agreement of another way of implementation. refer to thread: http://lists.nongnu.org/archive/html/qemu-devel/2015-07/msg05445.html
I will send another patchset later. On 07/24/2015 06:55 PM, Yang Hongyang wrote:
This patch add a net filter between network backend and NIC devices. All packets will pass by this filter. Also implement a netbuffer plugin for example, the netbuffer plugin could be used by VM FT solutions like Macrocheckpointing, to buffer/release packets. Based on this, dump plugin could be easily implemented. I've done some simple tests on this series, backend, tap,user NIC, e1000,virtio-net There's still some missing functions to be done, I've posted this early in order to gain more comments, thank you! TODO: multiqueue support. +--------------+ +-------------+ +----------+ | filter | |frontend(NIC)| | peer+--> | | | | network <--+backend <-------+ peer | | backend | | peer +-------> | +----------+ +--------------+ +-------------+ Usage: -netdev tap,id=bn0 # you can use whatever backend as needed -netdev filter,id=f0,backend=bn0 -netdev filter-<plugin>,id=p0,filter=f0 -device e1000,netdev=f0 NOTE: You can attach multiple plugins to the filter, dynamically add/remove filter and filter-<plugin>. The netbuffer plugin: Usage: -netdev tap,id=bn0 # you can use whatever backend as needed -netdev filter,id=f0,backend=bn0 -netdev filter-buffer,id=p0,filter=f0 -device e1000,netdev=f0 Will supply a public API to release the buffer. But there's no callers currently. To test this feature, it's quite simple, just use netdev_add filter-buffer,id=p0,filter=f0 to buffer packets, netdev_del p0 will release packets. You can also implement whatever plugin you needed based on this filter. Yang Hongyang (9): netdev: Add a net filter virtio-net: add filter support filter: remove plugins when remove filter filter: remove filter before remove network backend filter: add netbuffer plugin introduce qemu_find_net_clients_by_model net/queue: export qemu_net_queue_append move out net queue structs define add a public api to release buffer hw/net/virtio-net.c | 17 ++- include/net/filter.h | 21 ++++ include/net/net.h | 5 + include/net/queue.h | 26 ++++ net/Makefile.objs | 2 + net/clients.h | 6 + net/filter-buffer.c | 185 ++++++++++++++++++++++++++++ net/filter.c | 331 +++++++++++++++++++++++++++++++++++++++++++++++++++ net/net.c | 51 +++++++- net/queue.c | 31 +---- qapi-schema.json | 40 ++++++- 11 files changed, 679 insertions(+), 36 deletions(-) create mode 100644 include/net/filter.h create mode 100644 net/filter-buffer.c create mode 100644 net/filter.c
-- Thanks, Yang.