mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 15:23:39 +00:00
Merge pull request #2012 from qlyoung/draft-bz-v4goawayflag-00
zebra: implement draft-bz-v4goawayflag-00
This commit is contained in:
commit
b755fd3530
@ -184,6 +184,14 @@ Router Advertisement
|
|||||||
no ipv6 nd suppress-ra
|
no ipv6 nd suppress-ra
|
||||||
ipv6 nd prefix 2001:0DB8:5009::/64
|
ipv6 nd prefix 2001:0DB8:5009::/64
|
||||||
|
|
||||||
|
.. index:: [no] ipv6 nd v4 goaway
|
||||||
|
.. clicmd:: [no] ipv6 nd v4 goaway
|
||||||
|
|
||||||
|
Set whether or not to transmit the V4 GoAway option. This option indicates
|
||||||
|
to the destination that they should disable IPv4 on the link.
|
||||||
|
|
||||||
|
Implements draft-bz-v4goawayflag-00.
|
||||||
|
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
@ -191,3 +199,4 @@ Router Advertisement
|
|||||||
- :rfc:`4861` (Neighbor Discovery for IP Version 6 (IPv6))
|
- :rfc:`4861` (Neighbor Discovery for IP Version 6 (IPv6))
|
||||||
- :rfc:`6275` (Mobility Support in IPv6)
|
- :rfc:`6275` (Mobility Support in IPv6)
|
||||||
- :rfc:`4191` (Default Router Preferences and More-Specific Routes)
|
- :rfc:`4191` (Default Router Preferences and More-Specific Routes)
|
||||||
|
- https://www.ietf.org/id/draft-bz-v4goawayflag-00.txt
|
||||||
|
@ -45,6 +45,8 @@
|
|||||||
#include "zebra/zebra_vrf.h"
|
#include "zebra/zebra_vrf.h"
|
||||||
|
|
||||||
extern struct zebra_privs_t zserv_privs;
|
extern struct zebra_privs_t zserv_privs;
|
||||||
|
/* currently undefined in icmp6.h */
|
||||||
|
bool AdvGoAwayFlag;
|
||||||
|
|
||||||
#if defined(HAVE_RTADV)
|
#if defined(HAVE_RTADV)
|
||||||
|
|
||||||
@ -224,6 +226,9 @@ static void rtadv_send_packet(int sock, struct interface *ifp)
|
|||||||
rtadv->nd_ra_flags_reserved |= ND_RA_FLAG_OTHER;
|
rtadv->nd_ra_flags_reserved |= ND_RA_FLAG_OTHER;
|
||||||
if (zif->rtadv.AdvHomeAgentFlag)
|
if (zif->rtadv.AdvHomeAgentFlag)
|
||||||
rtadv->nd_ra_flags_reserved |= ND_RA_FLAG_HOME_AGENT;
|
rtadv->nd_ra_flags_reserved |= ND_RA_FLAG_HOME_AGENT;
|
||||||
|
if (AdvGoAwayFlag)
|
||||||
|
rtadv->nd_ra_flags_reserved |= ND_RA_FLAG_V4_GOAWAY;
|
||||||
|
|
||||||
/* Note that according to Neighbor Discovery (RFC 4861 [18]),
|
/* Note that according to Neighbor Discovery (RFC 4861 [18]),
|
||||||
* AdvDefaultLifetime is by default based on the value of
|
* AdvDefaultLifetime is by default based on the value of
|
||||||
* MaxRtrAdvInterval. AdvDefaultLifetime is used in the Router Lifetime
|
* MaxRtrAdvInterval. AdvDefaultLifetime is used in the Router Lifetime
|
||||||
@ -1495,6 +1500,19 @@ DEFUN (no_ipv6_nd_mtu,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN (ipv6_nd_v4_goaway,
|
||||||
|
ipv6_nd_v4_goaway_cmd,
|
||||||
|
"[no] ipv6 nd v4 goaway",
|
||||||
|
NO_STR
|
||||||
|
"Interface IPv6 config commands\n"
|
||||||
|
"Neighbor discovery\n"
|
||||||
|
"v4 RA flags\n"
|
||||||
|
"Set V4 GoAway Flag\n")
|
||||||
|
{
|
||||||
|
AdvGoAwayFlag = !strmatch(argv[0]->text, "no");
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/* Dump interface ND information to vty. */
|
/* Dump interface ND information to vty. */
|
||||||
static int nd_dump_vty(struct vty *vty, struct interface *ifp)
|
static int nd_dump_vty(struct vty *vty, struct interface *ifp)
|
||||||
{
|
{
|
||||||
@ -1626,6 +1644,9 @@ static int rtadv_config_write(struct vty *vty, struct interface *ifp)
|
|||||||
if (zif->rtadv.AdvLinkMTU)
|
if (zif->rtadv.AdvLinkMTU)
|
||||||
vty_out(vty, " ipv6 nd mtu %d\n", zif->rtadv.AdvLinkMTU);
|
vty_out(vty, " ipv6 nd mtu %d\n", zif->rtadv.AdvLinkMTU);
|
||||||
|
|
||||||
|
if (AdvGoAwayFlag)
|
||||||
|
vty_out(vty, " ipv6 nd v4 goaway\n");
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS_RO(zif->rtadv.AdvPrefixList, node, rprefix)) {
|
for (ALL_LIST_ELEMENTS_RO(zif->rtadv.AdvPrefixList, node, rprefix)) {
|
||||||
vty_out(vty, " ipv6 nd prefix %s",
|
vty_out(vty, " ipv6 nd prefix %s",
|
||||||
prefix2str(&rprefix->prefix, buf, sizeof(buf)));
|
prefix2str(&rprefix->prefix, buf, sizeof(buf)));
|
||||||
@ -1744,6 +1765,7 @@ void rtadv_cmd_init(void)
|
|||||||
install_element(INTERFACE_NODE, &no_ipv6_nd_router_preference_cmd);
|
install_element(INTERFACE_NODE, &no_ipv6_nd_router_preference_cmd);
|
||||||
install_element(INTERFACE_NODE, &ipv6_nd_mtu_cmd);
|
install_element(INTERFACE_NODE, &ipv6_nd_mtu_cmd);
|
||||||
install_element(INTERFACE_NODE, &no_ipv6_nd_mtu_cmd);
|
install_element(INTERFACE_NODE, &no_ipv6_nd_mtu_cmd);
|
||||||
|
install_element(INTERFACE_NODE, &ipv6_nd_v4_goaway_cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int if_join_all_router(int sock, struct interface *ifp)
|
static int if_join_all_router(int sock, struct interface *ifp)
|
||||||
|
@ -28,6 +28,9 @@
|
|||||||
/* NB: RTADV is defined in zebra/interface.h above */
|
/* NB: RTADV is defined in zebra/interface.h above */
|
||||||
#if defined(HAVE_RTADV)
|
#if defined(HAVE_RTADV)
|
||||||
|
|
||||||
|
/* currently undefined in icmp6.h */
|
||||||
|
#define ND_RA_FLAG_V4_GOAWAY 0x01
|
||||||
|
|
||||||
/* Router advertisement prefix. */
|
/* Router advertisement prefix. */
|
||||||
struct rtadv_prefix {
|
struct rtadv_prefix {
|
||||||
/* Prefix to be advertised. */
|
/* Prefix to be advertised. */
|
||||||
|
Loading…
Reference in New Issue
Block a user