Merge pull request #83 from LabNConsulting/working/2.0/patch-set/2-no-vrf

Fix a number of VPN/Encap SAFI related issues (no VRF CLI changes)
This commit is contained in:
David Lamparter 2017-01-19 17:35:05 +01:00 committed by GitHub
commit 190a5df69f
15 changed files with 254 additions and 179 deletions

View File

@ -2643,6 +2643,8 @@ bgp_packet_mpattr_start (struct stream *s, afi_t afi, safi_t safi, afi_t nh_afi,
stream_putw (s, afi); stream_putw (s, afi);
stream_putc (s, (safi == SAFI_MPLS_VPN) ? SAFI_MPLS_LABELED_VPN : safi); stream_putc (s, (safi == SAFI_MPLS_VPN) ? SAFI_MPLS_LABELED_VPN : safi);
if (nh_afi == AFI_MAX)
nh_afi = BGP_NEXTHOP_AFI_FROM_NHLEN(attr->extra->mp_nexthop_len);
/* Nexthop */ /* Nexthop */
switch (nh_afi) switch (nh_afi)
{ {
@ -2894,7 +2896,8 @@ bgp_packet_attribute (struct bgp *bgp, struct peer *peer,
size_t mpattrlen_pos = 0; size_t mpattrlen_pos = 0;
mpattrlen_pos = bgp_packet_mpattr_start(s, afi, safi, mpattrlen_pos = bgp_packet_mpattr_start(s, afi, safi,
(peer_cap_enhe(peer) ? AFI_IP6 : afi), (peer_cap_enhe(peer) ? AFI_IP6 :
AFI_MAX), /* get from NH */
vecarr, attr); vecarr, attr);
bgp_packet_mpattr_prefix(s, afi, safi, p, prd, tag, bgp_packet_mpattr_prefix(s, afi, safi, p, prd, tag,
addpath_encode, addpath_tx_id); addpath_encode, addpath_tx_id);

View File

@ -1435,9 +1435,10 @@ subgroup_announce_check (struct bgp_info *ri, struct update_subgroup *subgrp,
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
#define NEXTHOP_IS_V6 (\ #define NEXTHOP_IS_V6 (\
(safi != SAFI_ENCAP && \ (safi != SAFI_ENCAP && safi != SAFI_MPLS_VPN &&\
(p->family == AF_INET6 || peer_cap_enhe(peer))) || \ (p->family == AF_INET6 || peer_cap_enhe(peer))) || \
(safi == SAFI_ENCAP && attr->extra->mp_nexthop_len == 16)) ((safi == SAFI_ENCAP || safi == SAFI_MPLS_VPN) &&\
attr->extra->mp_nexthop_len >= IPV6_MAX_BYTELEN))
/* IPv6/MP starts with 1 nexthop. The link-local address is passed only if /* IPv6/MP starts with 1 nexthop. The link-local address is passed only if
* the peer (group) is configured to receive link-local nexthop unchanged * the peer (group) is configured to receive link-local nexthop unchanged
@ -8161,12 +8162,13 @@ DEFUN (show_ip_bgp,
DEFUN (show_ip_bgp_ipv4, DEFUN (show_ip_bgp_ipv4,
show_ip_bgp_ipv4_cmd, show_ip_bgp_ipv4_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" {json}", "show ip bgp ipv4 (unicast|multicast) {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"JavaScript Object Notation\n") "JavaScript Object Notation\n")
{ {
u_char uj = use_json(argc, argv); u_char uj = use_json(argc, argv);
@ -8178,11 +8180,12 @@ DEFUN (show_ip_bgp_ipv4,
ALIAS (show_ip_bgp_ipv4, ALIAS (show_ip_bgp_ipv4,
show_bgp_ipv4_safi_cmd, show_bgp_ipv4_safi_cmd,
"show bgp ipv4 "BGP_SAFI_CMD_STR" {json}", "show bgp ipv4 (unicast|multicast) {json}",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"JavaScript Object Notation\n") "JavaScript Object Notation\n")
DEFUN (show_ip_bgp_route, DEFUN (show_ip_bgp_route,
@ -8636,11 +8639,12 @@ ALIAS (show_bgp,
DEFUN (show_bgp_ipv6_safi, DEFUN (show_bgp_ipv6_safi,
show_bgp_ipv6_safi_cmd, show_bgp_ipv6_safi_cmd,
"show bgp ipv6 "BGP_SAFI_CMD_STR" {json}", "show bgp ipv6 (unicast|multicast) {json}",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"JavaScript Object Notation\n") "JavaScript Object Notation\n")
{ {
u_char uj = use_json(argc, argv); u_char uj = use_json(argc, argv);
@ -9246,12 +9250,13 @@ ALIAS (show_ip_bgp_flap_regexp,
DEFUN (show_ip_bgp_ipv4_regexp, DEFUN (show_ip_bgp_ipv4_regexp,
show_ip_bgp_ipv4_regexp_cmd, show_ip_bgp_ipv4_regexp_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" regexp .LINE", "show ip bgp ipv4 (unicast|multicast) regexp .LINE",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the AS path regular expression\n" "Display routes matching the AS path regular expression\n"
"A regular-expression to match the BGP AS paths\n") "A regular-expression to match the BGP AS paths\n")
{ {
@ -9393,12 +9398,13 @@ ALIAS (show_ip_bgp_flap_prefix_list,
DEFUN (show_ip_bgp_ipv4_prefix_list, DEFUN (show_ip_bgp_ipv4_prefix_list,
show_ip_bgp_ipv4_prefix_list_cmd, show_ip_bgp_ipv4_prefix_list_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" prefix-list WORD", "show ip bgp ipv4 (unicast|multicast) prefix-list WORD",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes conforming to the prefix-list\n" "Display routes conforming to the prefix-list\n"
"IP prefix-list name\n") "IP prefix-list name\n")
{ {
@ -9539,12 +9545,13 @@ ALIAS (show_ip_bgp_flap_filter_list,
DEFUN (show_ip_bgp_ipv4_filter_list, DEFUN (show_ip_bgp_ipv4_filter_list,
show_ip_bgp_ipv4_filter_list_cmd, show_ip_bgp_ipv4_filter_list_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" filter-list WORD", "show ip bgp ipv4 (unicast|multicast) filter-list WORD",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes conforming to the filter-list\n" "Display routes conforming to the filter-list\n"
"Regular expression access list name\n") "Regular expression access list name\n")
{ {
@ -9622,12 +9629,13 @@ DEFUN (show_ip_bgp_dampening_info,
DEFUN (show_ip_bgp_ipv4_dampening_parameters, DEFUN (show_ip_bgp_ipv4_dampening_parameters,
show_ip_bgp_ipv4_dampening_parameters_cmd, show_ip_bgp_ipv4_dampening_parameters_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" dampening parameters", "show ip bgp ipv4 (unicast|multicast) dampening parameters",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display detailed information about dampening\n" "Display detailed information about dampening\n"
"Display detail of configured dampening parameters\n") "Display detail of configured dampening parameters\n")
{ {
@ -9639,12 +9647,13 @@ DEFUN (show_ip_bgp_ipv4_dampening_parameters,
DEFUN (show_ip_bgp_ipv4_dampening_flap_stats, DEFUN (show_ip_bgp_ipv4_dampening_flap_stats,
show_ip_bgp_ipv4_dampening_flap_stats_cmd, show_ip_bgp_ipv4_dampening_flap_stats_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" dampening flap-statistics", "show ip bgp ipv4 (unicast|multicast) dampening flap-statistics",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display detailed information about dampening\n" "Display detailed information about dampening\n"
"Display flap statistics of routes\n") "Display flap statistics of routes\n")
{ {
@ -9656,12 +9665,13 @@ DEFUN (show_ip_bgp_ipv4_dampening_flap_stats,
DEFUN (show_ip_bgp_ipv4_dampening_dampd_paths, DEFUN (show_ip_bgp_ipv4_dampening_dampd_paths,
show_ip_bgp_ipv4_dampening_dampd_paths_cmd, show_ip_bgp_ipv4_dampening_dampd_paths_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" dampening dampened-paths", "show ip bgp ipv4 (unicast|multicast) dampening dampened-paths",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display detailed information about dampening\n" "Display detailed information about dampening\n"
"Display paths suppressed due to dampening\n") "Display paths suppressed due to dampening\n")
{ {
@ -9750,12 +9760,13 @@ ALIAS (show_ip_bgp_flap_route_map,
DEFUN (show_ip_bgp_ipv4_route_map, DEFUN (show_ip_bgp_ipv4_route_map,
show_ip_bgp_ipv4_route_map_cmd, show_ip_bgp_ipv4_route_map_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" route-map WORD", "show ip bgp ipv4 (unicast|multicast) route-map WORD",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the route-map\n" "Display routes matching the route-map\n"
"A route-map to match on\n") "A route-map to match on\n")
{ {
@ -9823,12 +9834,13 @@ ALIAS (show_ip_bgp_flap_cidr_only,
DEFUN (show_ip_bgp_ipv4_cidr_only, DEFUN (show_ip_bgp_ipv4_cidr_only,
show_ip_bgp_ipv4_cidr_only_cmd, show_ip_bgp_ipv4_cidr_only_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" cidr-only", "show ip bgp ipv4 (unicast|multicast) cidr-only",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display only routes with non-natural netmasks\n") "Display only routes with non-natural netmasks\n")
{ {
safi_t safi; safi_t safi;
@ -9851,12 +9863,13 @@ DEFUN (show_ip_bgp_community_all,
DEFUN (show_ip_bgp_ipv4_community_all, DEFUN (show_ip_bgp_ipv4_community_all,
show_ip_bgp_ipv4_community_all_cmd, show_ip_bgp_ipv4_community_all_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community", "show ip bgp ipv4 (unicast|multicast) community",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n") "Display routes matching the communities\n")
{ {
safi_t safi; safi_t safi;
@ -10054,12 +10067,13 @@ ALIAS (show_ip_bgp_community,
DEFUN (show_ip_bgp_ipv4_community, DEFUN (show_ip_bgp_ipv4_community,
show_ip_bgp_ipv4_community_cmd, show_ip_bgp_ipv4_community_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export)", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -10073,12 +10087,13 @@ DEFUN (show_ip_bgp_ipv4_community,
ALIAS (show_ip_bgp_ipv4_community, ALIAS (show_ip_bgp_ipv4_community,
show_ip_bgp_ipv4_community2_cmd, show_ip_bgp_ipv4_community2_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -10091,12 +10106,13 @@ ALIAS (show_ip_bgp_ipv4_community,
ALIAS (show_ip_bgp_ipv4_community, ALIAS (show_ip_bgp_ipv4_community,
show_ip_bgp_ipv4_community3_cmd, show_ip_bgp_ipv4_community3_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -10113,12 +10129,13 @@ ALIAS (show_ip_bgp_ipv4_community,
ALIAS (show_ip_bgp_ipv4_community, ALIAS (show_ip_bgp_ipv4_community,
show_ip_bgp_ipv4_community4_cmd, show_ip_bgp_ipv4_community4_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -10139,11 +10156,14 @@ ALIAS (show_ip_bgp_ipv4_community,
DEFUN (show_bgp_instance_afi_safi_community_all, DEFUN (show_bgp_instance_afi_safi_community_all,
show_bgp_instance_afi_safi_community_all_cmd, show_bgp_instance_afi_safi_community_all_cmd,
"show bgp " BGP_INSTANCE_CMD " "BGP_AFI_SAFI_CMD_STR" community", "show bgp " BGP_INSTANCE_CMD " (ipv4|ipv6) (unicast|multicast) community",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
BGP_INSTANCE_HELP_STR BGP_INSTANCE_HELP_STR
BGP_AFI_SAFI_HELP_STR "Address family\n"
"Address family\n"
"Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n") "Display routes matching the communities\n")
{ {
int afi; int afi;
@ -10165,7 +10185,7 @@ DEFUN (show_bgp_instance_afi_safi_community_all,
DEFUN (show_bgp_instance_afi_safi_community, DEFUN (show_bgp_instance_afi_safi_community,
show_bgp_instance_afi_safi_community_cmd, show_bgp_instance_afi_safi_community_cmd,
"show bgp " BGP_INSTANCE_CMD " "BGP_AFI_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export)", "show bgp " BGP_INSTANCE_CMD " (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
BGP_INSTANCE_HELP_STR BGP_INSTANCE_HELP_STR
@ -10189,7 +10209,7 @@ DEFUN (show_bgp_instance_afi_safi_community,
ALIAS (show_bgp_instance_afi_safi_community, ALIAS (show_bgp_instance_afi_safi_community,
show_bgp_instance_afi_safi_community2_cmd, show_bgp_instance_afi_safi_community2_cmd,
"show bgp " BGP_INSTANCE_CMD " "BGP_AFI_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", "show bgp " BGP_INSTANCE_CMD " (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
BGP_INSTANCE_HELP_STR BGP_INSTANCE_HELP_STR
@ -10209,7 +10229,7 @@ ALIAS (show_bgp_instance_afi_safi_community,
ALIAS (show_bgp_instance_afi_safi_community, ALIAS (show_bgp_instance_afi_safi_community,
show_bgp_instance_afi_safi_community3_cmd, show_bgp_instance_afi_safi_community3_cmd,
"show bgp " BGP_INSTANCE_CMD " "BGP_AFI_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", "show bgp " BGP_INSTANCE_CMD " (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
BGP_INSTANCE_HELP_STR BGP_INSTANCE_HELP_STR
@ -10233,7 +10253,7 @@ ALIAS (show_bgp_instance_afi_safi_community,
ALIAS (show_bgp_instance_afi_safi_community, ALIAS (show_bgp_instance_afi_safi_community,
show_bgp_instance_afi_safi_community4_cmd, show_bgp_instance_afi_safi_community4_cmd,
"show bgp " BGP_INSTANCE_CMD " "BGP_AFI_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", "show bgp " BGP_INSTANCE_CMD " (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
BGP_INSTANCE_HELP_STR BGP_INSTANCE_HELP_STR
@ -10340,12 +10360,13 @@ ALIAS (show_ip_bgp_community_exact,
DEFUN (show_ip_bgp_ipv4_community_exact, DEFUN (show_ip_bgp_ipv4_community_exact,
show_ip_bgp_ipv4_community_exact_cmd, show_ip_bgp_ipv4_community_exact_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) exact-match", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) exact-match",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -10360,12 +10381,13 @@ DEFUN (show_ip_bgp_ipv4_community_exact,
ALIAS (show_ip_bgp_ipv4_community_exact, ALIAS (show_ip_bgp_ipv4_community_exact,
show_ip_bgp_ipv4_community2_exact_cmd, show_ip_bgp_ipv4_community2_exact_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -10379,12 +10401,13 @@ ALIAS (show_ip_bgp_ipv4_community_exact,
ALIAS (show_ip_bgp_ipv4_community_exact, ALIAS (show_ip_bgp_ipv4_community_exact,
show_ip_bgp_ipv4_community3_exact_cmd, show_ip_bgp_ipv4_community3_exact_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -10402,12 +10425,13 @@ ALIAS (show_ip_bgp_ipv4_community_exact,
ALIAS (show_ip_bgp_ipv4_community_exact, ALIAS (show_ip_bgp_ipv4_community_exact,
show_ip_bgp_ipv4_community4_exact_cmd, show_ip_bgp_ipv4_community4_exact_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the communities\n" "Display routes matching the communities\n"
COMMUNITY_AANN_STR COMMUNITY_AANN_STR
"Do not send outside local AS (well-known community)\n" "Do not send outside local AS (well-known community)\n"
@ -11107,12 +11131,13 @@ DEFUN (show_ip_bgp_instance_community_list,
DEFUN (show_ip_bgp_ipv4_community_list, DEFUN (show_ip_bgp_ipv4_community_list,
show_ip_bgp_ipv4_community_list_cmd, show_ip_bgp_ipv4_community_list_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community-list (<1-500>|WORD)", "show ip bgp ipv4 (unicast|multicast) community-list (<1-500>|WORD)",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the community-list\n" "Display routes matching the community-list\n"
"community-list number\n" "community-list number\n"
"community-list name\n") "community-list name\n")
@ -11138,12 +11163,13 @@ DEFUN (show_ip_bgp_community_list_exact,
DEFUN (show_ip_bgp_ipv4_community_list_exact, DEFUN (show_ip_bgp_ipv4_community_list_exact,
show_ip_bgp_ipv4_community_list_exact_cmd, show_ip_bgp_ipv4_community_list_exact_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" community-list (<1-500>|WORD) exact-match", "show ip bgp ipv4 (unicast|multicast) community-list (<1-500>|WORD) exact-match",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Display routes matching the community-list\n" "Display routes matching the community-list\n"
"community-list number\n" "community-list number\n"
"community-list name\n" "community-list name\n"
@ -11343,12 +11369,13 @@ ALIAS (show_ip_bgp_flap_prefix_longer,
DEFUN (show_ip_bgp_ipv4_prefix_longer, DEFUN (show_ip_bgp_ipv4_prefix_longer,
show_ip_bgp_ipv4_prefix_longer_cmd, show_ip_bgp_ipv4_prefix_longer_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" A.B.C.D/M longer-prefixes", "show ip bgp ipv4 (unicast|multicast) A.B.C.D/M longer-prefixes",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n" "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
"Display route and more specific routes\n") "Display route and more specific routes\n")
{ {
@ -11840,7 +11867,7 @@ DEFUN (show_bgp_statistics,
"show bgp "BGP_AFI_SAFI_CMD_STR" statistics", "show bgp "BGP_AFI_SAFI_CMD_STR" statistics",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
BGP_INSTANCE_HELP_STR BGP_AFI_SAFI_HELP_STR
"BGP RIB advertisement statistics\n") "BGP RIB advertisement statistics\n")
{ {
return bgp_table_stats_vty (vty, NULL, argv[0], argv[1]); return bgp_table_stats_vty (vty, NULL, argv[0], argv[1]);
@ -12145,12 +12172,13 @@ DEFUN (show_bgp_instance_ipv6_neighbor_prefix_counts,
DEFUN (show_ip_bgp_ipv4_neighbor_prefix_counts, DEFUN (show_ip_bgp_ipv4_neighbor_prefix_counts,
show_ip_bgp_ipv4_neighbor_prefix_counts_cmd, show_ip_bgp_ipv4_neighbor_prefix_counts_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) prefix-counts {json}", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) prefix-counts {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
@ -12495,12 +12523,13 @@ ALIAS (show_ip_bgp_instance_neighbor_advertised_route,
"JavaScript Object Notation\n") "JavaScript Object Notation\n")
DEFUN (show_ip_bgp_ipv4_neighbor_advertised_route, DEFUN (show_ip_bgp_ipv4_neighbor_advertised_route,
show_ip_bgp_ipv4_neighbor_advertised_route_cmd, show_ip_bgp_ipv4_neighbor_advertised_route_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes {json}", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
@ -12527,12 +12556,13 @@ DEFUN (show_ip_bgp_ipv4_neighbor_advertised_route,
ALIAS (show_ip_bgp_ipv4_neighbor_advertised_route, ALIAS (show_ip_bgp_ipv4_neighbor_advertised_route,
show_ip_bgp_ipv4_neighbor_advertised_route_rmap_cmd, show_ip_bgp_ipv4_neighbor_advertised_route_rmap_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes route-map WORD {json}", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes route-map WORD {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
@ -12784,12 +12814,13 @@ ALIAS (show_ip_bgp_instance_neighbor_received_routes,
DEFUN (show_ip_bgp_ipv4_neighbor_received_routes, DEFUN (show_ip_bgp_ipv4_neighbor_received_routes,
show_ip_bgp_ipv4_neighbor_received_routes_cmd, show_ip_bgp_ipv4_neighbor_received_routes_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) received-routes {json}", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) received-routes {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
@ -12815,12 +12846,13 @@ DEFUN (show_ip_bgp_ipv4_neighbor_received_routes,
ALIAS (show_ip_bgp_ipv4_neighbor_received_routes, ALIAS (show_ip_bgp_ipv4_neighbor_received_routes,
show_ip_bgp_ipv4_neighbor_received_routes_rmap_cmd, show_ip_bgp_ipv4_neighbor_received_routes_rmap_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) received-routes route-map WORD {json}", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) received-routes route-map WORD {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
@ -12830,11 +12862,14 @@ ALIAS (show_ip_bgp_ipv4_neighbor_received_routes,
DEFUN (show_bgp_instance_afi_safi_neighbor_adv_recd_routes, DEFUN (show_bgp_instance_afi_safi_neighbor_adv_recd_routes,
show_bgp_instance_afi_safi_neighbor_adv_recd_routes_cmd, show_bgp_instance_afi_safi_neighbor_adv_recd_routes_cmd,
"show bgp " BGP_INSTANCE_CMD " "BGP_AFI_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) (advertised-routes|received-routes) {json}", "show bgp " BGP_INSTANCE_CMD " (ipv4|ipv6) (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) (advertised-routes|received-routes) {json}",
SHOW_STR SHOW_STR
BGP_STR BGP_STR
BGP_INSTANCE_HELP_STR BGP_INSTANCE_HELP_STR
BGP_AFI_SAFI_HELP_STR "Address family\n"
"Address family\n"
"Address family modifier\n"
"Address family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
@ -12950,12 +12985,13 @@ DEFUN (show_ip_bgp_neighbor_received_prefix_filter,
DEFUN (show_ip_bgp_ipv4_neighbor_received_prefix_filter, DEFUN (show_ip_bgp_ipv4_neighbor_received_prefix_filter,
show_ip_bgp_ipv4_neighbor_received_prefix_filter_cmd, show_ip_bgp_ipv4_neighbor_received_prefix_filter_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) received prefix-filter {json}", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) received prefix-filter {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
@ -13450,12 +13486,13 @@ DEFUN (show_ip_bgp_neighbor_damp,
DEFUN (show_ip_bgp_ipv4_neighbor_routes, DEFUN (show_ip_bgp_ipv4_neighbor_routes,
show_ip_bgp_ipv4_neighbor_routes_cmd, show_ip_bgp_ipv4_neighbor_routes_cmd,
"show ip bgp ipv4 "BGP_SAFI_CMD_STR" neighbors (A.B.C.D|X:X::X:X|WORD) routes {json}", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) routes {json}",
SHOW_STR SHOW_STR
IP_STR IP_STR
BGP_STR BGP_STR
"Address family\n" "Address family\n"
BGP_SAFI_HELP_STR "Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n" "Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor to display information about\n" "Neighbor to display information about\n"

View File

@ -179,6 +179,10 @@ struct bgp_static
u_char tag[3]; u_char tag[3];
}; };
#define BGP_NEXTHOP_AFI_FROM_NHLEN(nhlen) \
((nhlen) < IPV4_MAX_BYTELEN ? 0 : \
((nhlen) < IPV6_MAX_BYTELEN ? AFI_IP : AFI_IP6))
#define BGP_ATTR_NEXTHOP_AFI_IP6(attr) \ #define BGP_ATTR_NEXTHOP_AFI_IP6(attr) \
(! CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP)) && \ (! CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP)) && \
(attr)->extra && ((attr)->extra->mp_nexthop_len == 16 || \ (attr)->extra && ((attr)->extra->mp_nexthop_len == 16 || \

View File

@ -418,10 +418,20 @@ bpacket_reformat_for_peer (struct bpacket *pkt, struct peer_af *paf)
if (CHECK_FLAG (vec->flags, BPKT_ATTRVEC_FLAGS_UPDATED)) if (CHECK_FLAG (vec->flags, BPKT_ATTRVEC_FLAGS_UPDATED))
{ {
u_int8_t nhlen; u_int8_t nhlen;
afi_t nhafi = AFI_MAX; /* NH AFI is based on nhlen! */
int route_map_sets_nh; int route_map_sets_nh;
nhlen = stream_getc_from (s, vec->offset); nhlen = stream_getc_from (s, vec->offset);
if (paf->afi == AFI_IP || paf->afi == AFI_IP6)
{
nhafi = BGP_NEXTHOP_AFI_FROM_NHLEN(nhlen);
if (peer_cap_enhe(peer))
nhafi = AFI_IP6;
if (paf->safi == SAFI_MPLS_VPN && /* if VPN && not global */
nhlen != BGP_ATTR_NHLEN_VPNV6_GLOBAL_AND_LL)
nhafi = AFI_MAX; /* no change allowed */
}
if (paf->afi == AFI_IP && !peer_cap_enhe(peer)) if (nhafi == AFI_IP)
{ {
struct in_addr v4nh, *mod_v4nh; struct in_addr v4nh, *mod_v4nh;
int nh_modified = 0; int nh_modified = 0;
@ -462,23 +472,24 @@ bpacket_reformat_for_peer (struct bpacket *pkt, struct peer_af *paf)
(bgp_multiaccess_check_v4 (v4nh, peer) == 0) && (bgp_multiaccess_check_v4 (v4nh, peer) == 0) &&
!CHECK_FLAG(vec->flags, !CHECK_FLAG(vec->flags,
BPKT_ATTRVEC_FLAGS_RMAP_NH_UNCHANGED) && BPKT_ATTRVEC_FLAGS_RMAP_NH_UNCHANGED) &&
!peer_af_flag_check (peer, paf->afi, paf->safi, !peer_af_flag_check (peer, nhafi, paf->safi,
PEER_FLAG_NEXTHOP_UNCHANGED)) PEER_FLAG_NEXTHOP_UNCHANGED))
{ {
/* NOTE: not handling case where NH has new AFI */
mod_v4nh = &peer->nexthop.v4; mod_v4nh = &peer->nexthop.v4;
nh_modified = 1; nh_modified = 1;
} }
if (nh_modified) if (nh_modified) /* allow for VPN RD */
stream_put_in_addr_at (s, vec->offset + 1, mod_v4nh); stream_put_in_addr_at (s, vec->offset + 1 + nhlen - 4, mod_v4nh);
if (bgp_debug_update(peer, NULL, NULL, 0)) if (bgp_debug_update(peer, NULL, NULL, 0))
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " %s send UPDATE w/ nexthop %s", zlog_debug ("u%" PRIu64 ":s%" PRIu64 " %s send UPDATE w/ nexthop %s%s",
PAF_SUBGRP(paf)->update_group->id, PAF_SUBGRP(paf)->id, PAF_SUBGRP(paf)->update_group->id, PAF_SUBGRP(paf)->id,
peer->host, inet_ntoa (*mod_v4nh)); peer->host, inet_ntoa (*mod_v4nh),
(nhlen == 12 ? " and RD" : ""));
} }
else if (paf->afi == AFI_IP6 || peer_cap_enhe(peer)) else if (nhafi == AFI_IP6)
{ {
struct in6_addr v6nhglobal, *mod_v6nhg; struct in6_addr v6nhglobal, *mod_v6nhg;
struct in6_addr v6nhlocal, *mod_v6nhl; struct in6_addr v6nhlocal, *mod_v6nhl;
@ -515,17 +526,18 @@ bpacket_reformat_for_peer (struct bpacket *pkt, struct peer_af *paf)
else if (peer->sort == BGP_PEER_EBGP && else if (peer->sort == BGP_PEER_EBGP &&
!CHECK_FLAG(vec->flags, !CHECK_FLAG(vec->flags,
BPKT_ATTRVEC_FLAGS_RMAP_NH_UNCHANGED) && BPKT_ATTRVEC_FLAGS_RMAP_NH_UNCHANGED) &&
!peer_af_flag_check (peer, paf->afi, paf->safi, !peer_af_flag_check (peer, nhafi, paf->safi,
PEER_FLAG_NEXTHOP_UNCHANGED)) PEER_FLAG_NEXTHOP_UNCHANGED))
{ {
/* NOTE: not handling case where NH has new AFI */
mod_v6nhg = &peer->nexthop.v6_global; mod_v6nhg = &peer->nexthop.v6_global;
gnh_modified = 1; gnh_modified = 1;
} }
if (nhlen == 32) if (nhlen == 32 || nhlen == 48) /* 48 == VPN */
{ {
stream_get_from (&v6nhlocal, s, vec->offset + 1 + 16, 16); stream_get_from (&v6nhlocal, s, vec->offset + 1 + (nhlen-IPV6_MAX_BYTELEN), IPV6_MAX_BYTELEN);
if (IN6_IS_ADDR_UNSPECIFIED (&v6nhlocal)) if (IN6_IS_ADDR_UNSPECIFIED (&v6nhlocal))
{ {
mod_v6nhl = &peer->nexthop.v6_local; mod_v6nhl = &peer->nexthop.v6_local;
@ -534,25 +546,27 @@ bpacket_reformat_for_peer (struct bpacket *pkt, struct peer_af *paf)
} }
if (gnh_modified) if (gnh_modified)
stream_put_in6_addr_at (s, vec->offset + 1, mod_v6nhg); stream_put_in6_addr_at (s, vec->offset + 1 + (nhlen-IPV6_MAX_BYTELEN), mod_v6nhg);
if (lnh_modified) if (lnh_modified)
stream_put_in6_addr_at (s, vec->offset + 1 + 16, mod_v6nhl); stream_put_in6_addr_at (s, vec->offset + 1 + (nhlen-IPV6_MAX_BYTELEN), mod_v6nhl);
if (bgp_debug_update(peer, NULL, NULL, 0)) if (bgp_debug_update(peer, NULL, NULL, 0))
{ {
if (nhlen == 32) if (nhlen == 32 || nhlen == 48)
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " %s send UPDATE w/ mp_nexthops %s, %s", zlog_debug ("u%" PRIu64 ":s%" PRIu64 " %s send UPDATE w/ mp_nexthops %s, %s%s",
PAF_SUBGRP(paf)->update_group->id, PAF_SUBGRP(paf)->update_group->id,
PAF_SUBGRP(paf)->id, PAF_SUBGRP(paf)->id,
peer->host, peer->host,
inet_ntop (AF_INET6, mod_v6nhg, buf, BUFSIZ), inet_ntop (AF_INET6, mod_v6nhg, buf, BUFSIZ),
inet_ntop (AF_INET6, mod_v6nhl, buf2, BUFSIZ)); inet_ntop (AF_INET6, mod_v6nhl, buf2, BUFSIZ),
(nhlen == 48 ? " and RD" : ""));
else else
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " %s send UPDATE w/ mp_nexthop %s", zlog_debug ("u%" PRIu64 ":s%" PRIu64 " %s send UPDATE w/ mp_nexthop %s%s",
PAF_SUBGRP(paf)->update_group->id, PAF_SUBGRP(paf)->update_group->id,
PAF_SUBGRP(paf)->id, PAF_SUBGRP(paf)->id,
peer->host, peer->host,
inet_ntop (AF_INET6, mod_v6nhg, buf, BUFSIZ)); inet_ntop (AF_INET6, mod_v6nhg, buf, BUFSIZ),
(nhlen == 24 ? " and RD" : ""));
} }
} }
} }
@ -747,7 +761,8 @@ subgroup_update_packet (struct update_subgroup *subgrp)
if (stream_empty (snlri)) if (stream_empty (snlri))
mpattrlen_pos = bgp_packet_mpattr_start (snlri, afi, safi, mpattrlen_pos = bgp_packet_mpattr_start (snlri, afi, safi,
(peer_cap_enhe(peer) ? AFI_IP6 : afi), (peer_cap_enhe(peer) ? AFI_IP6 :
AFI_MAX), /* get from NH */
&vecarr, adv->baa->attr); &vecarr, adv->baa->attr);
bgp_packet_mpattr_prefix (snlri, afi, safi, &rn->p, prd, tag, bgp_packet_mpattr_prefix (snlri, afi, safi, &rn->p, prd, tag,
addpath_encode, addpath_tx_id); addpath_encode, addpath_tx_id);

