qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/9] For QEMU 2.5: Add a net filter and a netbuffer plugin based on the filter
@ 2015-07-24 10:55 Yang Hongyang
  2015-07-24 10:55 ` [Qemu-devel] [PATCH 1/9] netdev: Add a net filter Yang Hongyang
                   ` (11 more replies)
  0 siblings, 12 replies; 19+ messages in thread
From: Yang Hongyang @ 2015-07-24 10:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: jasowang, mrhines, thuth, stefanha, Yang Hongyang

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

-- 
1.9.1

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2015-07-29 10:35 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-24 10:55 [Qemu-devel] [PATCH 0/9] For QEMU 2.5: Add a net filter and a netbuffer plugin based on the filter Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 1/9] netdev: Add a net filter Yang Hongyang
2015-07-27 12:38   ` Thomas Huth
2015-07-27 13:15     ` Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 2/9] virtio-net: add filter support Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 3/9] filter: remove plugins when remove filter Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 4/9] filter: remove filter before remove network backend Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 5/9] filter: add netbuffer plugin Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 6/9] introduce qemu_find_net_clients_by_model Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 7/9] net/queue: export qemu_net_queue_append Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 8/9] move out net queue structs define Yang Hongyang
2015-07-24 10:55 ` [Qemu-devel] [PATCH 9/9] add a public api to release buffer Yang Hongyang
2015-07-25  5:06 ` [Qemu-devel] [PATCH 0/9] For QEMU 2.5: Add a net filter and a netbuffer plugin based on the filter zhanghailiang
2015-07-26 14:13   ` Yang Hongyang
2015-07-27 10:32     ` Daniel P. Berrange
2015-07-27 13:23       ` Yang Hongyang
2015-07-27  4:53 ` Jason Wang
2015-07-27  5:01   ` Yang Hongyang
2015-07-29 10:34 ` Yang Hongyang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).