}
/* Make network statement's attribute. */
-struct attr *bgp_attr_default_set(struct attr *attr, uint8_t origin)
+struct attr *bgp_attr_default_set(struct attr *attr, struct bgp *bgp,
+ uint8_t origin)
{
memset(attr, 0, sizeof(struct attr));
attr->label = MPLS_INVALID_LABEL;
attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP);
attr->mp_nexthop_len = IPV6_MAX_BYTELEN;
+ attr->local_pref = bgp->default_local_pref;
return attr;
}
extern void bgp_attr_unintern_sub(struct attr *);
extern void bgp_attr_unintern(struct attr **);
extern void bgp_attr_flush(struct attr *);
-extern struct attr *bgp_attr_default_set(struct attr *attr, uint8_t);
+extern struct attr *bgp_attr_default_set(struct attr *attr, struct bgp *bgp,
+ uint8_t origin);
extern struct attr *bgp_attr_aggregate_intern(
struct bgp *bgp, uint8_t origin, struct aspath *aspath,
struct community *community, struct ecommunity *ecommunity,
if (src_attr)
attr = *src_attr;
else {
- memset(&attr, 0, sizeof(struct attr));
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ memset(&attr, 0, sizeof(attr));
+ bgp_attr_default_set(&attr, bgp_vrf, BGP_ORIGIN_IGP);
}
/* Advertise Primary IP (PIP) is enabled, send individual
memset(&attr, 0, sizeof(struct attr));
/* Build path-attribute for this route. */
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_IGP);
attr.nexthop = vpn->originator_ip;
attr.mp_nexthop_global_in = vpn->originator_ip;
attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV4;
* some other values could differ for different routes. The
* attributes will be shared in the hash table.
*/
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_IGP);
attr.nexthop = vpn->originator_ip;
attr.mp_nexthop_global_in = vpn->originator_ip;
attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV4;
memset(&attr, 0, sizeof(struct attr));
/* Build path-attribute for this route. */
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_IGP);
attr.nexthop = es->originator_ip;
attr.mp_nexthop_global_in = es->originator_ip;
attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV4;
memset(&attr, 0, sizeof(struct attr));
/* Build path-attribute for this route. */
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_IGP);
attr.nexthop = es->originator_ip;
attr.mp_nexthop_global_in = es->originator_ip;
attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV4;
dest = bgp_afi_node_get(bgp->rib[afi][safi], afi, safi, p, NULL);
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_IGP);
attr.nexthop = bgp_static->igpnexthop;
attr.med = bgp_static->igpmetric;
dest = bgp_afi_node_get(bgp->rib[afi][safi], afi, safi, p,
&bgp_static->prd);
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_IGP);
attr.nexthop = bgp_static->igpnexthop;
attr.med = bgp_static->igpmetric;
struct bgp_redist *red;
/* Make default attribute. */
- bgp_attr_default_set(&attr, BGP_ORIGIN_INCOMPLETE);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_INCOMPLETE);
/*
* This must not be NULL to satisfy Coverity SA
*/
path = object;
/* Set local preference value. */
- if (path->attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF))
+ if (path->attr->local_pref)
locpref = path->attr->local_pref;
path->attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF);
bgp = peer->bgp;
from = bgp->peer_self;
- bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_IGP);
/* make coverity happy */
assert(attr.aspath);
- attr.local_pref = bgp->default_local_pref;
-
if ((afi == AFI_IP6) || peer_cap_enhe(peer, afi, safi)) {
/* IPv6 global nexthop must be included. */
attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV6_GLOBAL;
/* Make default attribute. Produces already-interned attr.aspath */
/* Cripes, the memory management of attributes is byzantine */
- bgp_attr_default_set(&attr, BGP_ORIGIN_INCOMPLETE);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_INCOMPLETE);
/*
* At this point:
return;
}
- bgp_attr_default_set(&attr, BGP_ORIGIN_INCOMPLETE);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_INCOMPLETE);
/* TBD set some configured med, see add_vnc_route() */
vnc_zlog_debug_verbose(
return;
}
- bgp_attr_default_set(&attr, BGP_ORIGIN_INCOMPLETE);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_INCOMPLETE);
/* TBD set some configured med, see add_vnc_route() */
/*
return;
}
- bgp_attr_default_set(&attr, BGP_ORIGIN_INCOMPLETE);
+ bgp_attr_default_set(&attr, bgp, BGP_ORIGIN_INCOMPLETE);
/* TBD set some configured med, see add_vnc_route() */
/*
router bgp 65000
no bgp ebgp-requires-policy
+ no bgp network import-check
+ network 10.10.10.2/32 route-map l2
neighbor 192.168.255.1 remote-as 65000
neighbor 192.168.255.1 timers 3 10
address-family ipv4
!
route-map r1-out permit 10
set local-preference +50
+route-map l2 permit 10
+ set local-preference +10
router bgp 65000
no bgp ebgp-requires-policy
+ no bgp network import-check
neighbor 192.168.255.1 remote-as 65000
neighbor 192.168.255.1 timers 3 10
+ network 10.10.10.3/32 route-map l3
address-family ipv4
redistribute connected
neighbor 192.168.255.1 route-map r1-out out
!
route-map r1-out permit 10
set local-preference -50
+route-map l3 permit 10
+ set local-preference -10
expected = {
"192.168.255.2": {
"bgpState": "Established",
- "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}},
+ "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 3}},
},
"192.168.255.3": {
"bgpState": "Established",
- "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}},
+ "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 3}},
},
}
return topotest.json_cmp(output, expected)
def _bgp_check_local_preference(router):
- output = json.loads(router.vtysh_cmd("show ip bgp 172.16.255.254/32 json"))
+ output = json.loads(router.vtysh_cmd("show bgp ipv4 unicast json"))
expected = {
- "paths": [
- {"locPrf": 50, "nexthops": [{"ip": "192.168.255.3"}]},
- {"locPrf": 150, "nexthops": [{"ip": "192.168.255.2"}]},
- ]
+ "routes": {
+ "10.10.10.2/32": [{"locPrf": 160}],
+ "10.10.10.3/32": [{"locPrf": 40}],
+ "172.16.255.254/32": [
+ {"locPrf": 50, "nexthops": [{"ip": "192.168.255.3"}]},
+ {"locPrf": 150, "nexthops": [{"ip": "192.168.255.2"}]},
+ ],
+ }
}
return topotest.json_cmp(output, expected)