qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 0/9] For QEMU 2.5: Add a net filter and a netbuffer


From: Yang Hongyang
Subject: [Qemu-devel] [PATCH 0/9] For QEMU 2.5: Add a net filter and a netbuffer plugin based on the filter
Date: Fri, 24 Jul 2015 18:55:50 +0800

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]