]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Merge commit '1c30b689ddd032ef8000fb7836348a48ba3184ff' into haugesund
authorMaria Matejka <mq@ucw.cz>
Mon, 30 May 2022 15:26:25 +0000 (17:26 +0200)
committerMaria Matejka <mq@ucw.cz>
Mon, 30 May 2022 15:26:25 +0000 (17:26 +0200)
15 files changed:
1  2 
filter/f-inst.c
lib/route.h
nest/rt-dev.c
nest/rt-table.c
proto/babel/babel.c
proto/bgp/attrs.c
proto/bgp/packets.c
proto/ospf/ospf.c
proto/ospf/rt.c
proto/perf/perf.c
proto/rip/rip.c
proto/rpki/rpki.c
proto/static/static.c
sysdep/bsd/krt-sock.c
sysdep/linux/netlink.c

diff --cc filter/f-inst.c
index 7fa1c8b8f2d27aff61afc40638648ce2e92764cc,23271ce75ca1213a86b7b76eb69bfab4a56a58d6..caf473f0f92b471b9a9327dde1c137d8b0be30a3
        switch (sa.sa_code)
        {
        case SA_GW:     RESULT(sa.type, ip, rta->nh.gw); break;
 -      case SA_NET:    RESULT(sa.type, net, (*fs->rte)->net->n.addr); break;
 -      case SA_PROTO:  RESULT(sa.type, s, (*fs->rte)->src->proto->name); break;
 +      case SA_NET:    RESULT(sa.type, net, fs->rte->net); break;
 +      case SA_PROTO:  RESULT(sa.type, s, fs->rte->src->proto->name); break;
-       case SA_SOURCE: RESULT(sa.type, i, rta->source); break;
        case SA_DEST:   RESULT(sa.type, i, rta->dest); break;
        case SA_IFNAME: RESULT(sa.type, s, rta->nh.iface ? rta->nh.iface->name : ""); break;
        case SA_IFINDEX:        RESULT(sa.type, i, rta->nh.iface ? rta->nh.iface->index : 0); break;
diff --cc lib/route.h
index 30ac26729e7e70819378727cc28b802d6ebe0a41,8fdb5d8b3e6e0d42efb91c3f074a7b57ad6b794c..cfb08bbe577d108d2122c75b3c4629e90142bd87
@@@ -310,6 -308,12 +310,12 @@@ u32 rt_get_igp_metric(const rte *rt)
  /* From: Advertising router */
  extern struct ea_class ea_gen_from;
  
 -static inline u32 rt_get_source_attr(rte *rt)
+ /* Source: An old method to devise the route source protocol and kind.
+  * To be superseded in a near future by something more informative. */
+ extern struct ea_class ea_gen_source;
++static inline u32 rt_get_source_attr(const rte *rt)
+ { return ea_get_int(rt->attrs->eattrs, &ea_gen_source, 0); }
  /* Next hop structures */
  
  #define NEXTHOP_MAX_SIZE (sizeof(struct nexthop) + sizeof(u32)*MPLS_MAX_LABEL_STACK)
diff --cc nest/rt-dev.c
index 5d4233dcdcaa710e0d57c3affc0e41e439e23d37,af6506f6d7ff80f18db8fe4cdbd773747c07f740..b0ad34e66766aa43a677bce89ce490f9e72afb21
@@@ -86,13 -88,12 +85,14 @@@ dev_ifa_notify(struct proto *P, uint fl
        };
  
        ea_set_attr_u32(&a0.eattrs, &ea_gen_preference, 0, c->preference);
+       ea_set_attr_u32(&a0.eattrs, &ea_gen_source, 0, RTS_DEVICE);
  
 -      a = rta_lookup(&a0);
 -      e = rte_get_temp(a, src);
 -      e->pflags = 0;
 -      rte_update2(c, net, e, src);
 +      rte e0 = {
 +      .attrs = rta_lookup(&a0),
 +      .src = src,
 +      };
 +
 +      rte_update(c, net, &e0, src);
      }
  }
  
