From: Ondrej Zajicek Date: Wed, 22 May 2013 21:59:54 +0000 (+0200) Subject: Merge commit '9ff5257357d9975654279db17bbc8525583ba1cc' into integrated X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c02ed79eb421a0be0794e4b5e927fd7f5091b581;p=thirdparty%2Fbird.git Merge commit '9ff5257357d9975654279db17bbc8525583ba1cc' into integrated Conflicts: proto/ospf/config.Y --- c02ed79eb421a0be0794e4b5e927fd7f5091b581 diff --cc proto/ospf/config.Y index 1ba772524,b16d46a90..3325a5de7 --- a/proto/ospf/config.Y +++ b/proto/ospf/config.Y @@@ -120,7 -135,7 +120,7 @@@ CF_KEYWORDS(GLOBAL, LSID, ROUTER, SELF %type opttext %type lsadb_args - %type ospf_proto_key -%type nbma_eligible ++%type ospf_proto_key nbma_eligible CF_GRAMMAR @@@ -286,10 -296,10 +286,10 @@@ ospf_iface_item | STUB bool { OSPF_PATT->stub = $2 ; } | CHECK LINK bool { OSPF_PATT->check_link = $3; } | ECMP WEIGHT expr { OSPF_PATT->ecmp_weight = $3 - 1; if (($3<1) || ($3>256)) cf_error("ECMP weight must be in range 1-256"); } - | NEIGHBORS '{' ipa_list '}' + | NEIGHBORS '{' nbma_list '}' - | AUTHENTICATION NONE { OSPF_PATT->autype = OSPF_AUTH_NONE ; } - | AUTHENTICATION SIMPLE { OSPF_PATT->autype = OSPF_AUTH_SIMPLE ; } - | AUTHENTICATION CRYPTOGRAPHIC { OSPF_PATT->autype = OSPF_AUTH_CRYPT ; } + | AUTHENTICATION NONE { OSPF_PATT->autype = OSPF_AUTH_NONE; } + | AUTHENTICATION SIMPLE { OSPF_PATT->autype = OSPF_AUTH_SIMPLE; ospf_check_auth(); } + | AUTHENTICATION CRYPTOGRAPHIC { OSPF_PATT->autype = OSPF_AUTH_CRYPT; ospf_check_auth(); } | RX BUFFER LARGE { OSPF_PATT->rxbuf = OSPF_RXBUF_LARGE ; } | RX BUFFER NORMAL { OSPF_PATT->rxbuf = OSPF_RXBUF_NORMAL ; } | RX BUFFER expr { OSPF_PATT->rxbuf = $3 ; if (($3 < OSPF_RXBUF_MINSIZE) || ($3 > OSPF_MAX_PKT_SIZE)) cf_error("Buffer size must be in range 256-65535"); } @@@ -318,16 -328,17 +318,17 @@@ pref_opt | TAG expr { this_pref->tag = $2; } ; - ipa_list: + nbma_list: /* empty */ - | ipa_list ipa_item + | nbma_list nbma_item ; - ipa_item: - ipa_el - | ipa_ne; + nbma_eligible: + /* empty */ { $$ = 0; } + | ELIGIBLE { $$ = 1; } + ; - ipa_el: ipa ';' -nbma_item: IPA nbma_eligible ';' ++nbma_item: ipa nbma_eligible ';' { this_nbma = cfg_allocz(sizeof(struct nbma_node)); add_tail(&OSPF_PATT->nbma_list, NODE this_nbma); diff --cc proto/ospf/iface.c index 6025d2d1b,39084cef0..8613ec851 --- a/proto/ospf/iface.c +++ b/proto/ospf/iface.c @@@ -567,8 -574,22 +567,20 @@@ ospf_iface_new(struct ospf_area *oa, st init_list(&ifa->nbma_list); WALK_LIST(nb, ip->nbma_list) - if (ipa_in_net(nb->ip, addr->prefix, addr->pxlen)) - add_nbma_node(ifa, nb, 0); + { + /* In OSPFv3, addr is link-local while configured neighbors could + have global IP (although RFC 5340 C.5 says link-local addresses + should be used). Because OSPFv3 iface is not subnet-specific, + there is no need for ipa_in_net() check */ + -#ifdef OSPFv2 - if (!ipa_in_net(nb->ip, addr->prefix, addr->pxlen)) ++ if (ospf_is_v2(po) && !ipa_in_net(nb->ip, addr->prefix, addr->pxlen)) + continue; -#else - if (!ipa_has_link_scope(nb->ip)) ++ ++ if (ospf_is_v3(po) && !ipa_has_link_scope(nb->ip)) + log(L_WARN "In OSPFv3, configured neighbor address (%I) should be link-local", nb->ip); -#endif + + add_nbma_node(ifa, nb, 0); + } ifa->state = OSPF_IS_DOWN; add_tail(&oa->po->iface_list, NODE ifa); @@@ -758,9 -785,15 +770,13 @@@ ospf_iface_reconfigure(struct ospf_ifac /* NBMA LIST - add new */ WALK_LIST(nb, new->nbma_list) { - if (!ipa_in_net(nb->ip, ifa->addr->prefix, ifa->addr->pxlen)) + /* See related note in ospf_iface_new() */ -#ifdef OSPFv2 - if (!ipa_in_net(nb->ip, ifa->addr->prefix, ifa->addr->pxlen)) ++ if (ospf_is_v2(po) && !ipa_in_net(nb->ip, ifa->addr->prefix, ifa->addr->pxlen)) continue; -#else - if (!ipa_has_link_scope(nb->ip)) + ++ if (ospf_is_v3(po) && !ipa_has_link_scope(nb->ip)) + log(L_WARN "In OSPFv3, configured neighbor address (%I) should be link-local", nb->ip); -#endif + if (! find_nbma_node(ifa, nb->ip)) { OSPF_TRACE(D_EVENTS, "Adding NBMA neighbor %I on interface %s",