1: /*
2: PIM for Quagga
3: Copyright (C) 2008 Everton da Silva Marques
4:
5: This program is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License as published by
7: the Free Software Foundation; either version 2 of the License, or
8: (at your option) any later version.
9:
10: This program is distributed in the hope that it will be useful, but
11: WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: General Public License for more details.
14:
15: You should have received a copy of the GNU General Public License
16: along with this program; see the file COPYING; if not, write to the
17: Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
18: MA 02110-1301 USA
19:
20: $QuaggaId: $Format:%an, %ai, %h$ $
21: */
22:
23: #include <zebra.h>
24:
25: #include "if.h"
26: #include "linklist.h"
27:
28: #include "pimd.h"
29: #include "pim_vty.h"
30: #include "pim_iface.h"
31: #include "pim_cmd.h"
32: #include "pim_str.h"
33: #include "pim_ssmpingd.h"
34: #include "pim_pim.h"
35:
36: int pim_debug_config_write(struct vty *vty)
37: {
38: int writes = 0;
39:
40: if (PIM_DEBUG_IGMP_EVENTS) {
41: vty_out(vty, "debug igmp events%s", VTY_NEWLINE);
42: ++writes;
43: }
44: if (PIM_DEBUG_IGMP_PACKETS) {
45: vty_out(vty, "debug igmp packets%s", VTY_NEWLINE);
46: ++writes;
47: }
48: if (PIM_DEBUG_IGMP_TRACE) {
49: vty_out(vty, "debug igmp trace%s", VTY_NEWLINE);
50: ++writes;
51: }
52:
53: if (PIM_DEBUG_MROUTE) {
54: vty_out(vty, "debug mroute%s", VTY_NEWLINE);
55: ++writes;
56: }
57:
58: if (PIM_DEBUG_PIM_EVENTS) {
59: vty_out(vty, "debug pim events%s", VTY_NEWLINE);
60: ++writes;
61: }
62: if (PIM_DEBUG_PIM_PACKETS) {
63: vty_out(vty, "debug pim packets%s", VTY_NEWLINE);
64: ++writes;
65: }
66: if (PIM_DEBUG_PIM_PACKETDUMP_SEND) {
67: vty_out(vty, "debug pim packet-dump send%s", VTY_NEWLINE);
68: ++writes;
69: }
70: if (PIM_DEBUG_PIM_PACKETDUMP_RECV) {
71: vty_out(vty, "debug pim packet-dump receive%s", VTY_NEWLINE);
72: ++writes;
73: }
74: if (PIM_DEBUG_PIM_TRACE) {
75: vty_out(vty, "debug pim trace%s", VTY_NEWLINE);
76: ++writes;
77: }
78:
79: if (PIM_DEBUG_ZEBRA) {
80: vty_out(vty, "debug pim zebra%s", VTY_NEWLINE);
81: ++writes;
82: }
83:
84: if (PIM_DEBUG_SSMPINGD) {
85: vty_out(vty, "debug ssmpingd%s", VTY_NEWLINE);
86: ++writes;
87: }
88:
89: return writes;
90: }
91:
92: int pim_global_config_write(struct vty *vty)
93: {
94: int writes = 0;
95:
96: if (PIM_MROUTE_IS_ENABLED) {
97: vty_out(vty, "%s%s", PIM_CMD_IP_MULTICAST_ROUTING, VTY_NEWLINE);
98: ++writes;
99: }
100:
101: if (qpim_ssmpingd_list) {
102: struct listnode *node;
103: struct ssmpingd_sock *ss;
104: vty_out(vty, "!%s", VTY_NEWLINE);
105: ++writes;
106: for (ALL_LIST_ELEMENTS_RO(qpim_ssmpingd_list, node, ss)) {
107: char source_str[100];
108: pim_inet4_dump("<src?>", ss->source_addr, source_str, sizeof(source_str));
109: vty_out(vty, "ip ssmpingd %s%s", source_str, VTY_NEWLINE);
110: ++writes;
111: }
112: }
113:
114: return writes;
115: }
116:
117: int pim_interface_config_write(struct vty *vty)
118: {
119: int writes = 0;
120: struct listnode *node;
121: struct interface *ifp;
122:
123: for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp)) {
124:
125: /* IF name */
126: vty_out(vty, "interface %s%s", ifp->name, VTY_NEWLINE);
127: ++writes;
128:
129: if (ifp->info) {
130: struct pim_interface *pim_ifp = ifp->info;
131:
132: /* IF ip pim ssm */
133: if (PIM_IF_TEST_PIM(pim_ifp->options)) {
134: vty_out(vty, " ip pim ssm%s", VTY_NEWLINE);
135: ++writes;
136: }
137:
138: /* IF ip pim drpriority */
139: if (pim_ifp->pim_dr_priority != PIM_DEFAULT_DR_PRIORITY) {
140: vty_out(vty, " ip pim drpriority %d%s", pim_ifp->pim_dr_priority,
141: VTY_NEWLINE);
142: ++writes;
143: }
144:
145: /* IF ip pim hello */
146: if (pim_ifp->pim_hello_period != PIM_DEFAULT_HELLO_PERIOD) {
147: vty_out(vty, " ip pim hello %d", pim_ifp->pim_hello_period);
148: if (pim_ifp->pim_default_holdtime != -1)
149: vty_out(vty, " %d", pim_ifp->pim_default_holdtime);
150: vty_out(vty, "%s", VTY_NEWLINE);
151: }
152:
153: /* IF ip igmp */
154: if (PIM_IF_TEST_IGMP(pim_ifp->options)) {
155: vty_out(vty, " ip igmp%s", VTY_NEWLINE);
156: ++writes;
157: }
158:
159: /* IF ip igmp query-interval */
160: if (pim_ifp->igmp_default_query_interval != IGMP_GENERAL_QUERY_INTERVAL)
161: {
162: vty_out(vty, " %s %d%s",
163: PIM_CMD_IP_IGMP_QUERY_INTERVAL,
164: pim_ifp->igmp_default_query_interval,
165: VTY_NEWLINE);
166: ++writes;
167: }
168:
169: /* IF ip igmp query-max-response-time */
170: if (pim_ifp->igmp_query_max_response_time_dsec != IGMP_QUERY_MAX_RESPONSE_TIME_DSEC)
171: {
172: vty_out(vty, " %s %d%s",
173: PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC,
174: pim_ifp->igmp_query_max_response_time_dsec,
175: VTY_NEWLINE);
176: ++writes;
177: }
178:
179: /* IF ip igmp join */
180: if (pim_ifp->igmp_join_list) {
181: struct listnode *node;
182: struct igmp_join *ij;
183: for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_join_list, node, ij)) {
184: char group_str[100];
185: char source_str[100];
186: pim_inet4_dump("<grp?>", ij->group_addr, group_str, sizeof(group_str));
187: pim_inet4_dump("<src?>", ij->source_addr, source_str, sizeof(source_str));
188: vty_out(vty, " ip igmp join %s %s%s",
189: group_str, source_str,
190: VTY_NEWLINE);
191: ++writes;
192: }
193: }
194: }
195: vty_out(vty, "!%s", VTY_NEWLINE);
196: ++writes;
197: }
198:
199: return writes;
200: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>