diff --cc nest/rt-table.c
index 3d42c9de6a4261621a8ed138506a2ed310dfe511,4f119ac0c7eaab05701b303e5c4a5ba3bd4645cc..3f3aee18ff8fd36cffab0e29b108ae73fe862920
@@@ -2736,8 -2619,8 +2736,8 @@@ rt_flowspec_check(rtable *tab_ip, rtabl
      if (!nc)
        continue;
  
 -    rte *rc = nc->routes;
 +    const rte *rc = &nc->routes->rte;
-     if (rc->attrs->source != RTS_BGP)
+     if (rt_get_source_attr(rc) != RTS_BGP)
        return 0;
  
      if (rta_get_first_asn(rc->attrs) != asn_b)
  
  #endif /* CONFIG_BGP */
  
 -static rte *
 -rt_flowspec_update_rte(rtable *tab, rte *r)
 +static struct rte_storage *
 +rt_flowspec_update_rte(rtable *tab, net *n, rte *r)
  {
  #ifdef CONFIG_BGP
-   if (r->attrs->source != RTS_BGP)
+   if (rt_get_source_attr(r) != RTS_BGP)
      return NULL;
  
    struct bgp_channel *bc = (struct bgp_channel *) r->sender;
index d3eef506fa8c414ab013f9dfee9f6cc3cc78abf2,a7dcee098ea6a4deadab620b9a783f741b021181..be75694fd4bcce6dbfa99d6f3a7316292ed2fe5d
@@@ -690,14 -687,14 +689,15 @@@ babel_announce_rte(struct babel_proto *
      };
  
      ea_set_attr_u32(&a0.eattrs, &ea_gen_preference, 0, 1);
+     ea_set_attr_u32(&a0.eattrs, &ea_gen_source, 0, RTS_BABEL);
  
 -    rta *a = rta_lookup(&a0);
 -    rte *rte = rte_get_temp(a, p->p.main_source);
 -    rte->pflags = 0;
 +    rte e0 = {
 +      .attrs = &a0,
 +      .src = p->p.main_source,
 +    };
  
      e->unreachable = 1;
 -    rte_update2(c, e->n.addr, rte, p->p.main_source);
 +    rte_update(c, e->n.addr, &e0, p->p.main_source);
    }
    else
    {
Simple merge
Simple merge
index 121e8f9cd6cc913058471d98bda28cb797f604ab,731adaa5f687834cf852e627a6e3963c9332c0fc..8fe64d9584dfa41cbe2e21f2832d5d0e1ae811cc
@@@ -411,9 -414,9 +414,9 @@@ ospf_rte_better(struct rte *new, struc
  }
  
  static u32
 -ospf_rte_igp_metric(struct rte *rt)
 +ospf_rte_igp_metric(const rte *rt)
  {
-   if (rt->attrs->source == RTS_OSPF_EXT2)
+   if (rt_get_source_attr(rt) == RTS_OSPF_EXT2)
      return IGP_METRIC_UNKNOWN;
  
    return ea_get_int(rt->attrs->eattrs, &ea_ospf_metric1, LSINFINITY);
diff --cc proto/ospf/rt.c
index 0cfd374764d3a4aa2efe3622028fbc5cb47da2cc,9173905667cf8732e642d7eb65be765b0d26247b..23b767bc952ccfee6f5004d32937ef8ed522eeb4
@@@ -2089,15 -2099,14 +2099,16 @@@ again1
        eattrs.a[eattrs.l.count++] =
          EA_LITERAL_EMBEDDED(&ea_ospf_router_id, 0, nf->n.rid);
  
+       ASSERT_DIE(ARRAY_SIZE(eattrs.a) >= eattrs.l.count);
        a0.eattrs = &eattrs.l;
  
 -      rta *a = rta_lookup(&a0);
 -      rte *e = rte_get_temp(a, p->p.main_source);
 -
        rta_free(nf->old_rta);
 -      nf->old_rta = rta_clone(a);
 +      nf->old_rta = rta_lookup(&a0);
 +
 +      rte e0 = {
 +        .attrs = nf->old_rta,
 +        .src = p->p.main_source,
 +      };
  
        DBG("Mod rte type %d - %N via %I on iface %s, met %d\n",
            a0.source, nf->fn.addr, a0.gw, a0.iface ? a0.iface->name : "(none)", nf->n.metric1);
Simple merge
diff --cc proto/rip/rip.c
Simple merge
index 8e2dbf49d0868c5d2e6b04d87adc214f79ac3249,56d8add2fcbdba360289eaa37e201db267965a60..96a794fa90fbd084b64822ecd4439a2ec13585ad
@@@ -126,10 -125,14 +125,11 @@@ rpki_table_add_roa(struct rpki_cache *c
    };
  
    ea_set_attr_u32(&a0.eattrs, &ea_gen_preference, 0, channel->preference);
+   ea_set_attr_u32(&a0.eattrs, &ea_gen_source, 0, RTS_RPKI);
  
 -  rta *a = rta_lookup(&a0);
 -  rte *e = rte_get_temp(a, p->p.main_source);
 +  rte e0 = { .attrs = &a0, .src = p->p.main_source, };
  
 -  e->pflags = 0;
 -
 -  rte_update2(channel, &pfxr->n, e, e->src);
 +  rte_update(channel, &pfxr->n, &e0, p->p.main_source);
  }
  
  void
Simple merge
index 19ef2394cd2dfdf5c0a432e40b10053685efc155,61ac7a5c128810419ab091a9cd367122787d14f4..1c1bd50cac3936f86bef4f4f0e97f3552d783fc7
@@@ -518,9 -519,11 +518,10 @@@ krt_read_route(struct ks_msg *msg, stru
    net = net_get(p->p.main_channel->table, &ndst);
  
    rta a = {
-     .source = RTS_INHERIT,
 -    .src = p->p.main_source,
    };
  
+   ea_set_attr_u32(&a->eattrs, &ea_gen_source, 0, RTS_INHERIT);
    /* reject/blackhole routes have also set RTF_GATEWAY,
       we wil check them first. */
  
Simple merge