Merge branch 'int-new' into HEAD

This commit is contained in:
Jan Maria Matejka 2018-06-19 14:32:16 +02:00
commit 1ef23f05ee
4 changed files with 16 additions and 9 deletions

View file

@ -952,6 +952,10 @@ babel_send_update_(struct babel_iface *ifa, btime changed, struct fib *rtable)
msg.update.next_hop = ((e->n.addr->type == NET_IP4) ? msg.update.next_hop = ((e->n.addr->type == NET_IP4) ?
ifa->next_hop_ip4 : ifa->next_hop_ip6); ifa->next_hop_ip4 : ifa->next_hop_ip6);
/* Do not send route if next hop is unknown, e.g. no configured IPv4 address */
if (ipa_zero(msg.update.next_hop))
continue;
babel_enqueue(&msg, ifa); babel_enqueue(&msg, ifa);
/* Update feasibility distance for redistributed routes */ /* Update feasibility distance for redistributed routes */
@ -1580,7 +1584,7 @@ babel_add_iface(struct babel_proto *p, struct iface *new, struct babel_iface_con
ifa->next_hop_ip6 = ipa_nonzero(ic->next_hop_ip6) ? ic->next_hop_ip6 : ifa->addr; ifa->next_hop_ip6 = ipa_nonzero(ic->next_hop_ip6) ? ic->next_hop_ip6 : ifa->addr;
if (ipa_zero(ifa->next_hop_ip4) && p->ip4_channel) if (ipa_zero(ifa->next_hop_ip4) && p->ip4_channel)
log(L_WARN "%s: Cannot find IPv4 next hop addr on %s", p->p.name, new->name); log(L_WARN "%s: Missing IPv4 next hop address for %s", p->p.name, new->name);
init_list(&ifa->neigh_list); init_list(&ifa->neigh_list);
ifa->hello_seqno = 1; ifa->hello_seqno = 1;
@ -1682,7 +1686,7 @@ babel_reconfigure_iface(struct babel_proto *p, struct babel_iface *ifa, struct b
ifa->next_hop_ip6 = ipa_nonzero(new->next_hop_ip6) ? new->next_hop_ip6 : ifa->addr; ifa->next_hop_ip6 = ipa_nonzero(new->next_hop_ip6) ? new->next_hop_ip6 : ifa->addr;
if (ipa_zero(ifa->next_hop_ip4) && p->ip4_channel) if (ipa_zero(ifa->next_hop_ip4) && p->ip4_channel)
log(L_WARN "%s: Cannot find IPv4 next hop addr on %s", p->p.name, ifa->ifname); log(L_WARN "%s: Missing IPv4 next hop address for %s", p->p.name, ifa->ifname);
if (ifa->next_hello > (current_time() + new->hello_interval)) if (ifa->next_hello > (current_time() + new->hello_interval))
ifa->next_hello = current_time() + (random() % new->hello_interval); ifa->next_hello = current_time() + (random() % new->hello_interval);

View file

@ -616,7 +616,7 @@ babel_read_update(struct babel_tlv *hdr, union babel_msg *m,
/* Update must have next hop, unless it is retraction */ /* Update must have next hop, unless it is retraction */
if (ipa_zero(state->next_hop_ip4) && (msg->metric != BABEL_INFINITY)) if (ipa_zero(state->next_hop_ip4) && (msg->metric != BABEL_INFINITY))
return PARSE_ERROR; return PARSE_IGNORE;
/* Merge saved prefix and received prefix parts */ /* Merge saved prefix and received prefix parts */
memcpy(buf, state->def_ip4_prefix, tlv->omitted); memcpy(buf, state->def_ip4_prefix, tlv->omitted);

View file

@ -1109,6 +1109,9 @@ bgp_decode_attrs(struct bgp_parse_state *s, byte *data, uint len)
if (!BIT32_TEST(s->attrs_seen, BA_AS_PATH)) if (!BIT32_TEST(s->attrs_seen, BA_AS_PATH))
{ REPORT(NO_MANDATORY, "AS_PATH"); goto withdraw; } { REPORT(NO_MANDATORY, "AS_PATH"); goto withdraw; }
if (s->ip_reach_len && !BIT32_TEST(s->attrs_seen, BA_NEXT_HOP))
{ REPORT(NO_MANDATORY, "NEXT_HOP"); goto withdraw; }
/* When receiving attributes from non-AS4-aware BGP speaker, we have to /* When receiving attributes from non-AS4-aware BGP speaker, we have to
reconstruct AS_PATH and AGGREGATOR attributes; RFC 6793 4.2.3 */ reconstruct AS_PATH and AGGREGATOR attributes; RFC 6793 4.2.3 */
if (!p->as4_session) if (!p->as4_session)

View file

@ -108,7 +108,7 @@ orta_pref(const orta *nf)
static int static int
orta_prio(const orta *nf) orta_prio(const orta *nf)
{ {
/* RFC 3103 2.5 (6e) priorities */ /* RFC 3101 2.5 (6e) priorities */
u32 opts = nf->options & (ORTA_NSSA | ORTA_PROP); u32 opts = nf->options & (ORTA_NSSA | ORTA_PROP);
/* A Type-7 LSA with the P-bit set */ /* A Type-7 LSA with the P-bit set */
@ -217,7 +217,7 @@ orta_compare_asbr(const struct ospf_proto *p, const orta *new, const orta *old)
/* /*
* Compare a routing table entry with a new one, for AS external routes * Compare a routing table entry with a new one, for AS external routes
* (RFC 2328 16.4) and NSSA routes (RFC 3103 2.5), Returns integer <, = or > * (RFC 2328 16.4) and NSSA routes (RFC 3101 2.5), Returns integer <, = or >
* than 0 if the new orta is less, equal or more preferred than the old orta. * than 0 if the new orta is less, equal or more preferred than the old orta.
*/ */
static int static int
@ -1078,7 +1078,7 @@ decide_nssa_lsa(struct ospf_proto *p, ort *nf, struct ospf_lsa_ext_local *rt)
return 1; return 1;
} }
/* RFC 3103 3.2 - translating Type-7 LSAs into Type-5 LSAs */ /* RFC 3101 3.2 - translating Type-7 LSAs into Type-5 LSAs */
static inline void static inline void
check_nssa_lsa(struct ospf_proto *p, ort *nf) check_nssa_lsa(struct ospf_proto *p, ort *nf)
{ {
@ -1101,12 +1101,12 @@ check_nssa_lsa(struct ospf_proto *p, ort *nf)
} }
} }
/* RFC 3103 3.2 (3) - originate the aggregated address range */ /* RFC 3101 3.2 (3) - originate the aggregated address range */
if (anet && anet->active && !anet->hidden && oa->translate) if (anet && anet->active && !anet->hidden && oa->translate)
ospf_originate_ext_lsa(p, NULL, nf, LSA_M_RTCALC, anet->metric, ospf_originate_ext_lsa(p, NULL, nf, LSA_M_RTCALC, anet->metric,
(anet->metric & LSA_EXT3_EBIT), IPA_NONE, anet->tag, 0); (anet->metric & LSA_EXT3_EBIT), IPA_NONE, anet->tag, 0);
/* RFC 3103 3.2 (2) - originate the same network */ /* RFC 3101 3.2 (2) - originate the same network */
else if (decide_nssa_lsa(p, nf, &rt)) else if (decide_nssa_lsa(p, nf, &rt))
ospf_originate_ext_lsa(p, NULL, nf, LSA_M_RTCALC, rt.metric, rt.ebit, rt.fwaddr, rt.tag, 0); ospf_originate_ext_lsa(p, NULL, nf, LSA_M_RTCALC, rt.metric, rt.ebit, rt.fwaddr, rt.tag, 0);
} }
@ -1284,7 +1284,7 @@ ospf_rt_abr2(struct ospf_proto *p)
struct ospf_area *oa; struct ospf_area *oa;
struct top_hash_entry *en; struct top_hash_entry *en;
/* RFC 3103 3.1 - type-7 translator election */ /* RFC 3101 3.1 - type-7 translator election */
struct ospf_area *bb = p->backbone; struct ospf_area *bb = p->backbone;
WALK_LIST(oa, p->area_list) WALK_LIST(oa, p->area_list)
if (oa_is_nssa(oa)) if (oa_is_nssa(oa))