View File

@ -7142,9 +7142,9 @@ bgp_config_write_family_header (struct vty *vty, afi_t afi, safi_t safi,
else if (safi == SAFI_MULTICAST) else if (safi == SAFI_MULTICAST)
vty_out (vty, "ipv4 multicast"); vty_out (vty, "ipv4 multicast");
else if (safi == SAFI_MPLS_VPN) else if (safi == SAFI_MPLS_VPN)
vty_out (vty, "vpnv4"); vty_out (vty, "ipv4 vpn");
else if (safi == SAFI_ENCAP) else if (safi == SAFI_ENCAP)
vty_out (vty, "encap"); vty_out (vty, "ipv4 encap");
} }
else if (afi == AFI_IP6) else if (afi == AFI_IP6)
{ {
@ -7153,9 +7153,9 @@ bgp_config_write_family_header (struct vty *vty, afi_t afi, safi_t safi,
else if (safi == SAFI_MULTICAST) else if (safi == SAFI_MULTICAST)
vty_out (vty, "ipv6 multicast"); vty_out (vty, "ipv6 multicast");
else if (safi == SAFI_MPLS_VPN) else if (safi == SAFI_MPLS_VPN)
vty_out (vty, "vpnv6"); vty_out (vty, "ipv6 vpn");
else if (safi == SAFI_ENCAP) else if (safi == SAFI_ENCAP)
vty_out (vty, "encapv6"); vty_out (vty, "ipv6 encap");
} }
vty_out (vty, "%s", VTY_NEWLINE); vty_out (vty, "%s", VTY_NEWLINE);

View File

@ -768,7 +768,6 @@ add_vnc_route (
bgp_attr_extra_free (&attr); bgp_attr_extra_free (&attr);
return; return;
} }
nexthop = un_addr; /* UN used as MPLS NLRI nexthop */
} }
if (local_pref) if (local_pref)
@ -2778,7 +2777,7 @@ rfapi_register (
NULL, NULL,
action == RFAPI_REGISTER_KILL); action == RFAPI_REGISTER_KILL);
if (0 == rfapiApDelete (bgp, rfd, &p, pfx_mac, &adv_tunnel)) if (0 == rfapiApDelete (bgp, rfd, &p, pfx_mac, &prd, &adv_tunnel))
{ {
if (adv_tunnel) if (adv_tunnel)
rfapiTunnelRouteAnnounce (bgp, rfd, &rfd->max_prefix_lifetime); rfapiTunnelRouteAnnounce (bgp, rfd, &rfd->max_prefix_lifetime);

View File

@ -103,12 +103,11 @@ sl_adb_lifetime_cmp (void *adb1, void *adb2)
return 0; return 0;
} }
void void
rfapiApInit (struct rfapi_advertised_prefixes *ap) rfapiApInit (struct rfapi_advertised_prefixes *ap)
{ {
ap->ipN_by_prefix = skiplist_new (0, vnc_prefix_cmp, NULL); ap->ipN_by_prefix = skiplist_new (0, rfapi_rib_key_cmp, NULL);
ap->ip0_by_ether = skiplist_new (0, vnc_prefix_cmp, NULL); ap->ip0_by_ether = skiplist_new (0, rfapi_rib_key_cmp, NULL);
ap->by_lifetime = skiplist_new (0, sl_adb_lifetime_cmp, NULL); ap->by_lifetime = skiplist_new (0, sl_adb_lifetime_cmp, NULL);
} }
@ -192,7 +191,7 @@ rfapiApReadvertiseAll (struct bgp *bgp, struct rfapi_descriptor *rfd)
* TBD this is not quite right. When pfx_ip is 0/32 or 0/128, * TBD this is not quite right. When pfx_ip is 0/32 or 0/128,
* we need to substitute the VN address as the prefix * we need to substitute the VN address as the prefix
*/ */
add_vnc_route (rfd, bgp, SAFI_MPLS_VPN, &adb->prefix_ip, &prd, /* RD to use (0 for ENCAP) */ add_vnc_route (rfd, bgp, SAFI_MPLS_VPN, &adb->u.s.prefix_ip, &prd, /* RD to use (0 for ENCAP) */
&rfd->vn_addr, /* nexthop */ &rfd->vn_addr, /* nexthop */
&local_pref, &adb->lifetime, NULL, NULL, /* struct rfapi_un_option */ &local_pref, &adb->lifetime, NULL, NULL, /* struct rfapi_un_option */
NULL, /* struct rfapi_vn_option */ NULL, /* struct rfapi_vn_option */
@ -221,11 +220,11 @@ rfapiApWithdrawAll (struct bgp *bgp, struct rfapi_descriptor *rfd)
struct prefix pfx_vn_buf; struct prefix pfx_vn_buf;
struct prefix *pfx_ip; struct prefix *pfx_ip;
if (!(RFAPI_0_PREFIX (&adb->prefix_ip) && if (!(RFAPI_0_PREFIX (&adb->u.s.prefix_ip) &&
RFAPI_HOST_PREFIX (&adb->prefix_ip))) RFAPI_HOST_PREFIX (&adb->u.s.prefix_ip)))
{ {
pfx_ip = &adb->prefix_ip; pfx_ip = &adb->u.s.prefix_ip;
} }
else else
@ -247,7 +246,7 @@ rfapiApWithdrawAll (struct bgp *bgp, struct rfapi_descriptor *rfd)
} }
} }
del_vnc_route (rfd, rfd->peer, bgp, SAFI_MPLS_VPN, pfx_ip ? pfx_ip : &pfx_vn_buf, &adb->prd, /* RD to use (0 for ENCAP) */ del_vnc_route (rfd, rfd->peer, bgp, SAFI_MPLS_VPN, pfx_ip ? pfx_ip : &pfx_vn_buf, &adb->u.s.prd, /* RD to use (0 for ENCAP) */
ZEBRA_ROUTE_BGP, BGP_ROUTE_RFP, NULL, 0); ZEBRA_ROUTE_BGP, BGP_ROUTE_RFP, NULL, 0);
} }
} }
@ -404,19 +403,19 @@ rfapiApAdjustLifetimeStats (
{ {
void *cursor; void *cursor;
struct prefix *prefix; struct rfapi_rib_key rk;
struct rfapi_adb *adb; struct rfapi_adb *adb;
int rc; int rc;
vnc_zlog_debug_verbose ("%s: walking to find new min/max", __func__); vnc_zlog_debug_verbose ("%s: walking to find new min/max", __func__);
cursor = NULL; cursor = NULL;
for (rc = skiplist_next (rfd->advertised.ipN_by_prefix, for (rc = skiplist_next (rfd->advertised.ipN_by_prefix,
(void **) &prefix, (void **) &adb, (void **) &rk, (void **) &adb,
&cursor); !rc; &cursor); !rc;
rc = rc =
skiplist_next (rfd->advertised.ipN_by_prefix, skiplist_next (rfd->advertised.ipN_by_prefix,
(void **) &prefix, (void **) &adb, &cursor)) (void **) &rk, (void **) &adb, &cursor))
{ {
uint32_t lt = adb->lifetime; uint32_t lt = adb->lifetime;
@ -428,10 +427,10 @@ rfapiApAdjustLifetimeStats (
} }
cursor = NULL; cursor = NULL;
for (rc = skiplist_next (rfd->advertised.ip0_by_ether, for (rc = skiplist_next (rfd->advertised.ip0_by_ether,
(void **) &prefix, (void **) &adb, (void **) &rk, (void **) &adb,
&cursor); !rc; &cursor); !rc;
rc = rc =
skiplist_next (rfd->advertised.ip0_by_ether, (void **) &prefix, skiplist_next (rfd->advertised.ip0_by_ether, (void **) &rk,
(void **) &adb, &cursor)) (void **) &adb, &cursor))
{ {
@ -483,14 +482,15 @@ rfapiApAdd (
struct rfapi_adb *adb; struct rfapi_adb *adb;
uint32_t old_lifetime = 0; uint32_t old_lifetime = 0;
int use_ip0 = 0; int use_ip0 = 0;
struct rfapi_rib_key rk;
rfapi_rib_key_init(pfx_ip, prd, pfx_eth, &rk);
if (RFAPI_0_PREFIX (pfx_ip) && RFAPI_HOST_PREFIX (pfx_ip)) if (RFAPI_0_PREFIX (pfx_ip) && RFAPI_HOST_PREFIX (pfx_ip))
{ {
use_ip0 = 1; use_ip0 = 1;
assert (pfx_eth); assert (pfx_eth);
rc = rc =
skiplist_search (rfd->advertised.ip0_by_ether, pfx_eth, skiplist_search (rfd->advertised.ip0_by_ether, &rk,
(void **) &adb); (void **) &adb);
} }
@ -499,7 +499,7 @@ rfapiApAdd (
/* find prefix in advertised prefixes list */ /* find prefix in advertised prefixes list */
rc = rc =
skiplist_search (rfd->advertised.ipN_by_prefix, pfx_ip, skiplist_search (rfd->advertised.ipN_by_prefix, &rk,
(void **) &adb); (void **) &adb);
} }
@ -510,19 +510,17 @@ rfapiApAdd (
adb = XCALLOC (MTYPE_RFAPI_ADB, sizeof (struct rfapi_adb)); adb = XCALLOC (MTYPE_RFAPI_ADB, sizeof (struct rfapi_adb));
assert (adb); assert (adb);
adb->lifetime = lifetime; adb->lifetime = lifetime;
adb->prefix_ip = *pfx_ip; adb->u.key = rk;
if (pfx_eth)
adb->prefix_eth = *pfx_eth;
if (use_ip0) if (use_ip0)
{ {
assert (pfx_eth); assert (pfx_eth);
skiplist_insert (rfd->advertised.ip0_by_ether, &adb->prefix_eth, skiplist_insert (rfd->advertised.ip0_by_ether, &adb->u.key,
adb); adb);
} }
else else
{ {
skiplist_insert (rfd->advertised.ipN_by_prefix, &adb->prefix_ip, skiplist_insert (rfd->advertised.ipN_by_prefix, &adb->u.key,
adb); adb);
} }
@ -537,19 +535,12 @@ rfapiApAdd (
adb->lifetime = lifetime; adb->lifetime = lifetime;
assert (!skiplist_insert (rfd->advertised.by_lifetime, adb, adb)); assert (!skiplist_insert (rfd->advertised.by_lifetime, adb, adb));
} }
if (!use_ip0 && pfx_eth && prefix_cmp (&adb->prefix_eth, pfx_eth))
{
/* mac address changed */
adb->prefix_eth = *pfx_eth;
}
} }
adb->cost = cost; adb->cost = cost;
if (l2o) if (l2o)
adb->l2o = *l2o; adb->l2o = *l2o;
else else
memset (&adb->l2o, 0, sizeof (struct rfapi_l2address_option)); memset (&adb->l2o, 0, sizeof (struct rfapi_l2address_option));
adb->prd = *prd;
if (rfapiApAdjustLifetimeStats if (rfapiApAdjustLifetimeStats
(rfd, (rc ? NULL : &old_lifetime), &lifetime)) (rfd, (rc ? NULL : &old_lifetime), &lifetime))
@ -568,16 +559,19 @@ rfapiApDelete (
struct rfapi_descriptor *rfd, struct rfapi_descriptor *rfd,
struct prefix *pfx_ip, struct prefix *pfx_ip,
struct prefix *pfx_eth, struct prefix *pfx_eth,
struct prefix_rd *prd,
int *advertise_tunnel) /* out */ int *advertise_tunnel) /* out */
{ {
int rc; int rc;
struct rfapi_adb *adb; struct rfapi_adb *adb;
uint32_t old_lifetime; uint32_t old_lifetime;
int use_ip0 = 0; int use_ip0 = 0;
struct rfapi_rib_key rk;
if (advertise_tunnel) if (advertise_tunnel)
*advertise_tunnel = 0; *advertise_tunnel = 0;
rfapi_rib_key_init(pfx_ip, prd, pfx_eth, &rk);
/* find prefix in advertised prefixes list */ /* find prefix in advertised prefixes list */
if (RFAPI_0_PREFIX (pfx_ip) && RFAPI_HOST_PREFIX (pfx_ip)) if (RFAPI_0_PREFIX (pfx_ip) && RFAPI_HOST_PREFIX (pfx_ip))
{ {
@ -585,7 +579,7 @@ rfapiApDelete (
assert (pfx_eth); assert (pfx_eth);
rc = rc =
skiplist_search (rfd->advertised.ip0_by_ether, pfx_eth, skiplist_search (rfd->advertised.ip0_by_ether, &rk,
(void **) &adb); (void **) &adb);
} }
@ -594,7 +588,7 @@ rfapiApDelete (
/* find prefix in advertised prefixes list */ /* find prefix in advertised prefixes list */
rc = rc =
skiplist_search (rfd->advertised.ipN_by_prefix, pfx_ip, skiplist_search (rfd->advertised.ipN_by_prefix, &rk,
(void **) &adb); (void **) &adb);
} }
@ -607,11 +601,11 @@ rfapiApDelete (
if (use_ip0) if (use_ip0)
{ {
rc = skiplist_delete (rfd->advertised.ip0_by_ether, pfx_eth, NULL); rc = skiplist_delete (rfd->advertised.ip0_by_ether, &rk, NULL);
} }
else else
{ {
rc = skiplist_delete (rfd->advertised.ipN_by_prefix, pfx_ip, NULL); rc = skiplist_delete (rfd->advertised.ipN_by_prefix, &rk, NULL);
} }
assert (!rc); assert (!rc);

View File

@ -93,6 +93,7 @@ rfapiApDelete (
struct rfapi_descriptor *rfd, struct rfapi_descriptor *rfd,
struct prefix *pfx_ip, struct prefix *pfx_ip,
struct prefix *pfx_eth, struct prefix *pfx_eth,
struct prefix_rd *prd,
int *advertise_tunnel); /* out */ int *advertise_tunnel); /* out */

View File

@ -131,8 +131,7 @@ rfapi_tunneltype_option_to_tlv (
break; break;
case BGP_ENCAP_TYPE_MPLS: case BGP_ENCAP_TYPE_MPLS:
_RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (mpls); /* nothing to do for MPLS */
bgp_encap_type_mpls_to_tlv (&tto->bgpinfo.mpls, attr);
break; break;
case BGP_ENCAP_TYPE_MPLS_IN_GRE: case BGP_ENCAP_TYPE_MPLS_IN_GRE:

View File

@ -423,10 +423,7 @@ rfapiGetVncTunnelUnAddr (struct attr *attr, struct prefix *p)
rfapiGetTunnelType (attr, &tun_type); rfapiGetTunnelType (attr, &tun_type);
if (p && tun_type == BGP_ENCAP_TYPE_MPLS) if (p && tun_type == BGP_ENCAP_TYPE_MPLS)
{ {
/* MPLS carries UN address in next hop */ return ENOENT; /* no UN for MPLS */
rfapiNexthop2Prefix (attr, p);
if (p->family != 0)
return 0;
} }
if (attr && attr->extra) if (attr && attr->extra)
{ {

View File

@ -34,21 +34,6 @@
#include "rfapi.h" #include "rfapi.h"
/*
* RFAPI Advertisement Data Block
*
* Holds NVE prefix advertisement information
*/
struct rfapi_adb
{
struct prefix prefix_ip;
struct prefix prefix_eth; /* now redundant with l2o */
struct prefix_rd prd;
uint32_t lifetime;
uint8_t cost;
struct rfapi_l2address_option l2o;
};
/* /*
* Lists of rfapi_adb. Each rfapi_adb is referenced twice: * Lists of rfapi_adb. Each rfapi_adb is referenced twice:
* *
@ -62,7 +47,6 @@ struct rfapi_advertised_prefixes
struct skiplist *by_lifetime; /* all */ struct skiplist *by_lifetime; /* all */
}; };
struct rfapi_descriptor struct rfapi_descriptor
{ {
struct route_node *un_node; /* backref to un table */ struct route_node *un_node; /* backref to un table */
@ -378,9 +362,6 @@ rfp_cost_to_localpref (uint8_t cost);
extern int extern int
rfapi_set_autord_from_vn (struct prefix_rd *rd, struct rfapi_ip_addr *vn); rfapi_set_autord_from_vn (struct prefix_rd *rd, struct rfapi_ip_addr *vn);
extern void
rfapiAdbFree (struct rfapi_adb *adb);
extern struct rfapi_nexthop * extern struct rfapi_nexthop *
rfapi_nexthop_new (struct rfapi_nexthop *copyme); rfapi_nexthop_new (struct rfapi_nexthop *copyme);

View File

@ -405,10 +405,26 @@ rfapiRibStartTimer (
assert (ri->timer); assert (ri->timer);
} }
extern void
rfapi_rib_key_init (struct prefix *prefix, /* may be NULL */
struct prefix_rd *rd, /* may be NULL */
struct prefix *aux, /* may be NULL */
struct rfapi_rib_key *rk)
{
memset((void *)rk, 0, sizeof(struct rfapi_rib_key));
if (prefix)
rk->vn = *prefix;
if (rd)
rk->rd = *rd;
if (aux)
rk->aux_prefix = *aux;
}
/* /*
* Compares two <struct rfapi_rib_key>s * Compares two <struct rfapi_rib_key>s
*/ */
static int int
rfapi_rib_key_cmp (void *k1, void *k2) rfapi_rib_key_cmp (void *k1, void *k2)
{ {
struct rfapi_rib_key *a = (struct rfapi_rib_key *) k1; struct rfapi_rib_key *a = (struct rfapi_rib_key *) k1;

View File

@ -45,6 +45,27 @@ struct rfapi_rib_key
*/ */
struct prefix aux_prefix; struct prefix aux_prefix;
}; };
#include "rfapi.h"
/*
* RFAPI Advertisement Data Block
*
* Holds NVE prefix advertisement information
*/
struct rfapi_adb
{
union {
struct {
struct prefix prefix_ip;
struct prefix_rd prd;
struct prefix prefix_eth;
} s; /* mainly for legacy use */
struct rfapi_rib_key key;
} u;
uint32_t lifetime;
uint8_t cost;
struct rfapi_l2address_option l2o;
};
struct rfapi_info struct rfapi_info
{ {
@ -151,4 +172,16 @@ rfapiRibCheckCounts (
#define RFAPI_RIB_CHECK_COUNTS(checkstats, offset) #define RFAPI_RIB_CHECK_COUNTS(checkstats, offset)
#endif #endif
extern void
rfapi_rib_key_init (struct prefix *prefix, /* may be NULL */
struct prefix_rd *rd, /* may be NULL */
struct prefix *aux, /* may be NULL */
struct rfapi_rib_key *rk);
extern int
rfapi_rib_key_cmp (void *k1, void *k2);
extern void
rfapiAdbFree (struct rfapi_adb *adb);
#endif /* QUAGGA_HGP_RFAPI_RIB_H */ #endif /* QUAGGA_HGP_RFAPI_RIB_H */

View File

@ -490,14 +490,7 @@ rfapi_vty_out_vncinfo (
if (bi->extra != NULL) if (bi->extra != NULL)
vty_out (vty, " label=%u", decode_label (bi->extra->tag)); vty_out (vty, " label=%u", decode_label (bi->extra->tag));
if (rfapiGetVncLifetime (bi->attr, &lifetime)) if (!rfapiGetVncLifetime (bi->attr, &lifetime))
{
if (safi == SAFI_MPLS_VPN || safi == SAFI_ENCAP)
{
vty_out (vty, " life=none");
}
}
else
{ {
vty_out (vty, " life=%d", lifetime); vty_out (vty, " life=%d", lifetime);
} }
@ -1853,14 +1846,14 @@ rfapiPrintDescriptor (struct vty *vty, struct rfapi_descriptor *rfd)
{ {
/* group like family prefixes together in output */ /* group like family prefixes together in output */
if (family != adb->prefix_ip.family) if (family != adb->u.s.prefix_ip.family)
continue; continue;
prefix2str (&adb->prefix_ip, buf, BUFSIZ); prefix2str (&adb->u.s.prefix_ip, buf, BUFSIZ);
buf[BUFSIZ - 1] = 0; /* guarantee NUL-terminated */ buf[BUFSIZ - 1] = 0; /* guarantee NUL-terminated */
vty_out (vty, " Adv Pfx: %s%s", buf, HVTY_NEWLINE); vty_out (vty, " Adv Pfx: %s%s", buf, HVTY_NEWLINE);
rfapiPrintAdvertisedInfo (vty, rfd, SAFI_MPLS_VPN, &adb->prefix_ip); rfapiPrintAdvertisedInfo (vty, rfd, SAFI_MPLS_VPN, &adb->u.s.prefix_ip);
} }
} }
for (rc = for (rc =
@ -1871,14 +1864,14 @@ rfapiPrintDescriptor (struct vty *vty, struct rfapi_descriptor *rfd)
&cursor)) &cursor))
{ {
prefix2str (&adb->prefix_eth, buf, BUFSIZ); prefix2str (&adb->u.s.prefix_eth, buf, BUFSIZ);
buf[BUFSIZ - 1] = 0; /* guarantee NUL-terminated */ buf[BUFSIZ - 1] = 0; /* guarantee NUL-terminated */
vty_out (vty, " Adv Pfx: %s%s", buf, HVTY_NEWLINE); vty_out (vty, " Adv Pfx: %s%s", buf, HVTY_NEWLINE);
/* TBD update the following function to print ethernet info */ /* TBD update the following function to print ethernet info */
/* Also need to pass/use rd */ /* Also need to pass/use rd */
rfapiPrintAdvertisedInfo (vty, rfd, SAFI_MPLS_VPN, &adb->prefix_ip); rfapiPrintAdvertisedInfo (vty, rfd, SAFI_MPLS_VPN, &adb->u.s.prefix_ip);
} }
vty_out (vty, "%s", HVTY_NEWLINE); vty_out (vty, "%s", HVTY_NEWLINE);
} }
@ -3370,7 +3363,7 @@ rfapiDeleteLocalPrefixes (struct rfapi_local_reg_delete_arg *cda)
if (pPrefix) if (pPrefix)
{ {
if (!prefix_same (pPrefix, &adb->prefix_ip)) if (!prefix_same (pPrefix, &adb->u.s.prefix_ip))
{ {
#if DEBUG_L2_EXTRA #if DEBUG_L2_EXTRA
vnc_zlog_debug_verbose ("%s: adb=%p, prefix doesn't match, skipping", vnc_zlog_debug_verbose ("%s: adb=%p, prefix doesn't match, skipping",
@ -3383,7 +3376,7 @@ rfapiDeleteLocalPrefixes (struct rfapi_local_reg_delete_arg *cda)
{ {
if (memcmp if (memcmp
(cda->l2o.o.macaddr.octet, (cda->l2o.o.macaddr.octet,
adb->prefix_eth.u.prefix_eth.octet, ETHER_ADDR_LEN)) adb->u.s.prefix_eth.u.prefix_eth.octet, ETHER_ADDR_LEN))
{ {
#if DEBUG_L2_EXTRA #if DEBUG_L2_EXTRA
vnc_zlog_debug_verbose ("%s: adb=%p, macaddr doesn't match, skipping", vnc_zlog_debug_verbose ("%s: adb=%p, macaddr doesn't match, skipping",
@ -3425,24 +3418,23 @@ rfapiDeleteLocalPrefixes (struct rfapi_local_reg_delete_arg *cda)
this_advertisement_prefix_count = 1; this_advertisement_prefix_count = 1;
rfapiQprefix2Rprefix (&adb->prefix_ip, &rp); rfapiQprefix2Rprefix (&adb->u.s.prefix_ip, &rp);
/* if mac addr present in advert, make l2o vn option */ /* if mac addr present in advert, make l2o vn option */
if (adb->prefix_eth.family == AF_ETHERNET) if (adb->u.s.prefix_eth.family == AF_ETHERNET)
{ {
memset (&vn1, 0, sizeof (vn1)); memset (&vn1, 0, sizeof (vn1));
memset (&vn2, 0, sizeof (vn2)); memset (&vn2, 0, sizeof (vn2));
vn1.type = RFAPI_VN_OPTION_TYPE_L2ADDR; vn1.type = RFAPI_VN_OPTION_TYPE_L2ADDR;
vn1.v.l2addr.macaddr = adb->prefix_eth.u.prefix_eth; vn1.v.l2addr.macaddr = adb->u.s.prefix_eth.u.prefix_eth;
/* /*
* use saved RD value instead of trying to invert * use saved RD value instead of trying to invert
* complex L2-style RD computation in rfapi_register() * complex L2-style RD computation in rfapi_register()
*/ */
vn2.type = RFAPI_VN_OPTION_TYPE_INTERNAL_RD; vn2.type = RFAPI_VN_OPTION_TYPE_INTERNAL_RD;
vn2.v.internal_rd = adb->prd; vn2.v.internal_rd = adb->u.s.prd;
vn1.next = &vn2; vn1.next = &vn2;
@ -3494,7 +3486,7 @@ rfapiDeleteLocalPrefixes (struct rfapi_local_reg_delete_arg *cda)
if (CHECK_FLAG (cda->l2o.flags, RFAPI_L2O_MACADDR)) if (CHECK_FLAG (cda->l2o.flags, RFAPI_L2O_MACADDR))
{ {
if (memcmp (cda->l2o.o.macaddr.octet, if (memcmp (cda->l2o.o.macaddr.octet,
adb->prefix_eth.u.prefix_eth.octet, adb->u.s.prefix_eth.u.prefix_eth.octet,
ETHER_ADDR_LEN)) ETHER_ADDR_LEN))
{ {
@ -3521,7 +3513,7 @@ rfapiDeleteLocalPrefixes (struct rfapi_local_reg_delete_arg *cda)
struct rfapi_vn_option vn; struct rfapi_vn_option vn;
rfapiQprefix2Rprefix (&adb->prefix_ip, &rp); rfapiQprefix2Rprefix (&adb->u.s.prefix_ip, &rp);
memset (&vn, 0, sizeof (vn)); memset (&vn, 0, sizeof (vn));
vn.type = RFAPI_VN_OPTION_TYPE_L2ADDR; vn.type = RFAPI_VN_OPTION_TYPE_L2ADDR;

View File

@ -56,12 +56,16 @@ $ignore{'"address-family ipv4"'} = "ignore";
$ignore{'"address-family ipv4 (unicast|multicast)"'} = "ignore"; $ignore{'"address-family ipv4 (unicast|multicast)"'} = "ignore";
$ignore{'"address-family ipv6"'} = "ignore"; $ignore{'"address-family ipv6"'} = "ignore";
$ignore{'"address-family ipv6 (unicast|multicast)"'} = "ignore"; $ignore{'"address-family ipv6 (unicast|multicast)"'} = "ignore";
$ignore{'"address-family ipv4 vpn"'} = "ignore";
$ignore{'"address-family vpnv4"'} = "ignore"; $ignore{'"address-family vpnv4"'} = "ignore";
$ignore{'"address-family vpnv4 unicast"'} = "ignore"; $ignore{'"address-family vpnv4 unicast"'} = "ignore";
$ignore{'"address-family ipv4 vrf NAME"'} = "ignore"; $ignore{'"address-family ipv4 vrf NAME"'} = "ignore";
$ignore{'"address-family encap"'} = "ignore"; $ignore{'"address-family encap"'} = "ignore";
$ignore{'"address-family encapv4"'} = "ignore"; $ignore{'"address-family encapv4"'} = "ignore";
$ignore{'"address-family encapv6"'} = "ignore"; $ignore{'"address-family encapv6"'} = "ignore";
$ignore{'"address-family ipv4 encap"'} = "ignore";
$ignore{'"address-family ipv6 encap"'} = "ignore";
$ignore{'"address-family ipv6 vpn"'} = "ignore";
$ignore{'"address-family vpnv6"'} = "ignore"; $ignore{'"address-family vpnv6"'} = "ignore";
$ignore{'"address-family vpnv6 unicast"'} = "ignore"; $ignore{'"address-family vpnv6 unicast"'} = "ignore";
$ignore{'"exit-address-family"'} = "ignore"; $ignore{'"exit-address-family"'} = "ignore";