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;
+}
+
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);
}