aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2026-05-03 23:55:48 +0200
committerStefano Brivio <sbrivio@redhat.com>2026-05-07 08:06:30 +0200
commit393c87e18498f77023ffc3b902810207c7b6c835 (patch)
tree8df03a143e002e9f50c9c360d2bf2057ff73af99
parent279b679c273727db7d4d719a49f8b6e8610b7836 (diff)
downloadpasst-393c87e18498f77023ffc3b902810207c7b6c835.tar
passt-393c87e18498f77023ffc3b902810207c7b6c835.tar.gz
passt-393c87e18498f77023ffc3b902810207c7b6c835.tar.bz2
passt-393c87e18498f77023ffc3b902810207c7b6c835.tar.lz
passt-393c87e18498f77023ffc3b902810207c7b6c835.tar.xz
passt-393c87e18498f77023ffc3b902810207c7b6c835.tar.zst
passt-393c87e18498f77023ffc3b902810207c7b6c835.zip
fwd: Generalise fwd_rules_info()
fwd_rules_info() is used to print a full table of forwarding rules for debugging or the like. Currently it has one caller, and uses info() to dump the messages. However for the upcoming configuration client, we're going to want to dump the rules in some similar, but not quite identical ways. For example, at different severity levels, or to stdout instead of stderr / system log / logfile. So, generalise fwd_rules_info() to fwd_rules_dump() which takes a printing function as a parameter. Because we want this to work with "functions" like info, which is actually a macro, we have to convert fwd_rules_dump() to a macro as well. We also allow the prefix and suffix for each rule / line to be provided as a parameter. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--conf.c3
-rw-r--r--fwd_rule.c16
-rw-r--r--fwd_rule.h20
3 files changed, 21 insertions, 18 deletions
diff --git a/conf.c b/conf.c
index 5aacfe0..0586107 100644
--- a/conf.c
+++ b/conf.c
@@ -902,7 +902,8 @@ dns6:
dir = "Inbound";
info("%s forwarding rules (%s):", dir, pif_name(i));
- fwd_rules_info(c->fwd[i]->rules, c->fwd[i]->count);
+ fwd_rules_dump(info, c->fwd[i]->rules, c->fwd[i]->count,
+ " ", "");
}
}
diff --git a/fwd_rule.c b/fwd_rule.c
index 1413584..777282d 100644
--- a/fwd_rule.c
+++ b/fwd_rule.c
@@ -124,7 +124,6 @@ const union inany_addr *fwd_rule_addr(const struct fwd_rule *rule)
*/
__attribute__((noinline))
#endif
-/* cppcheck-suppress staticFunction */
const char *fwd_rule_fmt(const struct fwd_rule *rule, char *dst, size_t size)
{
const char *percent = *rule->ifname ? "%" : "";
@@ -159,21 +158,6 @@ const char *fwd_rule_fmt(const struct fwd_rule *rule, char *dst, size_t size)
}
/**
- * fwd_rules_info() - Print forwarding rules for debugging
- * @fwd: Table to print
- */
-void fwd_rules_info(const struct fwd_rule *rules, size_t count)
-{
- unsigned i;
-
- for (i = 0; i < count; i++) {
- char buf[FWD_RULE_STRLEN];
-
- info(" %s", fwd_rule_fmt(&rules[i], buf, sizeof(buf)));
- }
-}
-
-/**
* fwd_rule_conflicts() - Test if two rules conflict with each other
* @a, @b: Rules to test
*/
diff --git a/fwd_rule.h b/fwd_rule.h
index f0f4efd..5855138 100644
--- a/fwd_rule.h
+++ b/fwd_rule.h
@@ -97,7 +97,25 @@ void fwd_probe_ephemeral(void);
const union inany_addr *fwd_rule_addr(const struct fwd_rule *rule);
const char *fwd_rule_fmt(const struct fwd_rule *rule, char *dst, size_t size);
-void fwd_rules_info(const struct fwd_rule *rules, size_t count);
void fwd_rule_parse(char optname, const char *optarg, struct fwd_table *fwd);
+/**
+ * fwd_rules_dump() - Dump forwarding rules
+ * @fn: Printing/logging function to call
+ * @rules: Array of rules to dump
+ * @count: Number of rules to dump
+ * @prefix: String to print at the start of each rule
+ * @suffix: String to print at the end of each rule
+ */
+#define fwd_rules_dump(fn, rules, count, prefix, suffix) \
+ do { \
+ unsigned i_; \
+ for (i_ = 0; i_ < (count); i_++) { \
+ char buf_[FWD_RULE_STRLEN]; \
+ fn("%s%s%s", prefix, \
+ fwd_rule_fmt(&(rules)[i_], buf_, sizeof(buf_)), \
+ suffix); \
+ } \
+ } while (0)
+
#endif /* FWD_RULE_H */