]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Merge commit '5c04f0e2354ff0cca9b1479e68882b72755f3aab' into thread-next
authorOndrej Zajicek <santiago@crfreenet.org>
Thu, 28 Mar 2024 19:00:50 +0000 (20:00 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Thu, 28 Mar 2024 19:00:50 +0000 (20:00 +0100)
(No need for deprecated names in BIRD 3.)

1  2 
doc/bird.sgml
sysdep/linux/netlink.Y
sysdep/linux/netlink.c

diff --cc doc/bird.sgml
Simple merge
index bf5f8b3be656783e5f32f25733c5f1f008471e1b,9c820da90c99b851a40b6348c8e5b5eb700607ea..6ba21bb6b88622a3e16a7e2f3ca6834f539133a5
@@@ -10,10 -10,14 +10,10 @@@ CF_HD
  
  CF_DECLS
  
 -CF_KEYWORDS(KERNEL, TABLE, METRIC, NETLINK, RX, BUFFER,
 -          KRT_PREFSRC, KRT_REALM, KRT_SCOPE, KRT_MTU, KRT_WINDOW,
 -          KRT_RTT, KRT_RTTVAR, KRT_SSTHRESH, KRT_CWND, KRT_ADVMSS, KRT_REORDERING,
 -          KRT_HOPLIMIT, KRT_INITCWND, KRT_RTO_MIN, KRT_INITRWND, KRT_QUICKACK,
 -          KRT_CONGCTL, KRT_FASTOPEN_NO_COOKIE)
 +CF_KEYWORDS(KERNEL, TABLE, METRIC, NETLINK, RX, BUFFER)
  
  CF_KEYWORDS(KRT_LOCK_MTU, KRT_LOCK_WINDOW, KRT_LOCK_RTT, KRT_LOCK_RTTVAR,
-           KRT_LOCK_SSTRESH, KRT_LOCK_CWND, KRT_LOCK_ADVMSS, KRT_LOCK_REORDERING,
+           KRT_LOCK_SSTHRESH, KRT_LOCK_CWND, KRT_LOCK_ADVMSS, KRT_LOCK_REORDERING,
            KRT_LOCK_HOPLIMIT, KRT_LOCK_INITCWND, KRT_LOCK_RTO_MIN, KRT_LOCK_INITRWND,
            KRT_LOCK_QUICKACK, KRT_LOCK_CONGCTL, KRT_LOCK_FASTOPEN_NO_COOKIE,
            KRT_FEATURE_ECN, KRT_FEATURE_ALLFRAG)
@@@ -31,30 -36,52 +31,30 @@@ kern_sys_item
   | NETLINK RX BUFFER expr { THIS_KRT->sys.netlink_rx_buffer = $4; }
   ;
  
 -dynamic_attr: KRT_PREFSRC     { $$ = f_new_dynamic_attr(EAF_TYPE_IP_ADDRESS, T_IP, EA_KRT_PREFSRC); } ;
 -dynamic_attr: KRT_REALM       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_REALM); } ;
 -dynamic_attr: KRT_SCOPE       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_SCOPE); } ;
 -
 -dynamic_attr: KRT_MTU         { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_MTU); } ;
 -dynamic_attr: KRT_WINDOW      { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_WINDOW); } ;
 -dynamic_attr: KRT_RTT         { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_RTT); } ;
 -dynamic_attr: KRT_RTTVAR      { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_RTTVAR); } ;
 -dynamic_attr: KRT_SSTHRESH    { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_SSTHRESH); } ;
 -dynamic_attr: KRT_SSTRESH     { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_SSTHRESH);
 -                                cf_warn("Attribute krt_sstresh is deprecated (typo), use krt_ssthresh"); } ;
 -dynamic_attr: KRT_CWND                { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_CWND); } ;
 -dynamic_attr: KRT_ADVMSS      { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_ADVMSS); } ;
 -dynamic_attr: KRT_REORDERING  { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_REORDERING); } ;
 -dynamic_attr: KRT_HOPLIMIT    { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_HOPLIMIT); } ;
 -dynamic_attr: KRT_INITCWND    { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_INITCWND); } ;
 -dynamic_attr: KRT_RTO_MIN     { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_RTO_MIN); } ;
 -dynamic_attr: KRT_INITRWND    { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_INITRWND); } ;
 -dynamic_attr: KRT_QUICKACK    { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_QUICKACK); } ;
 -dynamic_attr: KRT_CONGCTL     { $$ = f_new_dynamic_attr(EAF_TYPE_STRING, T_STRING, EA_KRT_CONGCTL); } ;
 -dynamic_attr: KRT_FASTOPEN_NO_COOKIE { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_FASTOPEN_NO_COOKIE); } ;
 -
  /* Bits of EA_KRT_LOCK, based on RTAX_* constants */
 -
 -dynamic_attr: KRT_LOCK_MTU    { $$ = f_new_dynamic_attr_bit(2, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_WINDOW { $$ = f_new_dynamic_attr_bit(3, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_RTT    { $$ = f_new_dynamic_attr_bit(4, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_RTTVAR { $$ = f_new_dynamic_attr_bit(5, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_SSTHRESH       { $$ = f_new_dynamic_attr_bit(6, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_SSTRESH        { $$ = f_new_dynamic_attr_bit(6, T_BOOL, EA_KRT_LOCK);
 -                                cf_warn("Attribute krt_lock_sstresh is deprecated (typo), use krt_lock_ssthresh"); } ;
 -dynamic_attr: KRT_LOCK_CWND   { $$ = f_new_dynamic_attr_bit(7, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_ADVMSS { $$ = f_new_dynamic_attr_bit(8, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_REORDERING { $$ = f_new_dynamic_attr_bit(9, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_HOPLIMIT       { $$ = f_new_dynamic_attr_bit(10, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_INITCWND       { $$ = f_new_dynamic_attr_bit(11, T_BOOL, EA_KRT_LOCK); } ;
 +attr_bit: KRT_LOCK_MTU                { $$ = f_new_dynamic_attr_bit(2, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_WINDOW     { $$ = f_new_dynamic_attr_bit(3, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_RTT                { $$ = f_new_dynamic_attr_bit(4, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_RTTVAR     { $$ = f_new_dynamic_attr_bit(5, "krt_lock"); } ;
- attr_bit: KRT_LOCK_SSTRESH    { $$ = f_new_dynamic_attr_bit(6, "krt_lock"); } ;
++attr_bit: KRT_LOCK_SSTHRESH   { $$ = f_new_dynamic_attr_bit(6, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_CWND               { $$ = f_new_dynamic_attr_bit(7, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_ADVMSS     { $$ = f_new_dynamic_attr_bit(8, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_REORDERING { $$ = f_new_dynamic_attr_bit(9, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_HOPLIMIT   { $$ = f_new_dynamic_attr_bit(10, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_INITCWND   { $$ = f_new_dynamic_attr_bit(11, "krt_lock"); } ;
  /* No lock for FEATURES bitfield */
 -dynamic_attr: KRT_LOCK_RTO_MIN        { $$ = f_new_dynamic_attr_bit(13, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_INITRWND       { $$ = f_new_dynamic_attr_bit(14, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_QUICKACK       { $$ = f_new_dynamic_attr_bit(15, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_CONGCTL        { $$ = f_new_dynamic_attr_bit(16, T_BOOL, EA_KRT_LOCK); } ;
 -dynamic_attr: KRT_LOCK_FASTOPEN_NO_COOKIE { $$ = f_new_dynamic_attr_bit(17, T_BOOL, EA_KRT_LOCK); } ;
 -
 -dynamic_attr: KRT_FEATURE_ECN { $$ = f_new_dynamic_attr_bit(0, T_BOOL, EA_KRT_FEATURES); } ;
 -dynamic_attr: KRT_FEATURE_ALLFRAG { $$ = f_new_dynamic_attr_bit(3, T_BOOL, EA_KRT_FEATURES); } ;
 -
 +attr_bit: KRT_LOCK_RTO_MIN    { $$ = f_new_dynamic_attr_bit(13, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_INITRWND   { $$ = f_new_dynamic_attr_bit(14, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_QUICKACK   { $$ = f_new_dynamic_attr_bit(15, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_CONGCTL    { $$ = f_new_dynamic_attr_bit(16, "krt_lock"); } ;
 +attr_bit: KRT_LOCK_FASTOPEN_NO_COOKIE { $$ = f_new_dynamic_attr_bit(17, "krt_lock"); } ;
 +
 +/* Bits of EA_KRT_FEATURES */
 +attr_bit: KRT_FEATURE_ECN     { $$ = f_new_dynamic_attr_bit(0, "krt_features"); } ;
 +attr_bit: KRT_FEATURE_ALLFRAG { $$ = f_new_dynamic_attr_bit(3, "krt_features"); } ;
 +
 +/* Using attribute bits in filters (moved here to not confuse Bison on *BSD) */
 +lvalue: attr_bit { $$ = (struct f_lval) { .type = F_LVAL_ATTR_BIT, .fab = $1, .rte = f_new_inst(FI_CURRENT_ROUTE), }; };
  
  CF_CODE
  
index 9eae5a48a1b48c60db4acd31760200ba24427d00,6b4fc80cda2039e8dbdd3587d001c8eb93417467..6b5faeff2457959091fb54c988a9b7f06aa45a76
@@@ -43,107 -42,6 +43,107 @@@ struct nl_parse_stat
    u32 rta_flow;
  };
  
-   KRT_METRIC_INT(RTAX_SSTHRESH, "krt_sstresh"),
 +/*
 + *    Netlink eattr definitions
 + */
 +
 +#define KRT_METRICS_MAX               ARRAY_SIZE(ea_krt_metrics)
 +#define KRT_FEATURES_MAX      4
 +
 +static void krt_bitfield_format(const eattr *e, byte *buf, uint buflen);
 +
 +static struct ea_class
 +  ea_krt_prefsrc = {
 +    .name = "krt_prefsrc",
 +    .type = T_IP,
 +  },
 +  ea_krt_realm = {
 +    .name = "krt_realm",
 +    .type = T_INT,
 +  },
 +  ea_krt_scope = {
 +    .name = "krt_scope",
 +    .type = T_INT,
 +  };
 +
 +static struct ea_class ea_krt_metrics[] = {
 +  [RTAX_LOCK] = {
 +    .name = "krt_lock",
 +    .type = T_INT,
 +    .format = krt_bitfield_format,
 +  },
 +  [RTAX_FEATURES] = {
 +    .name = "krt_features",
 +    .type = T_INT,
 +    .format = krt_bitfield_format,
 +  },
 +  [RTAX_CC_ALGO] = {
 +    .name = "krt_congctl",
 +    .type = T_STRING,
 +  },
 +#define KRT_METRIC_INT(_rtax, _name)  [_rtax] = { .name = _name, .type = T_INT }
 +  KRT_METRIC_INT(RTAX_MTU, "krt_mtu"),
 +  KRT_METRIC_INT(RTAX_WINDOW, "krt_window"),
 +  KRT_METRIC_INT(RTAX_RTT, "krt_rtt"),
 +  KRT_METRIC_INT(RTAX_RTTVAR, "krt_rttvar"),
-   NULL, "lock", "mtu", "window", "rtt", "rttvar", "sstresh", "cwnd", "advmss",
++  KRT_METRIC_INT(RTAX_SSTHRESH, "krt_ssthresh"),
 +  KRT_METRIC_INT(RTAX_CWND, "krt_cwnd"),
 +  KRT_METRIC_INT(RTAX_ADVMSS, "krt_advmss"),
 +  KRT_METRIC_INT(RTAX_REORDERING, "krt_reordering"),
 +  KRT_METRIC_INT(RTAX_HOPLIMIT, "krt_hoplimit"),
 +  KRT_METRIC_INT(RTAX_INITCWND, "krt_initcwnd"),
 +  KRT_METRIC_INT(RTAX_RTO_MIN, "krt_rto_min"),
 +  KRT_METRIC_INT(RTAX_INITRWND, "krt_initrwnd"),
 +  KRT_METRIC_INT(RTAX_QUICKACK, "krt_quickack"),
 +  KRT_METRIC_INT(RTAX_FASTOPEN_NO_COOKIE, "krt_fastopen_no_cookie"),
 +#undef KRT_METRIC_INT
 +};
 +
 +static const char *krt_metrics_names[KRT_METRICS_MAX] = {
++  NULL, "lock", "mtu", "window", "rtt", "rttvar", "ssthresh", "cwnd", "advmss",
 +  "reordering", "hoplimit", "initcwnd", "features", "rto_min", "initrwnd", "quickack",
 +  "congctl", "fastopen_no_cookie"
 +};
 +
 +static const char *krt_features_names[KRT_FEATURES_MAX] = {
 +  "ecn", NULL, NULL, "allfrag"
 +};
 +
 +static void
 +krt_bitfield_format(const eattr *a, byte *buf, uint buflen)
 +{
 +  if (a->id == ea_krt_metrics[RTAX_LOCK].id)
 +    ea_format_bitfield(a, buf, buflen, krt_metrics_names, 2, KRT_METRICS_MAX);
 +  else if (a->id == ea_krt_metrics[RTAX_FEATURES].id)
 +    ea_format_bitfield(a, buf, buflen, krt_features_names, 0, KRT_FEATURES_MAX);
 +}
 +
 +static void
 +nl_ea_register(void)
 +{
 +  EA_REGISTER_ALL(
 +      &ea_krt_prefsrc,
 +      &ea_krt_realm,
 +      &ea_krt_scope
 +      );
 +
 +  for (uint i = 0; i < KRT_METRICS_MAX; i++)
 +  {
 +    if (!ea_krt_metrics[i].name)
 +      ea_krt_metrics[i] = (struct ea_class) {
 +      .name = mb_sprintf(&root_pool, "krt_metric_%d", i),
 +      .type = T_INT,
 +      };
 +
 +    ea_register_init(&ea_krt_metrics[i]);
 +  }
 +
 +  for (uint i = 1; i < KRT_METRICS_MAX; i++)
 +    ASSERT_DIE(ea_krt_metrics[i].id == ea_krt_metrics[0].id + i);
 +}
 +
 +
 +
  /*
   *    Synchronous Netlink interface
   */