]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Merge branch 'mq-aggregator-for-v3' into thread-next
authorMaria Matejka <mq@ucw.cz>
Wed, 8 Nov 2023 21:24:33 +0000 (22:24 +0100)
committerMaria Matejka <mq@ucw.cz>
Wed, 8 Nov 2023 21:24:33 +0000 (22:24 +0100)
1  2 
proto/bgp/attrs.c
proto/bgp/bgp.c
proto/bgp/config.Y
proto/bgp/packets.c

index 9c85ab794ccf9af4c7d07384fba65a5dfd7ad71e,9387ddba97f99bd928abdc4f2f57674a9def02e7..6c4d9dcd921c56707b4b8390579c7763ce873064
@@@ -16,7 -16,8 +16,8 @@@
  #include "nest/iface.h"
  #include "nest/protocol.h"
  #include "nest/route.h"
 -#include "nest/attrs.h"
 +#include "lib/attrs.h"
+ #include "nest/mpls.h"
  #include "conf/conf.h"
  #include "lib/resource.h"
  #include "lib/string.h"
@@@ -1557,8 -1500,15 +1558,15 @@@ bgp_finish_attrs(struct bgp_parse_stat
      if (!e && (p->cf->local_role == BGP_ROLE_CUSTOMER ||
               p->cf->local_role == BGP_ROLE_PEER ||
               p->cf->local_role == BGP_ROLE_RS_CLIENT))
 -      bgp_set_attr_u32(&a->eattrs, s->pool, BA_ONLY_TO_CUSTOMER, 0, p->cf->remote_as);
 +      bgp_set_attr_u32(to, BA_ONLY_TO_CUSTOMER, 0, p->cf->remote_as);
    }
 -    ea_set_attr_u32(&a->eattrs, s->pool, EA_MPLS_POLICY, 0, EAF_TYPE_INT, mc->label_policy);
+   /* Apply MPLS policy for labeled SAFIs */
+   if (s->mpls && s->proto->p.mpls_channel)
+   {
+     struct mpls_channel *mc = (void *) s->proto->p.mpls_channel;
++    ea_set_attr_u32(to, &ea_gen_mpls_policy, 0, mc->label_policy);
+   }
  }
  
  
diff --cc proto/bgp/bgp.c
index ea89b3b9c41ec3776aa6ec46783e44d51e69ef3a,4651b76a2f84bfb319aab98d23b7c9fb6485103c..c93c553ff0171b7cc56cb05d2845d146126085ff
@@@ -621,17 -522,12 +621,19 @@@ bgp_spawn(struct bgp_proto *pp, ip_add
  void
  bgp_stop(struct bgp_proto *p, int subcode, byte *data, uint len)
  {
 -  proto_shutdown_mpls_map(&p->p, 1);
++  proto_shutdown_mpls_map(&p->p);
    proto_notify_state(&p->p, PS_STOP);
 +  p->uncork_ev->data = NULL;
    bgp_graceful_close_conn(&p->outgoing_conn, subcode, data, len);
    bgp_graceful_close_conn(&p->incoming_conn, subcode, data, len);
 -  ev_schedule(p->event);
 +
 +  struct bgp_channel *c;
 +  WALK_LIST(c, p->p.channels)
 +    if (c->ptx)
 +      bgp_free_pending_tx(c);
 +
 +  proto_send_event(&p->p, p->event);
  }
  
  static inline void
@@@ -1780,6 -1575,8 +1782,8 @@@ bgp_start(struct proto *P
    p->remote_id = 0;
    p->link_addr = IPA_NONE;
  
 -  proto_setup_mpls_map(P, RTS_BGP, 1);
++  proto_setup_mpls_map(P, RTS_BGP);
    /* Lock all channels when in GR recovery mode */
    if (p->p.gr_recovery && p->cf->gr_mode)
    {
@@@ -2375,6 -2174,9 +2386,9 @@@ bgp_reconfigure(struct proto *P, struc
      if (C->stale)
        same = proto_configure_channel(P, &C, NULL) && same;
  
 -    proto_setup_mpls_map(P, RTS_BGP, 1);
+   if (same)
++    proto_setup_mpls_map(P, RTS_BGP);
    if (same && (p->start_state > BSS_PREPARE))
      bgp_update_bfd(p, new->bfd);
  
@@@ -2883,8 -2665,9 +2897,8 @@@ const struct channel_class channel_bgp 
  struct protocol proto_bgp = {
    .name =             "BGP",
    .template =                 "bgp%d",
 -  .class =            PROTOCOL_BGP,
    .preference =       DEF_PREF_BGP,
-   .channel_mask =     NB_IP | NB_VPN | NB_FLOW,
+   .channel_mask =     NB_IP | NB_VPN | NB_FLOW | NB_MPLS,
    .proto_size =               sizeof(struct bgp_proto),
    .config_size =      sizeof(struct bgp_config),
    .postconfig =               bgp_postconfig,
Simple merge
index 542ec7072069b3015257fc2f7071a3b29073a3d9,b7df5a7adf0fc1fb4b0481d9419fe3c5886d636e..b2228db75479cd375ff85e39fadb057206c23ca5
@@@ -1227,17 -1214,16 +1227,16 @@@ bgp_update_next_hop_ip(struct bgp_expor
      else
      {
        ip_addr nh[2] = { s->channel->next_hop_addr, s->channel->link_addr };
 -      bgp_set_attr_data(to, s->pool, BA_NEXT_HOP, 0, nh, ipa_nonzero(nh[1]) ? 32 : 16);
 +      bgp_set_attr_data(to, BA_NEXT_HOP, 0, nh, ipa_nonzero(nh[1]) ? 32 : 16);
        s->local_next_hop = 1;
  
-       /* TODO: Use local MPLS assigned label */
        if (s->mpls)
        {
-       u32 implicit_null = BGP_MPLS_NULL;
-       bgp_set_attr_data(to, BA_MPLS_LABEL_STACK, 0, &implicit_null, 4);
 -      u32 label = ea_get_int(s->route->attrs->eattrs, EA_MPLS_LABEL, BGP_MPLS_NULL);
 -      bgp_set_attr_data(to, s->pool, BA_MPLS_LABEL_STACK, 0, &label, 4);
++      u32 label = ea_get_int(s->route->attrs, &ea_gen_mpls_label, BGP_MPLS_NULL);
++      bgp_set_attr_data(to, BA_MPLS_LABEL_STACK, 0, &label, 4);
        }
        else
 -      bgp_unset_attr(to, s->pool, BA_MPLS_LABEL_STACK);
 +      bgp_unset_attr(to, BA_MPLS_LABEL_STACK);
      }
    }