With this property, users can control if this filter is 'enable' or 'disable'. The default behavior for filter is enabled.
Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com> --- 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) -- 1.8.3.1