summaryrefslogtreecommitdiff
path: root/usr.sbin/ospf6d/printconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ospf6d/printconf.c')
-rw-r--r--usr.sbin/ospf6d/printconf.c147
1 files changed, 147 insertions, 0 deletions
diff --git a/usr.sbin/ospf6d/printconf.c b/usr.sbin/ospf6d/printconf.c
new file mode 100644
index 00000000000..ab00b8884ae
--- /dev/null
+++ b/usr.sbin/ospf6d/printconf.c
@@ -0,0 +1,147 @@
+/* $OpenBSD: printconf.c,v 1.1 2007/10/08 10:44:51 norby Exp $ */
+
+/*
+ * Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <stdio.h>
+
+#include "ospf6.h"
+#include "ospf6d.h"
+#include "ospfe.h"
+
+void print_mainconf(struct ospfd_conf *);
+const char *print_no(u_int16_t);
+void print_redistribute(struct ospfd_conf *);
+void print_rtlabel(struct ospfd_conf *);
+void print_iface(struct iface *);
+
+void
+print_mainconf(struct ospfd_conf *conf)
+{
+ printf("router-id %s\n", inet_ntoa(conf->rtr_id));
+
+ if (conf->flags & OSPFD_FLAG_NO_FIB_UPDATE)
+ printf("fib-update no\n");
+ else
+ printf("fib-update yes\n");
+
+ if (conf->flags & OSPFD_FLAG_STUB_ROUTER)
+ printf("stub router yes\n");
+
+ print_redistribute(conf);
+ print_rtlabel(conf);
+
+ printf("spf-delay %u\n", conf->spf_delay);
+ printf("spf-holdtime %u\n", conf->spf_hold_time);
+}
+
+const char *
+print_no(u_int16_t type)
+{
+ if (type & REDIST_NO)
+ return ("no ");
+ else
+ return ("");
+}
+
+void
+print_redistribute(struct ospfd_conf *conf)
+{
+ struct redistribute *r;
+
+ if (conf->redistribute & REDISTRIBUTE_DEFAULT)
+ printf("redistribute default\n");
+
+ SIMPLEQ_FOREACH(r, &conf->redist_list, entry) {
+ switch (r->type & ~REDIST_NO) {
+ case REDIST_STATIC:
+ printf("%sredistribute static\n", print_no(r->type));
+ break;
+ case REDIST_CONNECTED:
+ printf("%sredistribute connected\n", print_no(r->type));
+ break;
+ case REDIST_LABEL:
+ printf("%sredistribute rtlabel %s\n",
+ print_no(r->type), rtlabel_id2name(r->label));
+ break;
+ case REDIST_ADDR:
+ printf("%sredistribute %s/%d\n",
+ print_no(r->type), inet_ntoa(r->addr),
+ mask2prefixlen(r->mask.s_addr));
+ break;
+ }
+ }
+}
+
+void
+print_rtlabel(struct ospfd_conf *conf)
+{
+ struct n2id_label *label;
+
+ TAILQ_FOREACH(label, &rt_labels, entry)
+ if (label->ext_tag)
+ printf("rtlabel \"%s\" external-tag %u\n",
+ label->name, label->ext_tag);
+}
+
+void
+print_iface(struct iface *iface)
+{
+ printf("\tinterface %s {\n", iface->name);
+
+ printf("\t\thello-interval %d\n", iface->hello_interval);
+ printf("\t\tmetric %d\n", iface->metric);
+
+ if (iface->passive)
+ printf("\t\tpassive\n");
+ if (*iface->demote_group)
+ printf("\t\tdemote %s\n", iface->demote_group);
+
+ printf("\t\tretransmit-interval %d\n", iface->rxmt_interval);
+ printf("\t\trouter-dead-time %d\n", iface->dead_interval);
+ printf("\t\trouter-priority %d\n", iface->priority);
+ printf("\t\ttransmit-delay %d\n", iface->transmit_delay);
+
+ printf("\t}\n");
+}
+
+void
+print_config(struct ospfd_conf *conf)
+{
+ struct area *area;
+ struct iface *iface;
+
+ printf("\n");
+ print_mainconf(conf);
+ printf("\n");
+
+ LIST_FOREACH(area, &conf->area_list, entry) {
+ printf("area %s {\n", inet_ntoa(area->id));
+ if (*area->demote_group)
+ printf("\tdemote %s %d\n", area->demote_group,
+ area->demote_level);
+ LIST_FOREACH(iface, &area->iface_list, entry) {
+ print_iface(iface);
+ }
+ printf("}\n\n");
+ }
+}