qemu-devel
[Top][All Lists]
Advanced

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

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


From: zhanghailiang
Subject: Re: [Qemu-devel] [PATCH 0/9] For QEMU 2.5: Add a net filter and a netbuffer plugin based on the filter
Date: Sat, 25 Jul 2015 13:06:28 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0

On 2015/7/24 18:55, 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

Have you considered Daniel's suggestion ? Using the bellow style:
  -netfilter id=f0,plugin=dump
  -netdev tap,id=bn0,filter=f0
  -device e1000,netdev=bn0

Considering the filter as a new 'netdev' seems to be unreasonable,
Whenever we add a new plugin, we have to add a new member to
'NetClientOptions', there will be lots of 'filter' objects in NetClientOptions
area. Besides when we want to describe a net device with several filter plugin 
for VM,
it will become like:
   -netdev tap,id=bn0
   -netdev filter,id=f0,backend=bn0
   -netdev filter-<plugin-0>,id=p0,filter=f0
   -netdev filter-<plugin-1>,id=p1,filter=f1
   ... ...
   -device e1000,netdev=f0
Which is a little verbose for 'netdev' option.
We'd better come to an agreement on the command line style for net filter :)

Cc: Daniel P. Berrange <address@hidden>

Thanks,
zhanghailiang

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






reply via email to

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