On 07/31/2015 12:13 PM, Yang Hongyang wrote: > This patch add a new object netfilter, capture all network packets. > Also implement a netbuffer based on this object. > the "buffer" netfilter could be used by VM FT solutions like > MicroCheckpointing, to buffer/release packets. Or to simulate > packet delay. > > Most of the changes of v2 are from Jason's comments. > You can also get the series from: > https://github.com/macrosheep/qemu/tree/netfilter-v2 > > Usage: > -netdev tap,id=bn0 > -netfilter buffer,id=f0,netdev=bn0,chain=in,interval=1000 > -device e1000,netdev=bn0 > > dynamically add/remove netfilters: > netfilter_add buffer,id=f0,netdev=bn0,chain=in,interval=1000 > netfilter_del f0 > > NOTE: > interval's scale is microsecond. > chain is optional, and is one of in|out|all, default is "all". > "in" means this filter will receive packets sent to the @netdev > "out" means this filter will receive packets sent from the @netdev > "all" means this filter will receive packets both sent to/from > the @netdev > > TODO: > - multiqueue support > - dump > > v2: > - add a chain option to netfilter object > - move the hook place earlier, before net_queue_send > - drop the unused api in buffer filter > - squash buffer filter patches into one > - remove receive() api from netfilter, only receive_iov() is enough > - addressed comments from Jason&Thomas > > v1: > initial patch. > > Yang Hongyang (9): > net: add a new object netfilter > init/cleanup of netfilter object > netfilter: add netfilter_{add|del} commands > net: add/remove filters from network backend > netfilter: hook packets before net queue send > net/queue: export qemu_net_queue_append_iov > move out net queue structs define > netfilter: add a netbuffer filter > filter/buffer: update command description and help > > hmp-commands.hx | 30 ++++++ > hmp.c | 29 ++++++ > hmp.h | 4 + > include/net/filter.h | 55 +++++++++++ > include/net/net.h | 8 ++ > include/net/queue.h | 26 +++++ > include/qemu/typedefs.h | 1 + > include/sysemu/sysemu.h | 1 + > monitor.c | 33 +++++++ > net/Makefile.objs | 2 + > net/filter-buffer.c | 160 ++++++++++++++++++++++++++++++ > net/filter.c | 251 > ++++++++++++++++++++++++++++++++++++++++++++++++ > net/filters.h | 17 ++++ > net/net.c | 105 +++++++++++++++++++- > net/queue.c | 31 ++---- > qapi-schema.json | 100 +++++++++++++++++++ > qemu-options.hx | 4 + > qmp-commands.hx | 57 +++++++++++ > vl.c | 13 +++ > 19 files changed, 901 insertions(+), 26 deletions(-) > create mode 100644 include/net/filter.h > create mode 100644 net/filter-buffer.c > create mode 100644 net/filter.c > create mode 100644 net/filters.h >
Hi: I would like to have some unit-tests with this series. It could be started with very simple cases, e.g something like this: 1) adding or removing net filter 2) adding a net filter then destroy the netdev 3) adding and remove more than one net filters 4) adding more than one net filter and they delete the netdev