diff options
author | Calin Velea <vcalinus@gemenii.ro> | 2007-04-09 15:29:51 -0500 |
---|---|---|
committer | Jeffrey C. Ollie <jeff@ocjtech.us> | 2007-04-09 15:29:51 -0500 |
commit | 8d3e3ccfd0d0cb82b253f937339d1c6189a2bf54 (patch) | |
tree | b8bc9ff4aad0c8e7933e91895f6f3cf7d93f8e24 /bgpd/bgp_vty.c | |
parent | c15deb1b7428a2baedfb615b1a41fe28d48c598c (diff) | |
download | quagga-8d3e3ccfd0d0cb82b253f937339d1c6189a2bf54.tar.bz2 quagga-8d3e3ccfd0d0cb82b253f937339d1c6189a2bf54.tar.xz |
Appying patch from http://vcalinus.gemenii.ro/quagga-0.99.5-realms.diffquagga-0.99.5-realms.diff
Diffstat (limited to 'bgpd/bgp_vty.c')
-rw-r--r-- | bgpd/bgp_vty.c | 141 |
1 files changed, 140 insertions, 1 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index ec4b6c22..93096dc0 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -2985,7 +2985,114 @@ ALIAS (no_neighbor_weight, NEIGHBOR_ADDR_STR2 "Set default weight for routes from this neighbor\n" "default weight\n") - + +#ifdef SUPPORT_REALMS + +#define REALM_PEER_AS 0xFFFFA +#define REALM_ORIGIN_AS 0xFFFFB + +/* neighbor realm.*/ +static int +peer_realm_set_vty (struct vty *vty, const char *ip_str, + const char *realm_str) +{ + struct peer *peer; + u_int32_t realmid; + + if (strcmp(realm_str, "peer-as") == 0) + { + realmid = REALM_PEER_AS; + } + else if (strcmp(realm_str, "origin-as") == 0) + { + realmid = REALM_ORIGIN_AS; + } + else + { + if (rtnl_rtrealm_a2n (&realmid, realm_str) < 0) + { + vty_out (vty, "%% Invalid realm value%s", VTY_NEWLINE); + return CMD_WARNING; + } + } + + + peer = peer_and_group_lookup_vty (vty, ip_str); + if (! peer) + return CMD_WARNING; + + peer_realm_set (peer, realmid); + + return CMD_SUCCESS; +} + +static int +peer_realm_unset_vty (struct vty *vty, const char *ip_str) +{ + struct peer *peer; + + peer = peer_and_group_lookup_vty (vty, ip_str); + if (! peer) + return CMD_WARNING; + + peer_realm_unset (peer); + + return CMD_SUCCESS; +} + +DEFUN (neighbor_realm, + neighbor_realm_cmd, + NEIGHBOR_CMD2 "realm (<0-255>|WORD)", + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Set default realm for routes from this neighbor\n" + "default realm id\n" + "default realm name\n") +{ + return peer_realm_set_vty (vty, argv[0], argv[1]); +} + +ALIAS (neighbor_realm, + neighbor_realm_origin_peer_cmd, + NEIGHBOR_CMD2 "realm (origin-as|peer-as)", + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Set default realm for routes from this neighbor\n" + "Set default realm to received route origin AS\n" + "Set default realm to peer AS") + +DEFUN (no_neighbor_realm, + no_neighbor_realm_cmd, + NO_NEIGHBOR_CMD2 "realm", + NO_STR + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Set default realm for routes from this neighbor\n") +{ + return peer_realm_unset_vty (vty, argv[0]); +} + +ALIAS (no_neighbor_realm, + no_neighbor_realm_val_cmd, + NO_NEIGHBOR_CMD2 "realm (<0-255>|WORD)", + NO_STR + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Set default realm for routes from this neighbor\n" + "default realm id\n" + "default realm name\n") + +ALIAS (no_neighbor_realm, + no_neighbor_realm_origin_peer_cmd, + NO_NEIGHBOR_CMD2 "realm (origin-as|peer-as)", + NO_STR + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Set default realm for routes from this neighbor\n" + "Set default realm to received route origin AS\n" + "Set default realm to peer AS") +#endif + /* Override capability negotiation. */ DEFUN (neighbor_override_capability, neighbor_override_capability_cmd, @@ -7431,6 +7538,27 @@ bgp_show_peer (struct vty *vty, struct peer *p) vty_out (vty, "%s", VTY_NEWLINE); +#ifdef SUPPORT_REALMS + + /* Default realm */ + if (CHECK_FLAG (p->config, PEER_CONFIG_REALM)) + { + char realmbuf[64]; + if (p->realm == REALM_PEER_AS) + vty_out (vty, " Default realm is peer-as%s", + VTY_NEWLINE); + else if (p->realm == REALM_ORIGIN_AS) + vty_out (vty, " Default realm is origin-as%s", + VTY_NEWLINE); + else vty_out (vty, " Default realm is %s%s", + rtnl_rtrealm_n2a (p->realm, realmbuf, sizeof (realmbuf)), VTY_NEWLINE); + } + + vty_out (vty, "%s", VTY_NEWLINE); + + +#endif + /* Address Family Information */ for (afi = AFI_IP ; afi < AFI_MAX ; afi++) for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++) @@ -9242,6 +9370,17 @@ bgp_vty_init (void) install_element (BGP_NODE, &no_neighbor_weight_cmd); install_element (BGP_NODE, &no_neighbor_weight_val_cmd); +#ifdef SUPPORT_REALMS + + /* "neighbor realm" commands. */ + install_element (BGP_NODE, &neighbor_realm_cmd); + install_element (BGP_NODE, &neighbor_realm_origin_peer_cmd); + install_element (BGP_NODE, &no_neighbor_realm_cmd); + install_element (BGP_NODE, &no_neighbor_realm_origin_peer_cmd); + install_element (BGP_NODE, &no_neighbor_realm_val_cmd); + +#endif + /* "neighbor override-capability" commands. */ install_element (BGP_NODE, &neighbor_override_capability_cmd); install_element (BGP_NODE, &no_neighbor_override_capability_cmd); |