On 07/27/2015 12:53 PM, Jason Wang wrote:
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?
Sorry, I missed that one... will reply in that thread.
Thanks
.
--
Thanks,
Yang.