summaryrefslogtreecommitdiff
path: root/bgpd/bgp_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_open.c')
-rw-r--r--bgpd/bgp_open.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c
index 1444a5837b..8be906d399 100644
--- a/bgpd/bgp_open.c
+++ b/bgpd/bgp_open.c
@@ -1124,7 +1124,8 @@ bgp_open_option_parse (struct peer *peer, u_char length, int *mp_capability)
&& ! peer->afc_nego[AFI_IP][SAFI_MULTICAST]
&& ! peer->afc_nego[AFI_IP][SAFI_MPLS_VPN]
&& ! peer->afc_nego[AFI_IP6][SAFI_UNICAST]
- && ! peer->afc_nego[AFI_IP6][SAFI_MULTICAST])
+ && ! peer->afc_nego[AFI_IP6][SAFI_MULTICAST]
+ && ! peer->afc_nego[AFI_IP6][SAFI_MPLS_VPN])
{
zlog_err ("%s [Error] Configured AFI/SAFIs do not "
"overlap with received MP capabilities",
@@ -1316,6 +1317,18 @@ bgp_open_capability (struct stream *s, struct peer *peer)
stream_putc (s, 0);
stream_putc (s, SAFI_MULTICAST);
}
+ /* IPv6 VPN. */
+ if (peer->afc[AFI_IP6][SAFI_MPLS_VPN])
+ {
+ peer->afc_adv[AFI_IP6][SAFI_MPLS_VPN] = 1;
+ stream_putc (s, BGP_OPEN_OPT_CAP);
+ stream_putc (s, CAPABILITY_CODE_MP_LEN + 2);
+ stream_putc (s, CAPABILITY_CODE_MP);
+ stream_putc (s, CAPABILITY_CODE_MP_LEN);
+ stream_putw (s, AFI_IP6);
+ stream_putc (s, 0);
+ stream_putc (s, SAFI_MPLS_LABELED_VPN);
+ }
#endif /* HAVE_IPV6 */
/* Route refresh. */