qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH RFC 2/7] net/filter: Add a 'status' property for


From: Hailiang Zhang
Subject: Re: [Qemu-devel] [PATCH RFC 2/7] net/filter: Add a 'status' property for filter object
Date: Mon, 25 Jan 2016 14:00:39 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1

On 2016/1/25 13:05, Jason Wang wrote:


On 01/22/2016 04:36 PM, zhanghailiang wrote:
With this property, users can control if this filter is 'enable'
or 'disable'. The default behavior for filter is enabled.

Signed-off-by: zhanghailiang <address@hidden>

Let's squash patch 3 into this for a complete implementation of 'status'.


OK, will do that, thanks.

---
  include/net/filter.h |  1 +
  net/filter.c         | 36 ++++++++++++++++++++++++++++++++++++
  2 files changed, 37 insertions(+)

diff --git a/include/net/filter.h b/include/net/filter.h
index 8a20138..9ed5ec6 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 enabled;
      QTAILQ_ENTRY(NetFilterState) next;
  };

diff --git a/net/filter.c b/net/filter.c
index 40254bd..f4933cc 100644
--- a/net/filter.c
+++ b/net/filter.c
@@ -117,8 +117,41 @@ static void netfilter_set_direction(Object *obj, int 
direction, Error **errp)
      nf->direction = direction;
  }

+static char *netfilter_get_status(Object *obj, Error **errp)
+{
+    NetFilterState *nf = NETFILTER(obj);
+
+    if (nf->enabled) {
+        return g_strdup("enable");
+    } else {
+        return g_strdup("disable");
+    }
+}
+
+static void netfilter_set_status(Object *obj, const char *str, Error **errp)
+{
+    NetFilterState *nf = NETFILTER(obj);
+
+    if (!strcmp(str, "enable")) {
+        nf->enabled = true;
+    } else if (!strcmp(str, "disable")) {
+        nf->enabled = false;
+    } else {
+        error_setg(errp, "Invalid value for netfilter status, "
+                         "should be 'enable' or 'disable'");
+    }
+}
+
  static void netfilter_init(Object *obj)
  {
+    NetFilterState *nf = NETFILTER(obj);
+
+    /*
+    * If not configured with 'status' property, the default status
+    * for netfilter will be enabled.
+    */
+    nf->enabled = true;
+
      object_property_add_str(obj, "netdev",
                              netfilter_get_netdev_id, netfilter_set_netdev_id,
                              NULL);
@@ -126,6 +159,9 @@ static void netfilter_init(Object *obj)
                               NetFilterDirection_lookup,
                               netfilter_get_direction, netfilter_set_direction,
                               NULL);
+    object_property_add_str(obj, "status",
+                            netfilter_get_status, netfilter_set_status,
+                            NULL);
  }

  void netfilter_print_info(NetFilterState *nf, char *output_str, int size)


.






reply via email to

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