diff mbox

[COLO-Frame,v10,36/38] netfilter: Introduce an API to delete all the automatically added netfilters

Message ID 1446551816-15768-37-git-send-email-zhang.zhanghailiang@huawei.com
State New
Headers show

Commit Message

Zhanghailiang Nov. 3, 2015, 11:56 a.m. UTC
We add a new property 'auto' for netfilter to distinguish if netfilter is
added by user or automatically added.

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

Comments

Yang Hongyang Nov. 3, 2015, 12:58 p.m. UTC | #1
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 <zhang.zhanghailiang@huawei.com>
> Cc: Jason Wang <jasowang@redhat.com>
> ---
> 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)
>
diff mbox

Patch

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;
+}
+
 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);
 }
 
 static void netfilter_complete(UserCreatable *uc, Error **errp)