Skip to content

Commit

Permalink
Merge pull request #4548 from ton31337/feature/autocomplete_peer_grou…
Browse files Browse the repository at this point in the history
…ps_6.0

bgpd: [6.0] List all groups dynamically for commands with peer-group
  • Loading branch information
riw777 committed Jun 18, 2019
2 parents 32494dd + 410bcda commit e3a39be
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 16 deletions.
26 changes: 13 additions & 13 deletions bgpd/bgp_vty.c
Expand Up @@ -2524,7 +2524,7 @@ static struct peer_group *listen_range_exists(struct bgp *bgp,

DEFUN (bgp_listen_range,
bgp_listen_range_cmd,
"bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group WORD",
"bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group PGNAME",
"BGP specific commands\n"
"Configure BGP dynamic neighbors listen range\n"
"Configure BGP dynamic neighbors listen range\n"
Expand All @@ -2542,7 +2542,7 @@ DEFUN (bgp_listen_range,
argv_find(argv, argc, "A.B.C.D/M", &idx);
argv_find(argv, argc, "X:X::X:X/M", &idx);
char *prefix = argv[idx]->arg;
argv_find(argv, argc, "WORD", &idx);
argv_find(argv, argc, "PGNAME", &idx);
char *peergroup = argv[idx]->arg;

/* Convert IP prefix string to struct prefix. */
Expand Down Expand Up @@ -2594,7 +2594,7 @@ DEFUN (bgp_listen_range,

DEFUN (no_bgp_listen_range,
no_bgp_listen_range_cmd,
"no bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group WORD",
"no bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group PGNAME",
NO_STR
"BGP specific commands\n"
"Unconfigure BGP dynamic neighbors listen range\n"
Expand Down Expand Up @@ -2890,7 +2890,7 @@ static int peer_conf_interface_get(struct vty *vty, const char *conf_if,

DEFUN (neighbor_interface_config,
neighbor_interface_config_cmd,
"neighbor WORD interface [peer-group WORD]",
"neighbor WORD interface [peer-group PGNAME]",
NEIGHBOR_STR
"Interface name or neighbor tag\n"
"Enable BGP on interface\n"
Expand All @@ -2911,7 +2911,7 @@ DEFUN (neighbor_interface_config,

DEFUN (neighbor_interface_config_v6only,
neighbor_interface_config_v6only_cmd,
"neighbor WORD interface v6only [peer-group WORD]",
"neighbor WORD interface v6only [peer-group PGNAME]",
NEIGHBOR_STR
"Interface name or neighbor tag\n"
"Enable BGP on interface\n"
Expand Down Expand Up @@ -3056,7 +3056,7 @@ DEFUN (no_neighbor,

DEFUN (no_neighbor_interface_config,
no_neighbor_interface_config_cmd,
"no neighbor WORD interface [v6only] [peer-group WORD] [remote-as <(1-4294967295)|internal|external>]",
"no neighbor WORD interface [v6only] [peer-group PGNAME] [remote-as <(1-4294967295)|internal|external>]",
NO_STR
NEIGHBOR_STR
"Interface name\n"
Expand Down Expand Up @@ -3371,7 +3371,7 @@ ALIAS_HIDDEN(no_neighbor_activate, no_neighbor_activate_hidden_cmd,

DEFUN (neighbor_set_peer_group,
neighbor_set_peer_group_cmd,
"neighbor <A.B.C.D|X:X::X:X|WORD> peer-group WORD",
"neighbor <A.B.C.D|X:X::X:X|WORD> peer-group PGNAME",
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"Member of the peer-group\n"
Expand Down Expand Up @@ -3429,14 +3429,14 @@ DEFUN (neighbor_set_peer_group,
}

ALIAS_HIDDEN(neighbor_set_peer_group, neighbor_set_peer_group_hidden_cmd,
"neighbor <A.B.C.D|X:X::X:X|WORD> peer-group WORD",
"neighbor <A.B.C.D|X:X::X:X|WORD> peer-group PGNAME",
NEIGHBOR_STR NEIGHBOR_ADDR_STR2
"Member of the peer-group\n"
"Peer-group name\n")

DEFUN (no_neighbor_set_peer_group,
no_neighbor_set_peer_group_cmd,
"no neighbor <A.B.C.D|X:X::X:X|WORD> peer-group WORD",
"no neighbor <A.B.C.D|X:X::X:X|WORD> peer-group PGNAME",
NO_STR
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
Expand Down Expand Up @@ -3466,7 +3466,7 @@ DEFUN (no_neighbor_set_peer_group,
}

ALIAS_HIDDEN(no_neighbor_set_peer_group, no_neighbor_set_peer_group_hidden_cmd,
"no neighbor <A.B.C.D|X:X::X:X|WORD> peer-group WORD",
"no neighbor <A.B.C.D|X:X::X:X|WORD> peer-group PGNAME",
NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
"Member of the peer-group\n"
"Peer-group name\n")
Expand Down Expand Up @@ -7122,7 +7122,7 @@ static int bgp_clear_prefix(struct vty *vty, const char *view_name,
/* one clear bgp command to rule them all */
DEFUN (clear_ip_bgp_all,
clear_ip_bgp_all_cmd,
"clear [ip] bgp [<view|vrf> VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> [<soft [<in|out>]|in [prefix-filter]|out>]",
"clear [ip] bgp [<view|vrf> VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group PGNAME> [<soft [<in|out>]|in [prefix-filter]|out>]",
CLEAR_STR
IP_STR
BGP_STR
Expand Down Expand Up @@ -7169,7 +7169,7 @@ DEFUN (clear_ip_bgp_all,
if (argv_find_and_parse_afi(argv, argc, &idx, &afi))
argv_find_and_parse_safi(argv, argc, &idx, &safi);

/* <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> */
/* <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group PGNAME> */
if (argv_find(argv, argc, "*", &idx)) {
clr_sort = clear_all;
} else if (argv_find(argv, argc, "A.B.C.D", &idx)) {
Expand All @@ -7182,7 +7182,7 @@ DEFUN (clear_ip_bgp_all,
clr_sort = clear_group;
idx++;
clr_arg = argv[idx]->arg;
} else if (argv_find(argv, argc, "WORD", &idx)) {
} else if (argv_find(argv, argc, "PGNAME", &idx)) {
clr_sort = clear_peer;
clr_arg = argv[idx]->arg;
} else if (argv_find(argv, argc, "(1-4294967295)", &idx)) {
Expand Down
2 changes: 1 addition & 1 deletion bgpd/bgpd.c
Expand Up @@ -6809,7 +6809,7 @@ static void bgp_config_write_peer_global(struct vty *vty, struct bgp *bgp,
}

/* For swpX peers we displayed the peer-group
* via 'neighbor swpX interface peer-group WORD' */
* via 'neighbor swpX interface peer-group PGNAME' */
if (!if_pg_printed)
vty_out(vty, " neighbor %s peer-group %s\n", addr,
peer->group->name);
Expand Down
28 changes: 26 additions & 2 deletions doc/user/bgp.rst
Expand Up @@ -720,6 +720,30 @@ Defining Peers
peers ASN is the same as mine as specified under the :clicmd:`router bgp ASN`
command the connection will be denied.

.. index:: [no] bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group PGNAME
.. clicmd:: [no] bgp listen range <A.B.C.D/M|X:X::X:X/M> peer-group PGNAME

Accept connections from any peers in the specified prefix. Configuration
from the specified peer-group is used to configure these peers.

.. note::

When using BGP listen ranges, if the associated peer group has TCP MD5
authentication configured, your kernel must support this on prefixes. On
Linux, this support was added in kernel version 4.14. If your kernel does
not support this feature you will get a warning in the log file, and the
listen range will only accept connections from peers without MD5 configured.

Additionally, we have observed that when using this option at scale (several
hundred peers) the kernel may hit its option memory limit. In this situation
you will see error messages like:

``bgpd: sockopt_tcp_signature: setsockopt(23): Cannot allocate memory``

In this case you need to increase the value of the sysctl
``net.core.optmem_max`` to allow the kernel to allocate the necessary option
memory.

.. _bgp-configuring-peers:

Configuring Peers
Expand Down Expand Up @@ -892,8 +916,8 @@ and will share updates.

This command defines a new peer group.

.. index:: neighbor PEER peer-group WORD
.. clicmd:: neighbor PEER peer-group WORD
.. index:: neighbor PEER peer-group PGNAME
.. clicmd:: neighbor PEER peer-group PGNAME

This command bind specific peer to peer group WORD.

Expand Down

0 comments on commit e3a39be

Please sign in to comment.