On Thu, Jun 15, 2017 at 01:01:57AM +0530, Varsha Rao wrote:
> diff --git a/include/datatype.h b/include/datatype.h
> index 04b7d88..748688e 100644
> --- a/include/datatype.h
> +++ b/include/datatype.h
> @@ -145,7 +145,8 @@ struct datatype {
> const char *desc;
> const struct datatype *basetype;
> const char *basefmt;
> - void (*print)(const struct expr *expr);
> + void (*print)(const struct expr *expr,
> + struct print_ctx *ct);
Could you use:
struct print_ctx *pctx
instead?
'ct' usually refers to the connection tracking system (ct) in our
codebase, so I would prefer we have a different variable name.
This applies everywhere in this patch.
> struct error_record *(*parse)(const struct expr *sym,
> struct expr **res);
> const struct symbol_table *sym_tbl;
> @@ -157,7 +158,7 @@ extern const struct datatype
> *datatype_lookup_byname(const char *name);
>
> extern struct error_record *symbol_parse(const struct expr *sym,
> struct expr **res);
> -extern void datatype_print(const struct expr *expr);
> +extern void datatype_print(const struct expr *expr, struct print_ctx *ct);
>
> static inline bool datatype_equal(const struct datatype *d1,
> const struct datatype *d2)
> @@ -205,7 +206,8 @@ extern struct error_record *symbolic_constant_parse(const
> struct expr *sym,
> const struct symbol_table
> *tbl,
> struct expr **res);
> extern void symbolic_constant_print(const struct symbol_table *tbl,
> - const struct expr *expr, bool quotes);
> + const struct expr *expr, bool quotes,
> + struct print_ctx *ct);
> extern void symbol_table_print(const struct symbol_table *tbl,
> const struct datatype *dtype,
> enum byteorder byteorder);
> diff --git a/include/expression.h b/include/expression.h
> index 9ba87e8..80f91d0 100644
> --- a/include/expression.h
> +++ b/include/expression.h
> @@ -157,7 +157,8 @@ struct expr_ops {
> void (*set_type)(const struct expr *expr,
> const struct datatype *dtype,
> enum byteorder byteorder);
> - void (*print)(const struct expr *expr);
> + void (*print)(const struct expr *expr,
> + struct print_ctx *ct);
> bool (*cmp)(const struct expr *e1,
> const struct expr *e2);
> void (*pctx_update)(struct proto_ctx *ctx,
> @@ -330,7 +331,7 @@ extern struct expr *expr_alloc(const struct location *loc,
> extern struct expr *expr_clone(const struct expr *expr);
> extern struct expr *expr_get(struct expr *expr);
> extern void expr_free(struct expr *expr);
> -extern void expr_print(const struct expr *expr);
> +extern void expr_print(const struct expr *expr, struct print_ctx *ct);
> extern bool expr_cmp(const struct expr *e1, const struct expr *e2);
> extern void expr_describe(const struct expr *expr);
>
> @@ -410,7 +411,7 @@ extern struct expr *list_expr_alloc(const struct location
> *loc);
>
> extern struct expr *set_expr_alloc(const struct location *loc);
> extern int set_to_intervals(struct list_head *msgs, struct set *set,
> - struct expr *init, bool add);
> + struct expr *init, bool add, struct print_ctx *ct);
Why do we need this? I think we only need print_ctx for *_print()
functions.
> extern void interval_map_decompose(struct expr *set);
>
> extern struct expr *mapping_expr_alloc(const struct location *loc,
> diff --git a/include/netlink.h b/include/netlink.h
> index 81538ff..0c7cd90 100644
> --- a/include/netlink.h
> +++ b/include/netlink.h
> @@ -213,6 +213,7 @@ struct netlink_mon_handler {
> struct netlink_ctx *ctx;
> const struct location *loc;
> bool cache_needed;
> + struct print_ctx *ct;
I think you can place this in 'struct netlink_ctx', see more detailed
comment below.
> diff --git a/include/nftables.h b/include/nftables.h
> index 6f54155..1c747d6 100644
> --- a/include/nftables.h
> +++ b/include/nftables.h
> @@ -24,12 +24,16 @@ enum debug_level {
>
> #define INCLUDE_PATHS_MAX 16
>
> +struct print_ctx {
> + unsigned int numeric_output;
> + unsigned int stateless_output;
> + unsigned int ip2name_output;
> + unsigned int handle_output;
You can probably remove the trailing "_output" now that this is inside
struct print_ctx, it is obvious they refer to printing toggles.
> +};
> +
> extern unsigned int max_errors;
> -extern unsigned int numeric_output;
> -extern unsigned int stateless_output;
> -extern unsigned int ip2name_output;
> -extern unsigned int handle_output;
> extern unsigned int debug_level;
> +
> extern const char *include_paths[INCLUDE_PATHS_MAX];
>
> enum nftables_exit_codes {
> @@ -107,6 +111,7 @@ struct input_descriptor {
>
> struct parser_state;
>
> -int nft_run(void *scanner, struct parser_state *state, struct list_head
> *msgs);
> +int nft_run(void *scanner, struct parser_state *state, struct list_head
> *msgs,
> + struct print_ctx *ct);
>
> #endif /* NFTABLES_NFTABLES_H */
> diff --git a/include/rule.h b/include/rule.h
> index fb46064..48cb5f1 100644
> --- a/include/rule.h
> +++ b/include/rule.h
> @@ -195,7 +195,7 @@ struct rule {
> extern struct rule *rule_alloc(const struct location *loc,
> const struct handle *h);
> extern void rule_free(struct rule *rule);
> -extern void rule_print(const struct rule *rule);
> +extern void rule_print(const struct rule *rule, struct print_ctx *ct);
> extern struct rule *rule_lookup(const struct chain *chain, uint64_t handle);
>
> /**
> @@ -244,7 +244,7 @@ extern void set_add_hash(struct set *set, struct table
> *table);
> extern struct set *set_lookup(const struct table *table, const char *name);
> extern struct set *set_lookup_global(uint32_t family, const char *table,
> const char *name);
> -extern void set_print(const struct set *set);
> +extern void set_print(const struct set *set, struct print_ctx *ct);
> extern void set_print_plain(const struct set *s);
>
> #include <statement.h>
> @@ -292,7 +292,7 @@ void obj_free(struct obj *obj);
> void obj_add_hash(struct obj *obj, struct table *table);
> struct obj *obj_lookup(const struct table *table, const char *name,
> uint32_t type);
> -void obj_print(const struct obj *n);
> +void obj_print(const struct obj *n, struct print_ctx *ct);
> void obj_print_plain(const struct obj *obj);
> const char *obj_type_name(uint32_t type);
>
> @@ -475,7 +475,8 @@ extern int cmd_evaluate(struct eval_ctx *ctx, struct cmd
> *cmd);
> extern struct error_record *rule_postprocess(struct rule *rule);
>
> struct netlink_ctx;
> -extern int do_command(struct netlink_ctx *ctx, struct cmd *cmd);
> +extern int do_command(struct netlink_ctx *ctx, struct cmd *cmd,
> + struct print_ctx *ct);
You can place this in netlink_ctx so...
struct netlink_ctx {
...
struct print_ctx *pctx;
};
So we can make this patch smaller, you don't need to update that many
functions.
> extern int cache_update(enum cmd_ops cmd, struct list_head *msgs);
> extern void cache_flush(void);
> diff --git a/include/statement.h b/include/statement.h
> index 317d53e..d6ebc01 100644
> --- a/include/statement.h
> +++ b/include/statement.h
> @@ -261,7 +261,8 @@ struct stmt_ops {
> enum stmt_types type;
> const char *name;
> void (*destroy)(struct stmt *stmt);
> - void (*print)(const struct stmt *stmt);
> + void (*print)(const struct stmt *stmt,
> + struct print_ctx *ct);
> };
>
> enum stmt_flags {
> @@ -312,7 +313,7 @@ extern struct stmt *stmt_alloc(const struct location *loc,
> int stmt_evaluate(struct eval_ctx *ctx, struct stmt *stmt);
> extern void stmt_free(struct stmt *stmt);
> extern void stmt_list_free(struct list_head *list);
> -extern void stmt_print(const struct stmt *stmt);
> +extern void stmt_print(const struct stmt *stmt, struct print_ctx *ct);
>
> const char *get_rate(uint64_t byte_rate, uint64_t *rate);
>
> diff --git a/src/cli.c b/src/cli.c
> index a74411a..c91eced 100644
> --- a/src/cli.c
> +++ b/src/cli.c
> @@ -129,7 +129,7 @@ static void cli_complete(char *line)
>
> parser_init(state, &msgs);
> scanner_push_buffer(scanner, &indesc_cli, line);
> - nft_run(scanner, state, &msgs);
> + nft_run(scanner, state, &msgs, NULL);
I suggest you pass it here as global. Look, the cli code (interactive
mode that you exercise via -i) will not go into libnftables, so it's
fine to to keep it global.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html