no ipv6 nd suppress-ra
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::
- :rfc:`4861` (Neighbor Discovery for IP Version 6 (IPv6))
- :rfc:`6275` (Mobility Support in IPv6)
- :rfc:`4191` (Default Router Preferences and More-Specific Routes)
+ - https://www.ietf.org/id/draft-bz-v4goawayflag-00.txt
#include "zebra/zebra_vrf.h"
extern struct zebra_privs_t zserv_privs;
+/* currently undefined in icmp6.h */
+bool AdvGoAwayFlag;
#if defined(HAVE_RTADV)
rtadv->nd_ra_flags_reserved |= ND_RA_FLAG_OTHER;
if (zif->rtadv.AdvHomeAgentFlag)
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]),
* AdvDefaultLifetime is by default based on the value of
* MaxRtrAdvInterval. AdvDefaultLifetime is used in the Router Lifetime
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. */
static int nd_dump_vty(struct vty *vty, struct interface *ifp)
{
if (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)) {
vty_out(vty, " ipv6 nd prefix %s",
prefix2str(&rprefix->prefix, buf, sizeof(buf)));
install_element(INTERFACE_NODE, &no_ipv6_nd_router_preference_cmd);
install_element(INTERFACE_NODE, &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)