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 >
Hi: Can you answer my question at http://lists.gnu.org/archive/html/qemu-devel/2015-07/msg04653.html? The main concern is why it must be a new kind of netdev? Thanks