1*5fa7d4c4Sdenis /* $OpenBSD: printconf.c,v 1.8 2019/05/12 11:27:08 denis Exp $ */
2ddeeec14Snorby
3ddeeec14Snorby /*
4ddeeec14Snorby * Copyright (c) 2004, 2005, 2006 Esben Norby <norby@openbsd.org>
5ddeeec14Snorby *
6ddeeec14Snorby * Permission to use, copy, modify, and distribute this software for any
7ddeeec14Snorby * purpose with or without fee is hereby granted, provided that the above
8ddeeec14Snorby * copyright notice and this permission notice appear in all copies.
9ddeeec14Snorby *
10ddeeec14Snorby * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11ddeeec14Snorby * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12ddeeec14Snorby * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13ddeeec14Snorby * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14ddeeec14Snorby * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15ddeeec14Snorby * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16ddeeec14Snorby * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17ddeeec14Snorby */
18ddeeec14Snorby
19ddeeec14Snorby #include <sys/queue.h>
20ddeeec14Snorby #include <sys/types.h>
21ddeeec14Snorby #include <sys/socket.h>
22ddeeec14Snorby #include <netinet/in.h>
23ddeeec14Snorby #include <arpa/inet.h>
24ddeeec14Snorby
25ddeeec14Snorby #include <stdio.h>
26ddeeec14Snorby
27ddeeec14Snorby #include "rip.h"
28ddeeec14Snorby #include "ripd.h"
29ddeeec14Snorby #include "ripe.h"
30ddeeec14Snorby
31ddeeec14Snorby void print_mainconf(struct ripd_conf *);
329bb9ec63Sclaudio const char *print_no(u_int16_t);
339bb9ec63Sclaudio void print_redistribute(struct ripd_conf *);
34ddeeec14Snorby void print_iface(struct iface *);
35ddeeec14Snorby
36ddeeec14Snorby void
print_mainconf(struct ripd_conf * conf)37ddeeec14Snorby print_mainconf(struct ripd_conf *conf)
38ddeeec14Snorby {
39dc9768e9Sjoel if (conf->flags & RIPD_FLAG_NO_FIB_UPDATE)
40ddeeec14Snorby printf("fib-update no\n");
41dc9768e9Sjoel else
42dc9768e9Sjoel printf("fib-update yes\n");
43ddeeec14Snorby
441acb5c27Sremi printf("fib-priority %hhu\n", conf->fib_priority);
451acb5c27Sremi
469bb9ec63Sclaudio print_redistribute(conf);
47ddeeec14Snorby
48ddeeec14Snorby if (conf->options & OPT_SPLIT_HORIZON)
4946802160Smichele printf("split-horizon simple\n");
50ddeeec14Snorby else if (conf->options & OPT_SPLIT_POISONED)
51ddeeec14Snorby printf("split-horizon poisoned\n");
52ddeeec14Snorby else
53ddeeec14Snorby printf("split-horizon none\n");
54ddeeec14Snorby
55ddeeec14Snorby if (conf->options & OPT_TRIGGERED_UPDATES)
56ddeeec14Snorby printf("triggered-updates yes\n");
57ddeeec14Snorby else
58ddeeec14Snorby printf("triggered-updates no\n");
59ddeeec14Snorby }
60ddeeec14Snorby
619bb9ec63Sclaudio const char *
print_no(u_int16_t type)629bb9ec63Sclaudio print_no(u_int16_t type)
639bb9ec63Sclaudio {
649bb9ec63Sclaudio if (type & REDIST_NO)
659bb9ec63Sclaudio return ("no ");
669bb9ec63Sclaudio else
679bb9ec63Sclaudio return ("");
689bb9ec63Sclaudio }
699bb9ec63Sclaudio
709bb9ec63Sclaudio void
print_redistribute(struct ripd_conf * conf)719bb9ec63Sclaudio print_redistribute(struct ripd_conf *conf)
729bb9ec63Sclaudio {
739bb9ec63Sclaudio struct redistribute *r;
749bb9ec63Sclaudio
759bb9ec63Sclaudio SIMPLEQ_FOREACH(r, &conf->redist_list, entry) {
769bb9ec63Sclaudio switch (r->type & ~REDIST_NO) {
779bb9ec63Sclaudio case REDIST_STATIC:
789bb9ec63Sclaudio printf("%sredistribute static\n", print_no(r->type));
799bb9ec63Sclaudio break;
809bb9ec63Sclaudio case REDIST_CONNECTED:
819bb9ec63Sclaudio printf("%sredistribute connected\n", print_no(r->type));
829bb9ec63Sclaudio break;
839bb9ec63Sclaudio case REDIST_LABEL:
849bb9ec63Sclaudio printf("%sredistribute rtlabel %s\n",
859bb9ec63Sclaudio print_no(r->type), rtlabel_id2name(r->label));
869bb9ec63Sclaudio break;
8739c227bcSmichele case REDIST_DEFAULT:
8839c227bcSmichele printf("redistribute default\n");
8939c227bcSmichele break;
909bb9ec63Sclaudio case REDIST_ADDR:
91*5fa7d4c4Sdenis printf("%sredistribute %s/%d\n",
929bb9ec63Sclaudio print_no(r->type), inet_ntoa(r->addr),
939bb9ec63Sclaudio mask2prefixlen(r->mask.s_addr));
949bb9ec63Sclaudio break;
959bb9ec63Sclaudio }
969bb9ec63Sclaudio }
979bb9ec63Sclaudio }
989bb9ec63Sclaudio
99ddeeec14Snorby void
print_iface(struct iface * iface)100ddeeec14Snorby print_iface(struct iface *iface)
101ddeeec14Snorby {
1029adbf03bSclaudio struct auth_md *m;
1039adbf03bSclaudio
104ddeeec14Snorby printf("interface %s {\n", iface->name);
105ddeeec14Snorby
106ddeeec14Snorby if (iface->passive)
107ddeeec14Snorby printf("\tpassive\n");
108ddeeec14Snorby
109ddeeec14Snorby printf("\tcost %d\n", iface->cost);
110ddeeec14Snorby
111ddeeec14Snorby printf("\tauth-type %s\n", if_auth_name(iface->auth_type));
112ddeeec14Snorby switch (iface->auth_type) {
113ddeeec14Snorby case AUTH_NONE:
114ddeeec14Snorby break;
115ddeeec14Snorby case AUTH_SIMPLE:
116ddeeec14Snorby printf("\tauth-key XXXXXX\n");
117ddeeec14Snorby break;
118ddeeec14Snorby case AUTH_CRYPT:
1199adbf03bSclaudio printf("\tauth-md-keyid %d\n", iface->auth_keyid);
1209adbf03bSclaudio TAILQ_FOREACH(m, &iface->auth_md_list, entry)
1219adbf03bSclaudio printf("\tauth-md %d XXXXXX\n", m->keyid);
122ddeeec14Snorby break;
123ddeeec14Snorby default:
124ddeeec14Snorby printf("\tunknown auth type!\n");
125ddeeec14Snorby break;
126ddeeec14Snorby }
127ddeeec14Snorby
1289adbf03bSclaudio printf("}\n\n");
129ddeeec14Snorby }
130ddeeec14Snorby
131ddeeec14Snorby void
print_config(struct ripd_conf * conf)132ddeeec14Snorby print_config(struct ripd_conf *conf)
133ddeeec14Snorby {
134ddeeec14Snorby struct iface *iface;
135ddeeec14Snorby
136ddeeec14Snorby print_mainconf(conf);
137ddeeec14Snorby printf("\n");
138ddeeec14Snorby
139ddeeec14Snorby LIST_FOREACH(iface, &conf->iface_list, entry) {
140ddeeec14Snorby print_iface(iface);
141ddeeec14Snorby }
142ddeeec14Snorby }
143