diff --git a/NEWS b/NEWS index 8193b54a..3aaa4dd6 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,12 @@ +Version 1.3.8 (2012-08-07) + o Generalized import and export route limits. + o RDNSS and DNSSL support for RAdv. + o Include in config file support wildcards. + o History deduplication in BIRD client. + o New route attributes krt_source, krt_metric. + o Different instance ID support for OSPFv3. + o Real broadcast mode for OSPFv2. + o Several minor bugfixes. Version 1.3.7 (2012-03-22) o Route Origin Authorization basics. diff --git a/doc/bird.sgml b/doc/bird.sgml index 86ae5b0d..24bc3026 100644 --- a/doc/bird.sgml +++ b/doc/bird.sgml @@ -477,7 +477,7 @@ to zero to disable it. An empty is equivalent to disabled && nc->disabled) log(L_INFO "Disabling protocol %s", p->name); - PD(p, "Restarting"); p->down_code = nc->disabled ? PDC_CF_DISABLE : PDC_CF_RESTART; p->cf_new = nc; } - else + else if (!shutting_down) { - if (!shutting_down) - log(L_INFO "Removing protocol %s", p->name); - PD(p, "Unconfigured"); + log(L_INFO "Removing protocol %s", p->name); p->down_code = PDC_CF_REMOVE; p->cf_new = NULL; } - p->reconfiguring = 1; + else /* global shutdown */ + { + p->down_code = PDC_CMD_SHUTDOWN; + p->cf_new = NULL; + } + p->reconfiguring = 1; config_add_obstacle(old); proto_rethink_goal(p); } diff --git a/nest/protocol.h b/nest/protocol.h index a37fa129..d5668f01 100644 --- a/nest/protocol.h +++ b/nest/protocol.h @@ -223,8 +223,9 @@ struct proto_spec { #define PDC_CF_RESTART 0x03 /* Restart due to reconfiguration */ #define PDC_CMD_DISABLE 0x11 /* Result of disable command */ #define PDC_CMD_RESTART 0x12 /* Result of restart command */ +#define PDC_CMD_SHUTDOWN 0x13 /* Result of global shutdown */ #define PDC_IN_LIMIT_HIT 0x21 /* Route import limit reached */ -#define PDC_OUT_LIMIT_HIT 0x22 /* Route export limit reached - not implemented */ +#define PDC_OUT_LIMIT_HIT 0x22 /* Route export limit reached */ void *proto_new(struct proto_config *, unsigned size); diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 0b52dedc..dbc59eea 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -870,6 +870,7 @@ bgp_shutdown(struct proto *P) break; case PDC_CMD_DISABLE: + case PDC_CMD_SHUTDOWN: subcode = 2; // Errcode 6, 2 - administrative shutdown break; diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c index 59886758..9a7eaa63 100644 --- a/proto/ospf/ospf.c +++ b/proto/ospf/ospf.c @@ -566,7 +566,7 @@ ospf_rt_notify(struct proto *p, rtable *tbl UNUSED, net * n, rte * new, rte * ol if (! (fn->flags & OSPF_RT_EXPORT)) return; - flush_ext_lsa(oa, fn, 1); + flush_ext_lsa(oa, fn, 1, oa_is_nssa(oa)); /* Old external route might blocked some NSSA translation */ if (po->areano > 1) diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index e3ad9d1a..bf9b2adf 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -975,7 +975,7 @@ check_nssa_lsa(struct proto_ospf *po, ort *nf) originate_ext_lsa(po->backbone, fn, EXT_NSSA, rt_metric, rt_fwaddr, rt_tag, 0); else if (fn->flags & OSPF_RT_NSSA) - flush_ext_lsa(po->backbone, fn, 1); + flush_ext_lsa(po->backbone, fn, 1, 0); } /* RFC 2328 16.7. p2 - find new/lost vlink endpoints */ @@ -1096,8 +1096,7 @@ ospf_rt_abr1(struct proto_ospf *po) if (oa_is_nssa(oa) && oa->ac->default_nssa) originate_ext_lsa(oa, &default_nf->fn, 0, oa->ac->default_cost, IPA_NONE, 0, 0); else - flush_ext_lsa(oa, &default_nf->fn, 0); - + flush_ext_lsa(oa, &default_nf->fn, 0, 1); /* RFC 2328 16.4. (3) - precompute preferred ASBR entries */ if (oa_is_ext(oa)) diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c index fe0caf9d..91b7810a 100644 --- a/proto/ospf/topology.c +++ b/proto/ospf/topology.c @@ -1111,12 +1111,12 @@ originate_ext_lsa(struct ospf_area *oa, struct fib_node *fn, int src, } void -flush_ext_lsa(struct ospf_area *oa, struct fib_node *fn, int src) +flush_ext_lsa(struct ospf_area *oa, struct fib_node *fn, int src, int nssa) { struct proto_ospf *po = oa->po; struct proto *p = &po->proto; struct top_hash_entry *en; - int nssa = oa_is_nssa(oa); + u32 dom = nssa ? oa->areaid : 0; u32 type = nssa ? LSA_T_NSSA : LSA_T_EXT; u32 lsaid = fibnode_to_lsaid(po, fn); diff --git a/proto/ospf/topology.h b/proto/ospf/topology.h index 3b504720..5858e11a 100644 --- a/proto/ospf/topology.h +++ b/proto/ospf/topology.h @@ -70,7 +70,7 @@ void originate_sum_net_lsa(struct ospf_area *oa, struct fib_node *fn, int metric void originate_sum_rt_lsa(struct ospf_area *oa, struct fib_node *fn, int metric, u32 options UNUSED); void flush_sum_lsa(struct ospf_area *oa, struct fib_node *fn, int type); void originate_ext_lsa(struct ospf_area *oa, struct fib_node *fn, int src, u32 metric, ip_addr fwaddr, u32 tag, int pbit); -void flush_ext_lsa(struct ospf_area *oa, struct fib_node *fn, int src); +void flush_ext_lsa(struct ospf_area *oa, struct fib_node *fn, int src, int nssa); struct top_hash_entry * ospf_hash_find_rt(struct top_graph *f, u32 domain, u32 rtr); struct top_hash_entry * ospf_hash_find_rt3_first(struct top_graph *f, u32 domain, u32 rtr); diff --git a/sysdep/config.h b/sysdep/config.h index c0154387..76a4af64 100644 --- a/sysdep/config.h +++ b/sysdep/config.h @@ -7,7 +7,7 @@ #define _BIRD_CONFIG_H_ /* BIRD version */ -#define BIRD_VERSION "1.3.7" +#define BIRD_VERSION "1.3.8" // XXXX temporary define #define IPV1 1