qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH COLO-Frame v10 36/38] netfilter: Introduce an AP


From: Yang Hongyang
Subject: Re: [Qemu-devel] [PATCH COLO-Frame v10 36/38] netfilter: Introduce an API to delete all the automatically added netfilters
Date: Tue, 3 Nov 2015 20:58:50 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

On 2015年11月03日 19:56, zhanghailiang wrote:
We add a new property 'auto' for netfilter to distinguish if netfilter is
added by user or automatically added.

Signed-off-by: zhanghailiang <address@hidden>
Cc: Jason Wang <address@hidden>
---
v10: new patch
---
  include/net/filter.h |  2 ++
  net/filter-buffer.c  | 17 +++++++++++++++++
  net/filter.c         | 15 +++++++++++++++
  3 files changed, 34 insertions(+)

diff --git a/include/net/filter.h b/include/net/filter.h
index b0954ba..46d3ef9 100644
--- a/include/net/filter.h
+++ b/include/net/filter.h
@@ -55,6 +55,7 @@ struct NetFilterState {
      char *netdev_id;
      NetClientState *netdev;
      NetFilterDirection direction;
+    bool auto_add;
      char info_str[256];
      QTAILQ_ENTRY(NetFilterState) next;
  };
@@ -76,5 +77,6 @@ ssize_t qemu_netfilter_pass_to_next(NetClientState *sender,
  void filter_buffer_release_all(void);
  void  filter_buffer_del_all_timers(void);
  void qemu_auto_add_filter_buffer(NetFilterDirection direction, Error **errp);
+void qemu_auto_del_filter_buffer(Error **errp);

  #endif /* QEMU_NET_FILTER_H */
diff --git a/net/filter-buffer.c b/net/filter-buffer.c
index 0dc1efb..ea4481c 100644
--- a/net/filter-buffer.c
+++ b/net/filter-buffer.c
@@ -19,6 +19,7 @@
  #include "qapi/qmp-output-visitor.h"
  #include "qapi/qmp-input-visitor.h"
  #include "monitor/monitor.h"
+#include "qmp-commands.h"


  #define TYPE_FILTER_BUFFER "filter-buffer"
@@ -269,6 +270,22 @@ void qemu_auto_add_filter_buffer(NetFilterDirection 
direction, Error **errp)
      g_free(queue);
  }

+static void netdev_del_filter_buffer(NetFilterState *nf, void *opaque,
+                                     Error **errp)
+{
+    if (!strcmp(object_get_typename(OBJECT(nf)), TYPE_FILTER_BUFFER) &&
+        nf->auto_add) {
+        char *id = object_get_canonical_path_component(OBJECT(nf));
+
+        qmp_object_del(id, errp);
+    }
+}
+
+void qemu_auto_del_filter_buffer(Error **errp)
+{
+    qemu_foreach_netfilter(netdev_del_filter_buffer, NULL, errp);
+}
+
  static void filter_buffer_init(Object *obj)
  {
      object_property_add(obj, "interval", "int",
diff --git a/net/filter.c b/net/filter.c
index 326f2b5..dcbcb80 100644
--- a/net/filter.c
+++ b/net/filter.c
@@ -117,6 +117,18 @@ static void netfilter_set_direction(Object *obj, int 
direction, Error **errp)
      nf->direction = direction;
  }

+static bool netfilter_get_auto_flag(Object *obj, Error **errp)
+{
+    NetFilterState *nf = NETFILTER(obj);
+    return nf->auto_add;
+}
+
+static void netfilter_set_auto_flag(Object *obj, bool flag, Error **errp)
+{
+    NetFilterState *nf = NETFILTER(obj);
+    nf->auto_add = flag;
+}
+

This chunk of code should be in previous patch.

  static void netfilter_init(Object *obj)
  {
      object_property_add_str(obj, "netdev",
@@ -126,6 +138,9 @@ static void netfilter_init(Object *obj)
                               NetFilterDirection_lookup,
                               netfilter_get_direction, netfilter_set_direction,
                               NULL);
+    object_property_add_bool(obj, "auto",
+                             netfilter_get_auto_flag, netfilter_set_auto_flag,
+                             NULL);
  }

Ditto.


  static void netfilter_complete(UserCreatable *uc, Error **errp)


--
Thanks,
Yang



reply via email to

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