Annotation of embedaddon/quagga/bgpd/bgp_debug.c, revision 1.1
1.1 ! misho 1: /* BGP-4, BGP-4+ packet debug routine
! 2: Copyright (C) 1996, 97, 99 Kunihiro Ishiguro
! 3:
! 4: This file is part of GNU Zebra.
! 5:
! 6: GNU Zebra is free software; you can redistribute it and/or modify it
! 7: under the terms of the GNU General Public License as published by the
! 8: Free Software Foundation; either version 2, or (at your option) any
! 9: later version.
! 10:
! 11: GNU Zebra is distributed in the hope that it will be useful, but
! 12: WITHOUT ANY WARRANTY; without even the implied warranty of
! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 14: General Public License for more details.
! 15:
! 16: You should have received a copy of the GNU General Public License
! 17: along with GNU Zebra; see the file COPYING. If not, write to the Free
! 18: Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 19: 02111-1307, USA. */
! 20:
! 21: #include <zebra.h>
! 22:
! 23: #include <lib/version.h>
! 24: #include "prefix.h"
! 25: #include "linklist.h"
! 26: #include "stream.h"
! 27: #include "command.h"
! 28: #include "str.h"
! 29: #include "log.h"
! 30: #include "sockunion.h"
! 31:
! 32: #include "bgpd/bgpd.h"
! 33: #include "bgpd/bgp_aspath.h"
! 34: #include "bgpd/bgp_route.h"
! 35: #include "bgpd/bgp_attr.h"
! 36: #include "bgpd/bgp_debug.h"
! 37: #include "bgpd/bgp_community.h"
! 38:
! 39: unsigned long conf_bgp_debug_as4;
! 40: unsigned long conf_bgp_debug_fsm;
! 41: unsigned long conf_bgp_debug_events;
! 42: unsigned long conf_bgp_debug_packet;
! 43: unsigned long conf_bgp_debug_filter;
! 44: unsigned long conf_bgp_debug_keepalive;
! 45: unsigned long conf_bgp_debug_update;
! 46: unsigned long conf_bgp_debug_normal;
! 47: unsigned long conf_bgp_debug_zebra;
! 48:
! 49: unsigned long term_bgp_debug_as4;
! 50: unsigned long term_bgp_debug_fsm;
! 51: unsigned long term_bgp_debug_events;
! 52: unsigned long term_bgp_debug_packet;
! 53: unsigned long term_bgp_debug_filter;
! 54: unsigned long term_bgp_debug_keepalive;
! 55: unsigned long term_bgp_debug_update;
! 56: unsigned long term_bgp_debug_normal;
! 57: unsigned long term_bgp_debug_zebra;
! 58:
! 59: /* messages for BGP-4 status */
! 60: const struct message bgp_status_msg[] =
! 61: {
! 62: { Idle, "Idle" },
! 63: { Connect, "Connect" },
! 64: { Active, "Active" },
! 65: { OpenSent, "OpenSent" },
! 66: { OpenConfirm, "OpenConfirm" },
! 67: { Established, "Established" },
! 68: { Clearing, "Clearing" },
! 69: { Deleted, "Deleted" },
! 70: };
! 71: const int bgp_status_msg_max = BGP_STATUS_MAX;
! 72:
! 73: /* BGP message type string. */
! 74: const char *bgp_type_str[] =
! 75: {
! 76: NULL,
! 77: "OPEN",
! 78: "UPDATE",
! 79: "NOTIFICATION",
! 80: "KEEPALIVE",
! 81: "ROUTE-REFRESH",
! 82: "CAPABILITY"
! 83: };
! 84:
! 85: /* message for BGP-4 Notify */
! 86: static const struct message bgp_notify_msg[] =
! 87: {
! 88: { BGP_NOTIFY_HEADER_ERR, "Message Header Error"},
! 89: { BGP_NOTIFY_OPEN_ERR, "OPEN Message Error"},
! 90: { BGP_NOTIFY_UPDATE_ERR, "UPDATE Message Error"},
! 91: { BGP_NOTIFY_HOLD_ERR, "Hold Timer Expired"},
! 92: { BGP_NOTIFY_FSM_ERR, "Finite State Machine Error"},
! 93: { BGP_NOTIFY_CEASE, "Cease"},
! 94: { BGP_NOTIFY_CAPABILITY_ERR, "CAPABILITY Message Error"},
! 95: };
! 96: static const int bgp_notify_msg_max = BGP_NOTIFY_MAX;
! 97:
! 98: static const struct message bgp_notify_head_msg[] =
! 99: {
! 100: { BGP_NOTIFY_HEADER_NOT_SYNC, "/Connection Not Synchronized"},
! 101: { BGP_NOTIFY_HEADER_BAD_MESLEN, "/Bad Message Length"},
! 102: { BGP_NOTIFY_HEADER_BAD_MESTYPE, "/Bad Message Type"}
! 103: };
! 104: static const int bgp_notify_head_msg_max = BGP_NOTIFY_HEADER_MAX;
! 105:
! 106: static const struct message bgp_notify_open_msg[] =
! 107: {
! 108: { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"},
! 109: { BGP_NOTIFY_OPEN_UNSUP_VERSION, "/Unsupported Version Number" },
! 110: { BGP_NOTIFY_OPEN_BAD_PEER_AS, "/Bad Peer AS"},
! 111: { BGP_NOTIFY_OPEN_BAD_BGP_IDENT, "/Bad BGP Identifier"},
! 112: { BGP_NOTIFY_OPEN_UNSUP_PARAM, "/Unsupported Optional Parameter"},
! 113: { BGP_NOTIFY_OPEN_AUTH_FAILURE, "/Authentication Failure"},
! 114: { BGP_NOTIFY_OPEN_UNACEP_HOLDTIME, "/Unacceptable Hold Time"},
! 115: { BGP_NOTIFY_OPEN_UNSUP_CAPBL, "/Unsupported Capability"},
! 116: };
! 117: static const int bgp_notify_open_msg_max = BGP_NOTIFY_OPEN_MAX;
! 118:
! 119: static const struct message bgp_notify_update_msg[] =
! 120: {
! 121: { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"},
! 122: { BGP_NOTIFY_UPDATE_MAL_ATTR, "/Malformed Attribute List"},
! 123: { BGP_NOTIFY_UPDATE_UNREC_ATTR, "/Unrecognized Well-known Attribute"},
! 124: { BGP_NOTIFY_UPDATE_MISS_ATTR, "/Missing Well-known Attribute"},
! 125: { BGP_NOTIFY_UPDATE_ATTR_FLAG_ERR, "/Attribute Flags Error"},
! 126: { BGP_NOTIFY_UPDATE_ATTR_LENG_ERR, "/Attribute Length Error"},
! 127: { BGP_NOTIFY_UPDATE_INVAL_ORIGIN, "/Invalid ORIGIN Attribute"},
! 128: { BGP_NOTIFY_UPDATE_AS_ROUTE_LOOP, "/AS Routing Loop"},
! 129: { BGP_NOTIFY_UPDATE_INVAL_NEXT_HOP, "/Invalid NEXT_HOP Attribute"},
! 130: { BGP_NOTIFY_UPDATE_OPT_ATTR_ERR, "/Optional Attribute Error"},
! 131: { BGP_NOTIFY_UPDATE_INVAL_NETWORK, "/Invalid Network Field"},
! 132: { BGP_NOTIFY_UPDATE_MAL_AS_PATH, "/Malformed AS_PATH"},
! 133: };
! 134: static const int bgp_notify_update_msg_max = BGP_NOTIFY_UPDATE_MAX;
! 135:
! 136: static const struct message bgp_notify_cease_msg[] =
! 137: {
! 138: { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"},
! 139: { BGP_NOTIFY_CEASE_MAX_PREFIX, "/Maximum Number of Prefixes Reached"},
! 140: { BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN, "/Administratively Shutdown"},
! 141: { BGP_NOTIFY_CEASE_PEER_UNCONFIG, "/Peer Unconfigured"},
! 142: { BGP_NOTIFY_CEASE_ADMIN_RESET, "/Administratively Reset"},
! 143: { BGP_NOTIFY_CEASE_CONNECT_REJECT, "/Connection Rejected"},
! 144: { BGP_NOTIFY_CEASE_CONFIG_CHANGE, "/Other Configuration Change"},
! 145: { BGP_NOTIFY_CEASE_COLLISION_RESOLUTION, "/Connection collision resolution"},
! 146: { BGP_NOTIFY_CEASE_OUT_OF_RESOURCE, "/Out of Resource"},
! 147: };
! 148: static const int bgp_notify_cease_msg_max = BGP_NOTIFY_CEASE_MAX;
! 149:
! 150: static const struct message bgp_notify_capability_msg[] =
! 151: {
! 152: { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"},
! 153: { BGP_NOTIFY_CAPABILITY_INVALID_ACTION, "/Invalid Action Value" },
! 154: { BGP_NOTIFY_CAPABILITY_INVALID_LENGTH, "/Invalid Capability Length"},
! 155: { BGP_NOTIFY_CAPABILITY_MALFORMED_CODE, "/Malformed Capability Value"},
! 156: };
! 157: static const int bgp_notify_capability_msg_max = BGP_NOTIFY_CAPABILITY_MAX;
! 158:
! 159: /* Origin strings. */
! 160: const char *bgp_origin_str[] = {"i","e","?"};
! 161: const char *bgp_origin_long_str[] = {"IGP","EGP","incomplete"};
! 162:
! 163: /* Dump attribute. */
! 164: int
! 165: bgp_dump_attr (struct peer *peer, struct attr *attr, char *buf, size_t size)
! 166: {
! 167: if (! attr)
! 168: return 0;
! 169:
! 170: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP)))
! 171: snprintf (buf, size, "nexthop %s", inet_ntoa (attr->nexthop));
! 172:
! 173: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_ORIGIN)))
! 174: snprintf (buf + strlen (buf), size - strlen (buf), ", origin %s",
! 175: bgp_origin_str[attr->origin]);
! 176:
! 177: #ifdef HAVE_IPV6
! 178: if (attr->extra)
! 179: {
! 180: char addrbuf[BUFSIZ];
! 181:
! 182: /* Add MP case. */
! 183: if (attr->extra->mp_nexthop_len == 16
! 184: || attr->extra->mp_nexthop_len == 32)
! 185: snprintf (buf + strlen (buf), size - strlen (buf), ", mp_nexthop %s",
! 186: inet_ntop (AF_INET6, &attr->extra->mp_nexthop_global,
! 187: addrbuf, BUFSIZ));
! 188:
! 189: if (attr->extra->mp_nexthop_len == 32)
! 190: snprintf (buf + strlen (buf), size - strlen (buf), "(%s)",
! 191: inet_ntop (AF_INET6, &attr->extra->mp_nexthop_local,
! 192: addrbuf, BUFSIZ));
! 193: }
! 194: #endif /* HAVE_IPV6 */
! 195:
! 196: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_LOCAL_PREF)))
! 197: snprintf (buf + strlen (buf), size - strlen (buf), ", localpref %d",
! 198: attr->local_pref);
! 199:
! 200: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_MULTI_EXIT_DISC)))
! 201: snprintf (buf + strlen (buf), size - strlen (buf), ", metric %d",
! 202: attr->med);
! 203:
! 204: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_COMMUNITIES)))
! 205: snprintf (buf + strlen (buf), size - strlen (buf), ", community %s",
! 206: community_str (attr->community));
! 207:
! 208: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_ATOMIC_AGGREGATE)))
! 209: snprintf (buf + strlen (buf), size - strlen (buf), ", atomic-aggregate");
! 210:
! 211: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_AGGREGATOR)))
! 212: snprintf (buf + strlen (buf), size - strlen (buf), ", aggregated by %u %s",
! 213: attr->extra->aggregator_as,
! 214: inet_ntoa (attr->extra->aggregator_addr));
! 215:
! 216: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_ORIGINATOR_ID)))
! 217: snprintf (buf + strlen (buf), size - strlen (buf), ", originator %s",
! 218: inet_ntoa (attr->extra->originator_id));
! 219:
! 220: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_CLUSTER_LIST)))
! 221: {
! 222: int i;
! 223:
! 224: snprintf (buf + strlen (buf), size - strlen (buf), ", clusterlist");
! 225: for (i = 0; i < attr->extra->cluster->length / 4; i++)
! 226: snprintf (buf + strlen (buf), size - strlen (buf), " %s",
! 227: inet_ntoa (attr->extra->cluster->list[i]));
! 228: }
! 229:
! 230: if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_AS_PATH)))
! 231: snprintf (buf + strlen (buf), size - strlen (buf), ", path %s",
! 232: aspath_print (attr->aspath));
! 233:
! 234: if (strlen (buf) > 1)
! 235: return 1;
! 236: else
! 237: return 0;
! 238: }
! 239:
! 240: /* dump notify packet */
! 241: void
! 242: bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify,
! 243: const char *direct)
! 244: {
! 245: const char *subcode_str;
! 246:
! 247: subcode_str = "";
! 248:
! 249: switch (bgp_notify->code)
! 250: {
! 251: case BGP_NOTIFY_HEADER_ERR:
! 252: subcode_str = LOOKUP (bgp_notify_head_msg, bgp_notify->subcode);
! 253: break;
! 254: case BGP_NOTIFY_OPEN_ERR:
! 255: subcode_str = LOOKUP (bgp_notify_open_msg, bgp_notify->subcode);
! 256: break;
! 257: case BGP_NOTIFY_UPDATE_ERR:
! 258: subcode_str = LOOKUP (bgp_notify_update_msg, bgp_notify->subcode);
! 259: break;
! 260: case BGP_NOTIFY_HOLD_ERR:
! 261: subcode_str = "";
! 262: break;
! 263: case BGP_NOTIFY_FSM_ERR:
! 264: subcode_str = "";
! 265: break;
! 266: case BGP_NOTIFY_CEASE:
! 267: subcode_str = LOOKUP (bgp_notify_cease_msg, bgp_notify->subcode);
! 268: break;
! 269: case BGP_NOTIFY_CAPABILITY_ERR:
! 270: subcode_str = LOOKUP (bgp_notify_capability_msg, bgp_notify->subcode);
! 271: break;
! 272: }
! 273:
! 274: if (bgp_flag_check (peer->bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES))
! 275: zlog_info ("%%NOTIFICATION: %s neighbor %s %d/%d (%s%s) %d bytes %s",
! 276: strcmp (direct, "received") == 0 ? "received from" : "sent to",
! 277: peer->host, bgp_notify->code, bgp_notify->subcode,
! 278: LOOKUP (bgp_notify_msg, bgp_notify->code),
! 279: subcode_str, bgp_notify->length,
! 280: bgp_notify->data ? bgp_notify->data : "");
! 281: else if (BGP_DEBUG (normal, NORMAL))
! 282: plog_debug (peer->log, "%s %s NOTIFICATION %d/%d (%s%s) %d bytes %s",
! 283: peer ? peer->host : "",
! 284: direct, bgp_notify->code, bgp_notify->subcode,
! 285: LOOKUP (bgp_notify_msg, bgp_notify->code),
! 286: subcode_str, bgp_notify->length,
! 287: bgp_notify->data ? bgp_notify->data : "");
! 288: }
! 289:
! 290: /* Debug option setting interface. */
! 291: unsigned long bgp_debug_option = 0;
! 292:
! 293: int
! 294: debug (unsigned int option)
! 295: {
! 296: return bgp_debug_option & option;
! 297: }
! 298:
! 299: DEFUN (debug_bgp_as4,
! 300: debug_bgp_as4_cmd,
! 301: "debug bgp as4",
! 302: DEBUG_STR
! 303: BGP_STR
! 304: "BGP AS4 actions\n")
! 305: {
! 306: if (vty->node == CONFIG_NODE)
! 307: DEBUG_ON (as4, AS4);
! 308: else
! 309: {
! 310: TERM_DEBUG_ON (as4, AS4);
! 311: vty_out (vty, "BGP as4 debugging is on%s", VTY_NEWLINE);
! 312: }
! 313: return CMD_SUCCESS;
! 314: }
! 315:
! 316: DEFUN (no_debug_bgp_as4,
! 317: no_debug_bgp_as4_cmd,
! 318: "no debug bgp as4",
! 319: NO_STR
! 320: DEBUG_STR
! 321: BGP_STR
! 322: "BGP AS4 actions\n")
! 323: {
! 324: if (vty->node == CONFIG_NODE)
! 325: DEBUG_OFF (as4, AS4);
! 326: else
! 327: {
! 328: TERM_DEBUG_OFF (as4, AS4);
! 329: vty_out (vty, "BGP as4 debugging is off%s", VTY_NEWLINE);
! 330: }
! 331: return CMD_SUCCESS;
! 332: }
! 333:
! 334: ALIAS (no_debug_bgp_as4,
! 335: undebug_bgp_as4_cmd,
! 336: "undebug bgp as4",
! 337: UNDEBUG_STR
! 338: BGP_STR
! 339: "BGP AS4 actions\n")
! 340:
! 341: DEFUN (debug_bgp_as4_segment,
! 342: debug_bgp_as4_segment_cmd,
! 343: "debug bgp as4 segment",
! 344: DEBUG_STR
! 345: BGP_STR
! 346: "BGP AS4 actions\n"
! 347: "BGP AS4 aspath segment handling\n")
! 348: {
! 349: if (vty->node == CONFIG_NODE)
! 350: DEBUG_ON (as4, AS4_SEGMENT);
! 351: else
! 352: {
! 353: TERM_DEBUG_ON (as4, AS4_SEGMENT);
! 354: vty_out (vty, "BGP as4 segment debugging is on%s", VTY_NEWLINE);
! 355: }
! 356: return CMD_SUCCESS;
! 357: }
! 358:
! 359: DEFUN (no_debug_bgp_as4_segment,
! 360: no_debug_bgp_as4_segment_cmd,
! 361: "no debug bgp as4 segment",
! 362: NO_STR
! 363: DEBUG_STR
! 364: BGP_STR
! 365: "BGP AS4 actions\n"
! 366: "BGP AS4 aspath segment handling\n")
! 367: {
! 368: if (vty->node == CONFIG_NODE)
! 369: DEBUG_OFF (as4, AS4_SEGMENT);
! 370: else
! 371: {
! 372: TERM_DEBUG_OFF (as4, AS4_SEGMENT);
! 373: vty_out (vty, "BGP as4 segment debugging is off%s", VTY_NEWLINE);
! 374: }
! 375: return CMD_SUCCESS;
! 376: }
! 377:
! 378: ALIAS (no_debug_bgp_as4_segment,
! 379: undebug_bgp_as4_segment_cmd,
! 380: "undebug bgp as4 segment",
! 381: UNDEBUG_STR
! 382: BGP_STR
! 383: "BGP AS4 actions\n"
! 384: "BGP AS4 aspath segment handling\n")
! 385:
! 386: DEFUN (debug_bgp_fsm,
! 387: debug_bgp_fsm_cmd,
! 388: "debug bgp fsm",
! 389: DEBUG_STR
! 390: BGP_STR
! 391: "BGP Finite State Machine\n")
! 392: {
! 393: if (vty->node == CONFIG_NODE)
! 394: DEBUG_ON (fsm, FSM);
! 395: else
! 396: {
! 397: TERM_DEBUG_ON (fsm, FSM);
! 398: vty_out (vty, "BGP fsm debugging is on%s", VTY_NEWLINE);
! 399: }
! 400: return CMD_SUCCESS;
! 401: }
! 402:
! 403: DEFUN (no_debug_bgp_fsm,
! 404: no_debug_bgp_fsm_cmd,
! 405: "no debug bgp fsm",
! 406: NO_STR
! 407: DEBUG_STR
! 408: BGP_STR
! 409: "Finite State Machine\n")
! 410: {
! 411: if (vty->node == CONFIG_NODE)
! 412: DEBUG_OFF (fsm, FSM);
! 413: else
! 414: {
! 415: TERM_DEBUG_OFF (fsm, FSM);
! 416: vty_out (vty, "BGP fsm debugging is off%s", VTY_NEWLINE);
! 417: }
! 418: return CMD_SUCCESS;
! 419: }
! 420:
! 421: ALIAS (no_debug_bgp_fsm,
! 422: undebug_bgp_fsm_cmd,
! 423: "undebug bgp fsm",
! 424: UNDEBUG_STR
! 425: BGP_STR
! 426: "Finite State Machine\n")
! 427:
! 428: DEFUN (debug_bgp_events,
! 429: debug_bgp_events_cmd,
! 430: "debug bgp events",
! 431: DEBUG_STR
! 432: BGP_STR
! 433: "BGP events\n")
! 434: {
! 435: if (vty->node == CONFIG_NODE)
! 436: DEBUG_ON (events, EVENTS);
! 437: else
! 438: {
! 439: TERM_DEBUG_ON (events, EVENTS);
! 440: vty_out (vty, "BGP events debugging is on%s", VTY_NEWLINE);
! 441: }
! 442: return CMD_SUCCESS;
! 443: }
! 444:
! 445: DEFUN (no_debug_bgp_events,
! 446: no_debug_bgp_events_cmd,
! 447: "no debug bgp events",
! 448: NO_STR
! 449: DEBUG_STR
! 450: BGP_STR
! 451: "BGP events\n")
! 452: {
! 453: if (vty->node == CONFIG_NODE)
! 454: DEBUG_OFF (events, EVENTS);
! 455: else
! 456: {
! 457: TERM_DEBUG_OFF (events, EVENTS);
! 458: vty_out (vty, "BGP events debugging is off%s", VTY_NEWLINE);
! 459: }
! 460: return CMD_SUCCESS;
! 461: }
! 462:
! 463: ALIAS (no_debug_bgp_events,
! 464: undebug_bgp_events_cmd,
! 465: "undebug bgp events",
! 466: UNDEBUG_STR
! 467: BGP_STR
! 468: "BGP events\n")
! 469:
! 470: DEFUN (debug_bgp_filter,
! 471: debug_bgp_filter_cmd,
! 472: "debug bgp filters",
! 473: DEBUG_STR
! 474: BGP_STR
! 475: "BGP filters\n")
! 476: {
! 477: if (vty->node == CONFIG_NODE)
! 478: DEBUG_ON (filter, FILTER);
! 479: else
! 480: {
! 481: TERM_DEBUG_ON (filter, FILTER);
! 482: vty_out (vty, "BGP filters debugging is on%s", VTY_NEWLINE);
! 483: }
! 484: return CMD_SUCCESS;
! 485: }
! 486:
! 487: DEFUN (no_debug_bgp_filter,
! 488: no_debug_bgp_filter_cmd,
! 489: "no debug bgp filters",
! 490: NO_STR
! 491: DEBUG_STR
! 492: BGP_STR
! 493: "BGP filters\n")
! 494: {
! 495: if (vty->node == CONFIG_NODE)
! 496: DEBUG_OFF (filter, FILTER);
! 497: else
! 498: {
! 499: TERM_DEBUG_OFF (filter, FILTER);
! 500: vty_out (vty, "BGP filters debugging is off%s", VTY_NEWLINE);
! 501: }
! 502: return CMD_SUCCESS;
! 503: }
! 504:
! 505: ALIAS (no_debug_bgp_filter,
! 506: undebug_bgp_filter_cmd,
! 507: "undebug bgp filters",
! 508: UNDEBUG_STR
! 509: BGP_STR
! 510: "BGP filters\n")
! 511:
! 512: DEFUN (debug_bgp_keepalive,
! 513: debug_bgp_keepalive_cmd,
! 514: "debug bgp keepalives",
! 515: DEBUG_STR
! 516: BGP_STR
! 517: "BGP keepalives\n")
! 518: {
! 519: if (vty->node == CONFIG_NODE)
! 520: DEBUG_ON (keepalive, KEEPALIVE);
! 521: else
! 522: {
! 523: TERM_DEBUG_ON (keepalive, KEEPALIVE);
! 524: vty_out (vty, "BGP keepalives debugging is on%s", VTY_NEWLINE);
! 525: }
! 526: return CMD_SUCCESS;
! 527: }
! 528:
! 529: DEFUN (no_debug_bgp_keepalive,
! 530: no_debug_bgp_keepalive_cmd,
! 531: "no debug bgp keepalives",
! 532: NO_STR
! 533: DEBUG_STR
! 534: BGP_STR
! 535: "BGP keepalives\n")
! 536: {
! 537: if (vty->node == CONFIG_NODE)
! 538: DEBUG_OFF (keepalive, KEEPALIVE);
! 539: else
! 540: {
! 541: TERM_DEBUG_OFF (keepalive, KEEPALIVE);
! 542: vty_out (vty, "BGP keepalives debugging is off%s", VTY_NEWLINE);
! 543: }
! 544: return CMD_SUCCESS;
! 545: }
! 546:
! 547: ALIAS (no_debug_bgp_keepalive,
! 548: undebug_bgp_keepalive_cmd,
! 549: "undebug bgp keepalives",
! 550: UNDEBUG_STR
! 551: BGP_STR
! 552: "BGP keepalives\n")
! 553:
! 554: DEFUN (debug_bgp_update,
! 555: debug_bgp_update_cmd,
! 556: "debug bgp updates",
! 557: DEBUG_STR
! 558: BGP_STR
! 559: "BGP updates\n")
! 560: {
! 561: if (vty->node == CONFIG_NODE)
! 562: {
! 563: DEBUG_ON (update, UPDATE_IN);
! 564: DEBUG_ON (update, UPDATE_OUT);
! 565: }
! 566: else
! 567: {
! 568: TERM_DEBUG_ON (update, UPDATE_IN);
! 569: TERM_DEBUG_ON (update, UPDATE_OUT);
! 570: vty_out (vty, "BGP updates debugging is on%s", VTY_NEWLINE);
! 571: }
! 572: return CMD_SUCCESS;
! 573: }
! 574:
! 575: DEFUN (debug_bgp_update_direct,
! 576: debug_bgp_update_direct_cmd,
! 577: "debug bgp updates (in|out)",
! 578: DEBUG_STR
! 579: BGP_STR
! 580: "BGP updates\n"
! 581: "Inbound updates\n"
! 582: "Outbound updates\n")
! 583: {
! 584: if (vty->node == CONFIG_NODE)
! 585: {
! 586: if (strncmp ("i", argv[0], 1) == 0)
! 587: {
! 588: DEBUG_OFF (update, UPDATE_OUT);
! 589: DEBUG_ON (update, UPDATE_IN);
! 590: }
! 591: else
! 592: {
! 593: DEBUG_OFF (update, UPDATE_IN);
! 594: DEBUG_ON (update, UPDATE_OUT);
! 595: }
! 596: }
! 597: else
! 598: {
! 599: if (strncmp ("i", argv[0], 1) == 0)
! 600: {
! 601: TERM_DEBUG_OFF (update, UPDATE_OUT);
! 602: TERM_DEBUG_ON (update, UPDATE_IN);
! 603: vty_out (vty, "BGP updates debugging is on (inbound)%s", VTY_NEWLINE);
! 604: }
! 605: else
! 606: {
! 607: TERM_DEBUG_OFF (update, UPDATE_IN);
! 608: TERM_DEBUG_ON (update, UPDATE_OUT);
! 609: vty_out (vty, "BGP updates debugging is on (outbound)%s", VTY_NEWLINE);
! 610: }
! 611: }
! 612: return CMD_SUCCESS;
! 613: }
! 614:
! 615: DEFUN (no_debug_bgp_update,
! 616: no_debug_bgp_update_cmd,
! 617: "no debug bgp updates",
! 618: NO_STR
! 619: DEBUG_STR
! 620: BGP_STR
! 621: "BGP updates\n")
! 622: {
! 623: if (vty->node == CONFIG_NODE)
! 624: {
! 625: DEBUG_OFF (update, UPDATE_IN);
! 626: DEBUG_OFF (update, UPDATE_OUT);
! 627: }
! 628: else
! 629: {
! 630: TERM_DEBUG_OFF (update, UPDATE_IN);
! 631: TERM_DEBUG_OFF (update, UPDATE_OUT);
! 632: vty_out (vty, "BGP updates debugging is off%s", VTY_NEWLINE);
! 633: }
! 634: return CMD_SUCCESS;
! 635: }
! 636:
! 637: ALIAS (no_debug_bgp_update,
! 638: undebug_bgp_update_cmd,
! 639: "undebug bgp updates",
! 640: UNDEBUG_STR
! 641: BGP_STR
! 642: "BGP updates\n")
! 643:
! 644: DEFUN (debug_bgp_normal,
! 645: debug_bgp_normal_cmd,
! 646: "debug bgp",
! 647: DEBUG_STR
! 648: BGP_STR)
! 649: {
! 650: if (vty->node == CONFIG_NODE)
! 651: DEBUG_ON (normal, NORMAL);
! 652: else
! 653: {
! 654: TERM_DEBUG_ON (normal, NORMAL);
! 655: vty_out (vty, "BGP debugging is on%s", VTY_NEWLINE);
! 656: }
! 657: return CMD_SUCCESS;
! 658: }
! 659:
! 660: DEFUN (no_debug_bgp_normal,
! 661: no_debug_bgp_normal_cmd,
! 662: "no debug bgp",
! 663: NO_STR
! 664: DEBUG_STR
! 665: BGP_STR)
! 666: {
! 667: if (vty->node == CONFIG_NODE)
! 668: DEBUG_OFF (normal, NORMAL);
! 669: else
! 670: {
! 671: TERM_DEBUG_OFF (normal, NORMAL);
! 672: vty_out (vty, "BGP debugging is off%s", VTY_NEWLINE);
! 673: }
! 674: return CMD_SUCCESS;
! 675: }
! 676:
! 677: ALIAS (no_debug_bgp_normal,
! 678: undebug_bgp_normal_cmd,
! 679: "undebug bgp",
! 680: UNDEBUG_STR
! 681: BGP_STR)
! 682:
! 683: DEFUN (debug_bgp_zebra,
! 684: debug_bgp_zebra_cmd,
! 685: "debug bgp zebra",
! 686: DEBUG_STR
! 687: BGP_STR
! 688: "BGP Zebra messages\n")
! 689: {
! 690: if (vty->node == CONFIG_NODE)
! 691: DEBUG_ON (zebra, ZEBRA);
! 692: else
! 693: {
! 694: TERM_DEBUG_ON (zebra, ZEBRA);
! 695: vty_out (vty, "BGP zebra debugging is on%s", VTY_NEWLINE);
! 696: }
! 697: return CMD_SUCCESS;
! 698: }
! 699:
! 700: DEFUN (no_debug_bgp_zebra,
! 701: no_debug_bgp_zebra_cmd,
! 702: "no debug bgp zebra",
! 703: NO_STR
! 704: DEBUG_STR
! 705: BGP_STR
! 706: "BGP Zebra messages\n")
! 707: {
! 708: if (vty->node == CONFIG_NODE)
! 709: DEBUG_OFF (zebra, ZEBRA);
! 710: else
! 711: {
! 712: TERM_DEBUG_OFF (zebra, ZEBRA);
! 713: vty_out (vty, "BGP zebra debugging is off%s", VTY_NEWLINE);
! 714: }
! 715: return CMD_SUCCESS;
! 716: }
! 717:
! 718: ALIAS (no_debug_bgp_zebra,
! 719: undebug_bgp_zebra_cmd,
! 720: "undebug bgp zebra",
! 721: UNDEBUG_STR
! 722: BGP_STR
! 723: "BGP Zebra messages\n")
! 724:
! 725: DEFUN (no_debug_bgp_all,
! 726: no_debug_bgp_all_cmd,
! 727: "no debug all bgp",
! 728: NO_STR
! 729: DEBUG_STR
! 730: "Enable all debugging\n"
! 731: BGP_STR)
! 732: {
! 733: TERM_DEBUG_OFF (normal, NORMAL);
! 734: TERM_DEBUG_OFF (events, EVENTS);
! 735: TERM_DEBUG_OFF (keepalive, KEEPALIVE);
! 736: TERM_DEBUG_OFF (update, UPDATE_IN);
! 737: TERM_DEBUG_OFF (update, UPDATE_OUT);
! 738: TERM_DEBUG_OFF (as4, AS4);
! 739: TERM_DEBUG_OFF (as4, AS4_SEGMENT);
! 740: TERM_DEBUG_OFF (fsm, FSM);
! 741: TERM_DEBUG_OFF (filter, FILTER);
! 742: TERM_DEBUG_OFF (zebra, ZEBRA);
! 743: vty_out (vty, "All possible debugging has been turned off%s", VTY_NEWLINE);
! 744:
! 745: return CMD_SUCCESS;
! 746: }
! 747:
! 748: ALIAS (no_debug_bgp_all,
! 749: undebug_bgp_all_cmd,
! 750: "undebug all bgp",
! 751: UNDEBUG_STR
! 752: "Enable all debugging\n"
! 753: BGP_STR)
! 754:
! 755: DEFUN (show_debugging_bgp,
! 756: show_debugging_bgp_cmd,
! 757: "show debugging bgp",
! 758: SHOW_STR
! 759: DEBUG_STR
! 760: BGP_STR)
! 761: {
! 762: vty_out (vty, "BGP debugging status:%s", VTY_NEWLINE);
! 763:
! 764: if (BGP_DEBUG (normal, NORMAL))
! 765: vty_out (vty, " BGP debugging is on%s", VTY_NEWLINE);
! 766: if (BGP_DEBUG (events, EVENTS))
! 767: vty_out (vty, " BGP events debugging is on%s", VTY_NEWLINE);
! 768: if (BGP_DEBUG (keepalive, KEEPALIVE))
! 769: vty_out (vty, " BGP keepalives debugging is on%s", VTY_NEWLINE);
! 770: if (BGP_DEBUG (update, UPDATE_IN) && BGP_DEBUG (update, UPDATE_OUT))
! 771: vty_out (vty, " BGP updates debugging is on%s", VTY_NEWLINE);
! 772: else if (BGP_DEBUG (update, UPDATE_IN))
! 773: vty_out (vty, " BGP updates debugging is on (inbound)%s", VTY_NEWLINE);
! 774: else if (BGP_DEBUG (update, UPDATE_OUT))
! 775: vty_out (vty, " BGP updates debugging is on (outbound)%s", VTY_NEWLINE);
! 776: if (BGP_DEBUG (fsm, FSM))
! 777: vty_out (vty, " BGP fsm debugging is on%s", VTY_NEWLINE);
! 778: if (BGP_DEBUG (filter, FILTER))
! 779: vty_out (vty, " BGP filter debugging is on%s", VTY_NEWLINE);
! 780: if (BGP_DEBUG (zebra, ZEBRA))
! 781: vty_out (vty, " BGP zebra debugging is on%s", VTY_NEWLINE);
! 782: if (BGP_DEBUG (as4, AS4))
! 783: vty_out (vty, " BGP as4 debugging is on%s", VTY_NEWLINE);
! 784: if (BGP_DEBUG (as4, AS4_SEGMENT))
! 785: vty_out (vty, " BGP as4 aspath segment debugging is on%s", VTY_NEWLINE);
! 786: vty_out (vty, "%s", VTY_NEWLINE);
! 787: return CMD_SUCCESS;
! 788: }
! 789:
! 790: static int
! 791: bgp_config_write_debug (struct vty *vty)
! 792: {
! 793: int write = 0;
! 794:
! 795: if (CONF_BGP_DEBUG (normal, NORMAL))
! 796: {
! 797: vty_out (vty, "debug bgp%s", VTY_NEWLINE);
! 798: write++;
! 799: }
! 800:
! 801: if (CONF_BGP_DEBUG (as4, AS4))
! 802: {
! 803: vty_out (vty, "debug bgp as4%s", VTY_NEWLINE);
! 804: write++;
! 805: }
! 806:
! 807: if (CONF_BGP_DEBUG (as4, AS4_SEGMENT))
! 808: {
! 809: vty_out (vty, "debug bgp as4 segment%s", VTY_NEWLINE);
! 810: write++;
! 811: }
! 812:
! 813: if (CONF_BGP_DEBUG (events, EVENTS))
! 814: {
! 815: vty_out (vty, "debug bgp events%s", VTY_NEWLINE);
! 816: write++;
! 817: }
! 818:
! 819: if (CONF_BGP_DEBUG (keepalive, KEEPALIVE))
! 820: {
! 821: vty_out (vty, "debug bgp keepalives%s", VTY_NEWLINE);
! 822: write++;
! 823: }
! 824:
! 825: if (CONF_BGP_DEBUG (update, UPDATE_IN) && CONF_BGP_DEBUG (update, UPDATE_OUT))
! 826: {
! 827: vty_out (vty, "debug bgp updates%s", VTY_NEWLINE);
! 828: write++;
! 829: }
! 830: else if (CONF_BGP_DEBUG (update, UPDATE_IN))
! 831: {
! 832: vty_out (vty, "debug bgp updates in%s", VTY_NEWLINE);
! 833: write++;
! 834: }
! 835: else if (CONF_BGP_DEBUG (update, UPDATE_OUT))
! 836: {
! 837: vty_out (vty, "debug bgp updates out%s", VTY_NEWLINE);
! 838: write++;
! 839: }
! 840:
! 841: if (CONF_BGP_DEBUG (fsm, FSM))
! 842: {
! 843: vty_out (vty, "debug bgp fsm%s", VTY_NEWLINE);
! 844: write++;
! 845: }
! 846:
! 847: if (CONF_BGP_DEBUG (filter, FILTER))
! 848: {
! 849: vty_out (vty, "debug bgp filters%s", VTY_NEWLINE);
! 850: write++;
! 851: }
! 852:
! 853: if (CONF_BGP_DEBUG (zebra, ZEBRA))
! 854: {
! 855: vty_out (vty, "debug bgp zebra%s", VTY_NEWLINE);
! 856: write++;
! 857: }
! 858:
! 859: return write;
! 860: }
! 861:
! 862: static struct cmd_node debug_node =
! 863: {
! 864: DEBUG_NODE,
! 865: "",
! 866: 1
! 867: };
! 868:
! 869: void
! 870: bgp_debug_init (void)
! 871: {
! 872: install_node (&debug_node, bgp_config_write_debug);
! 873:
! 874: install_element (ENABLE_NODE, &show_debugging_bgp_cmd);
! 875:
! 876: install_element (ENABLE_NODE, &debug_bgp_as4_cmd);
! 877: install_element (CONFIG_NODE, &debug_bgp_as4_cmd);
! 878: install_element (ENABLE_NODE, &debug_bgp_as4_segment_cmd);
! 879: install_element (CONFIG_NODE, &debug_bgp_as4_segment_cmd);
! 880:
! 881: install_element (ENABLE_NODE, &debug_bgp_fsm_cmd);
! 882: install_element (CONFIG_NODE, &debug_bgp_fsm_cmd);
! 883: install_element (ENABLE_NODE, &debug_bgp_events_cmd);
! 884: install_element (CONFIG_NODE, &debug_bgp_events_cmd);
! 885: install_element (ENABLE_NODE, &debug_bgp_filter_cmd);
! 886: install_element (CONFIG_NODE, &debug_bgp_filter_cmd);
! 887: install_element (ENABLE_NODE, &debug_bgp_keepalive_cmd);
! 888: install_element (CONFIG_NODE, &debug_bgp_keepalive_cmd);
! 889: install_element (ENABLE_NODE, &debug_bgp_update_cmd);
! 890: install_element (CONFIG_NODE, &debug_bgp_update_cmd);
! 891: install_element (ENABLE_NODE, &debug_bgp_update_direct_cmd);
! 892: install_element (CONFIG_NODE, &debug_bgp_update_direct_cmd);
! 893: install_element (ENABLE_NODE, &debug_bgp_normal_cmd);
! 894: install_element (CONFIG_NODE, &debug_bgp_normal_cmd);
! 895: install_element (ENABLE_NODE, &debug_bgp_zebra_cmd);
! 896: install_element (CONFIG_NODE, &debug_bgp_zebra_cmd);
! 897:
! 898: install_element (ENABLE_NODE, &no_debug_bgp_as4_cmd);
! 899: install_element (ENABLE_NODE, &undebug_bgp_as4_cmd);
! 900: install_element (CONFIG_NODE, &no_debug_bgp_as4_cmd);
! 901: install_element (ENABLE_NODE, &no_debug_bgp_as4_segment_cmd);
! 902: install_element (ENABLE_NODE, &undebug_bgp_as4_segment_cmd);
! 903: install_element (CONFIG_NODE, &no_debug_bgp_as4_segment_cmd);
! 904:
! 905: install_element (ENABLE_NODE, &no_debug_bgp_fsm_cmd);
! 906: install_element (ENABLE_NODE, &undebug_bgp_fsm_cmd);
! 907: install_element (CONFIG_NODE, &no_debug_bgp_fsm_cmd);
! 908: install_element (ENABLE_NODE, &no_debug_bgp_events_cmd);
! 909: install_element (ENABLE_NODE, &undebug_bgp_events_cmd);
! 910: install_element (CONFIG_NODE, &no_debug_bgp_events_cmd);
! 911: install_element (ENABLE_NODE, &no_debug_bgp_filter_cmd);
! 912: install_element (ENABLE_NODE, &undebug_bgp_filter_cmd);
! 913: install_element (CONFIG_NODE, &no_debug_bgp_filter_cmd);
! 914: install_element (ENABLE_NODE, &no_debug_bgp_keepalive_cmd);
! 915: install_element (ENABLE_NODE, &undebug_bgp_keepalive_cmd);
! 916: install_element (CONFIG_NODE, &no_debug_bgp_keepalive_cmd);
! 917: install_element (ENABLE_NODE, &no_debug_bgp_update_cmd);
! 918: install_element (ENABLE_NODE, &undebug_bgp_update_cmd);
! 919: install_element (CONFIG_NODE, &no_debug_bgp_update_cmd);
! 920: install_element (ENABLE_NODE, &no_debug_bgp_normal_cmd);
! 921: install_element (ENABLE_NODE, &undebug_bgp_normal_cmd);
! 922: install_element (CONFIG_NODE, &no_debug_bgp_normal_cmd);
! 923: install_element (ENABLE_NODE, &no_debug_bgp_zebra_cmd);
! 924: install_element (ENABLE_NODE, &undebug_bgp_zebra_cmd);
! 925: install_element (CONFIG_NODE, &no_debug_bgp_zebra_cmd);
! 926: install_element (ENABLE_NODE, &no_debug_bgp_all_cmd);
! 927: install_element (ENABLE_NODE, &undebug_bgp_all_cmd);
! 928: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>