bgpd: Allow bgp to specify if it will allow v6 routing with v4 nexthops

Add a `--v6-with-v4-nexthop` cli to bgp to allow it to peer with
neighbors in the configuration where the interface has no v6 addresses
at all and there is a v4 address that is usable as a v4 address
embedded in a v6 address.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2023-08-03 08:14:08 -04:00
parent 95002ded3e
commit 0435b31bb8

View File

@ -57,15 +57,17 @@
/* bgpd options, we use GNU getopt library. */ /* bgpd options, we use GNU getopt library. */
static const struct option longopts[] = { static const struct option longopts[] = {
{"bgp_port", required_argument, NULL, 'p'}, { "bgp_port", required_argument, NULL, 'p' },
{"listenon", required_argument, NULL, 'l'}, { "listenon", required_argument, NULL, 'l' },
{"no_kernel", no_argument, NULL, 'n'}, { "no_kernel", no_argument, NULL, 'n' },
{"skip_runas", no_argument, NULL, 'S'}, { "skip_runas", no_argument, NULL, 'S' },
{"ecmp", required_argument, NULL, 'e'}, { "ecmp", required_argument, NULL, 'e' },
{"int_num", required_argument, NULL, 'I'}, { "int_num", required_argument, NULL, 'I' },
{"no_zebra", no_argument, NULL, 'Z'}, { "no_zebra", no_argument, NULL, 'Z' },
{"socket_size", required_argument, NULL, 's'}, { "socket_size", required_argument, NULL, 's' },
{0}}; { "v6-with-v4-nexthops", no_argument, NULL, 'v' },
{ 0 }
};
/* signal definitions */ /* signal definitions */
void sighup(void); void sighup(void);
@ -387,16 +389,16 @@ int main(int argc, char **argv)
addresses->cmp = (int (*)(void *, void *))strcmp; addresses->cmp = (int (*)(void *, void *))strcmp;
frr_preinit(&bgpd_di, argc, argv); frr_preinit(&bgpd_di, argc, argv);
frr_opt_add( frr_opt_add("p:l:SnZe:I:s:" DEPRECATED_OPTIONS, longopts,
"p:l:SnZe:I:s:" DEPRECATED_OPTIONS, longopts, " -p, --bgp_port Set BGP listen port number (0 means do not listen).\n"
" -p, --bgp_port Set BGP listen port number (0 means do not listen).\n" " -l, --listenon Listen on specified address (implies -n)\n"
" -l, --listenon Listen on specified address (implies -n)\n" " -n, --no_kernel Do not install route to kernel.\n"
" -n, --no_kernel Do not install route to kernel.\n" " -Z, --no_zebra Do not communicate with Zebra.\n"
" -Z, --no_zebra Do not communicate with Zebra.\n" " -S, --skip_runas Skip capabilities checks, and changing user and group IDs.\n"
" -S, --skip_runas Skip capabilities checks, and changing user and group IDs.\n" " -e, --ecmp Specify ECMP to use.\n"
" -e, --ecmp Specify ECMP to use.\n" " -I, --int_num Set instance number (label-manager)\n"
" -I, --int_num Set instance number (label-manager)\n" " -s, --socket_size Set BGP peer socket send buffer size\n"
" -s, --socket_size Set BGP peer socket send buffer size\n"); " , --v6-with-v4-nexthop Allow BGP to form v6 neighbors using v4 nexthops\n");
/* Command line argument treatment. */ /* Command line argument treatment. */
while (1) { while (1) {
@ -458,6 +460,9 @@ int main(int argc, char **argv)
case 's': case 's':
buffer_size = atoi(optarg); buffer_size = atoi(optarg);
break; break;
case 'v':
bm->v6_with_v4_nexthops = true;
break;
default: default:
frr_help_exit(1); frr_help_exit(1);
} }