From 544e7ec0a594c4cfe56d647d532f105895d3b3d9 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 26 Oct 2019 21:50:48 +0100 Subject: [PATCH] output: add ethernet address priting support to --mustach Signed-off-by: Sami Kerola --- samples/mustach.template | 3 ++ src/dhcpd-pools.c | 1 + src/mustach-dhcpd-pools.c | 38 ++++++++++++++ tests/expected/mustach | 102 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+) diff --git a/samples/mustach.template b/samples/mustach.template index 669910d..ed4561e 100644 --- a/samples/mustach.template +++ b/samples/mustach.template @@ -1,3 +1,6 @@ +Ethernets:{{#active_lease}} + macaddress: {{macaddress}} ip: {{ip}}{{/active_lease}} + Subnets:{{#subnets}} location: {{location}} range: {{range}} diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 4bea2ee..1488541 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -231,6 +231,7 @@ static void parse_command_line_opts(struct conf_t *state, int argc, char **argv) #ifdef BUILD_MUSTACH state->mustach_template = optarg; state->output_format = 'm'; + state->print_mac_addreses = 1; #else error(EXIT_FAILURE, 0, "compiled without mustach support"); #endif diff --git a/src/mustach-dhcpd-pools.c b/src/mustach-dhcpd-pools.c index 4e25346..625588e 100644 --- a/src/mustach-dhcpd-pools.c +++ b/src/mustach-dhcpd-pools.c @@ -58,6 +58,7 @@ */ struct expl { struct conf_t *state; + struct leases_t *lease_p; struct range_t *range_p; struct shared_network_t *shnet_p; struct output_helper_t oh; @@ -178,6 +179,36 @@ static struct mustach_itf itf = { .leave = must_leave }; +/*! \brief Mustach active lease aka {{#active_lease}} tag parser and printer. */ +static int must_put_active_lease(void *closure, const char *name, int escape + __attribute__((unused)), FILE *file) +{ + struct expl *e = closure; + + if (!strcmp(name, "ip")) { + fprintf(file, "%s", ntop_ipaddr(&e->lease_p->ip)); + return 0; + } + if (!strcmp(name, "macaddress")) { + fprintf(file, "%s", e->lease_p->ethernet); + return 0; + } + error(EXIT_FAILURE, 0, "mustach_dhcpd_pools: fmustach: unexpected tag: %s", name); + return 1; +} + +/*! \brief A function to move to next lease when {{/active_lease}} is encountered. */ +static int must_next_active_lease(void *closure) +{ + struct expl *e = closure; + + e->lease_p = e->lease_p->hh.next; + if (e->lease_p == NULL) + return 0; + return 1; +} + + /*! \brief Mustach range aka {{#subnets}} tag parser and printer. */ static int must_put_range(void *closure, const char *name, int escape __attribute__ ((unused)), FILE *file) @@ -359,6 +390,13 @@ static int must_enter(void *closure, const char *name) { struct expl *e = closure; + if (!strcmp(name, "active_lease")) { + itf.put = must_put_active_lease; + itf.next = must_next_active_lease; + e->current = 0; + e->lease_p = e->state->leases; + return must_next_active_lease(closure); + } if (!strcmp(name, "subnets")) { itf.put = must_put_range; itf.next = must_next_range; diff --git a/tests/expected/mustach b/tests/expected/mustach index a8942c6..f4df432 100644 --- a/tests/expected/mustach +++ b/tests/expected/mustach @@ -1,3 +1,54 @@ +Ethernets: + macaddress: 00:00:00:00:00:01 ip: 10.0.0.1 + macaddress: 00:00:00:00:00:02 ip: 10.0.0.2 + macaddress: 00:00:00:00:00:03 ip: 10.0.0.3 + macaddress: 00:00:00:00:00:04 ip: 10.0.0.4 + macaddress: 00:00:00:00:00:05 ip: 10.0.0.5 + macaddress: 00:00:00:00:00:06 ip: 10.0.0.6 + macaddress: 00:00:00:00:00:07 ip: 10.0.0.7 + macaddress: 00:00:00:00:00:08 ip: 10.0.0.8 + macaddress: 00:00:00:00:00:09 ip: 10.0.0.9 + macaddress: 00:00:00:00:00:10 ip: 10.0.0.10 + macaddress: 00:00:00:00:00:11 ip: 10.0.0.11 + macaddress: 00:00:00:00:00:12 ip: 10.0.0.12 + macaddress: 00:00:00:00:01:00 ip: 10.1.0.0 + macaddress: 00:00:00:00:01:01 ip: 10.1.0.1 + macaddress: 00:00:00:00:01:02 ip: 10.1.0.2 + macaddress: 00:00:00:00:01:03 ip: 10.1.0.3 + macaddress: 00:00:00:00:01:04 ip: 10.1.0.4 + macaddress: 00:00:00:00:01:05 ip: 10.1.0.5 + macaddress: 00:00:00:00:01:06 ip: 10.1.0.6 + macaddress: 00:00:00:00:01:07 ip: 10.1.0.7 + macaddress: 00:00:00:00:01:08 ip: 10.1.0.8 + macaddress: 00:00:00:00:01:09 ip: 10.1.0.9 + macaddress: 00:00:00:00:01:10 ip: 10.1.0.10 + macaddress: 00:00:00:00:02:00 ip: 10.2.0.0 + macaddress: 00:00:00:00:02:01 ip: 10.2.0.1 + macaddress: 00:00:00:00:02:02 ip: 10.2.0.2 + macaddress: 00:00:00:00:02:03 ip: 10.2.0.3 + macaddress: 00:00:00:00:02:04 ip: 10.2.0.4 + macaddress: 00:00:00:00:02:05 ip: 10.2.0.5 + macaddress: 00:00:00:00:02:06 ip: 10.2.0.6 + macaddress: 00:00:00:00:02:07 ip: 10.2.0.7 + macaddress: 00:00:00:00:02:08 ip: 10.2.0.8 + macaddress: 00:00:00:00:03:00 ip: 10.3.0.0 + macaddress: 00:00:00:00:03:01 ip: 10.3.0.1 + macaddress: 00:00:00:00:03:02 ip: 10.3.0.2 + macaddress: 00:00:00:00:03:03 ip: 10.3.0.3 + macaddress: 00:00:00:00:03:04 ip: 10.3.0.4 + macaddress: 00:00:00:00:03:05 ip: 10.3.0.5 + macaddress: 00:00:00:00:03:06 ip: 10.3.0.6 + macaddress: 00:00:00:00:03:07 ip: 10.3.0.7 + macaddress: 00:00:00:00:03:08 ip: 10.3.0.8 + macaddress: 00:00:00:00:03:09 ip: 10.3.0.9 + macaddress: 00:00:00:00:04:00 ip: 10.4.0.0 + macaddress: 00:00:00:00:04:01 ip: 10.4.0.1 + macaddress: 00:00:00:00:04:02 ip: 10.4.0.2 + macaddress: 00:00:00:00:04:03 ip: 10.4.0.3 + macaddress: 00:00:00:00:04:04 ip: 10.4.0.4 + macaddress: 00:00:00:00:04:05 ip: 10.4.0.5 + macaddress: 00:00:00:00:04:06 ip: 10.4.0.6 + Subnets: location: example1 range: 10.0.0.1 - 10.0.0.20 @@ -127,6 +178,57 @@ number_of_shared_networks: 2 number_of_shared_networks_warning: 0 number_of_shared_networks_critical: 0 --- skip ok --- +Ethernets: + macaddress: 00:00:00:00:00:01 ip: 10.0.0.1 + macaddress: 00:00:00:00:00:02 ip: 10.0.0.2 + macaddress: 00:00:00:00:00:03 ip: 10.0.0.3 + macaddress: 00:00:00:00:00:04 ip: 10.0.0.4 + macaddress: 00:00:00:00:00:05 ip: 10.0.0.5 + macaddress: 00:00:00:00:00:06 ip: 10.0.0.6 + macaddress: 00:00:00:00:00:07 ip: 10.0.0.7 + macaddress: 00:00:00:00:00:08 ip: 10.0.0.8 + macaddress: 00:00:00:00:00:09 ip: 10.0.0.9 + macaddress: 00:00:00:00:00:10 ip: 10.0.0.10 + macaddress: 00:00:00:00:00:11 ip: 10.0.0.11 + macaddress: 00:00:00:00:00:12 ip: 10.0.0.12 + macaddress: 00:00:00:00:01:00 ip: 10.1.0.0 + macaddress: 00:00:00:00:01:01 ip: 10.1.0.1 + macaddress: 00:00:00:00:01:02 ip: 10.1.0.2 + macaddress: 00:00:00:00:01:03 ip: 10.1.0.3 + macaddress: 00:00:00:00:01:04 ip: 10.1.0.4 + macaddress: 00:00:00:00:01:05 ip: 10.1.0.5 + macaddress: 00:00:00:00:01:06 ip: 10.1.0.6 + macaddress: 00:00:00:00:01:07 ip: 10.1.0.7 + macaddress: 00:00:00:00:01:08 ip: 10.1.0.8 + macaddress: 00:00:00:00:01:09 ip: 10.1.0.9 + macaddress: 00:00:00:00:01:10 ip: 10.1.0.10 + macaddress: 00:00:00:00:02:00 ip: 10.2.0.0 + macaddress: 00:00:00:00:02:01 ip: 10.2.0.1 + macaddress: 00:00:00:00:02:02 ip: 10.2.0.2 + macaddress: 00:00:00:00:02:03 ip: 10.2.0.3 + macaddress: 00:00:00:00:02:04 ip: 10.2.0.4 + macaddress: 00:00:00:00:02:05 ip: 10.2.0.5 + macaddress: 00:00:00:00:02:06 ip: 10.2.0.6 + macaddress: 00:00:00:00:02:07 ip: 10.2.0.7 + macaddress: 00:00:00:00:02:08 ip: 10.2.0.8 + macaddress: 00:00:00:00:03:00 ip: 10.3.0.0 + macaddress: 00:00:00:00:03:01 ip: 10.3.0.1 + macaddress: 00:00:00:00:03:02 ip: 10.3.0.2 + macaddress: 00:00:00:00:03:03 ip: 10.3.0.3 + macaddress: 00:00:00:00:03:04 ip: 10.3.0.4 + macaddress: 00:00:00:00:03:05 ip: 10.3.0.5 + macaddress: 00:00:00:00:03:06 ip: 10.3.0.6 + macaddress: 00:00:00:00:03:07 ip: 10.3.0.7 + macaddress: 00:00:00:00:03:08 ip: 10.3.0.8 + macaddress: 00:00:00:00:03:09 ip: 10.3.0.9 + macaddress: 00:00:00:00:04:00 ip: 10.4.0.0 + macaddress: 00:00:00:00:04:01 ip: 10.4.0.1 + macaddress: 00:00:00:00:04:02 ip: 10.4.0.2 + macaddress: 00:00:00:00:04:03 ip: 10.4.0.3 + macaddress: 00:00:00:00:04:04 ip: 10.4.0.4 + macaddress: 00:00:00:00:04:05 ip: 10.4.0.5 + macaddress: 00:00:00:00:04:06 ip: 10.4.0.6 + Subnets: location: example1 range: 10.0.0.1 - 10.0.0.20