]> git.puffer.fish Git - mirror/frr.git/commitdiff
Merge pull request #9546 from proelbtn/add-support-for-perfix-sid-type-5
authorRuss White <russ@riw.us>
Tue, 21 Sep 2021 15:36:53 +0000 (11:36 -0400)
committerGitHub <noreply@github.com>
Tue, 21 Sep 2021 15:36:53 +0000 (11:36 -0400)
Add support for Prefix-SID (Type 5)

1  2 
bgpd/bgp_attr.c
bgpd/bgp_attr.h
bgpd/bgp_mplsvpn.c
bgpd/bgp_mplsvpn.h
bgpd/bgp_route.c
bgpd/bgp_route.h
bgpd/bgp_zebra.c
bgpd/bgpd.h

diff --cc bgpd/bgp_attr.c
Simple merge
diff --cc bgpd/bgp_attr.h
Simple merge
index b0bab02fb8969e9a7a3e29f1a78145be53bd903e,477e43ce9f7ea8196b1132cc138a3654267f2ff9..659029b04ca9d7f28b3f7a6857f2cc3d040066d6
@@@ -824,14 -830,34 +839,35 @@@ leak_update(struct bgp *bgp, /* destina
                 * rewrite sid
                 */
                if (num_sids) {
-                       if (new_attr->srv6_l3vpn)
+                       if (new_attr->srv6_l3vpn) {
                                setsids(bpi, &new_attr->srv6_l3vpn->sid,
                                        num_sids);
-                       else if (new_attr->srv6_vpn)
+                               extra = bgp_path_info_extra_get(bpi);
+                               extra->sid[0].loc_block_len =
+                                       new_attr->srv6_l3vpn->loc_block_len;
+                               extra->sid[0].loc_node_len =
+                                       new_attr->srv6_l3vpn->loc_node_len;
+                               extra->sid[0].func_len =
+                                       new_attr->srv6_l3vpn->func_len;
+                               extra->sid[0].arg_len =
+                                       new_attr->srv6_l3vpn->arg_len;
+                               if (new_attr->srv6_l3vpn->transposition_len
+                                   != 0)
+                                       transpose_sid(
+                                               &extra->sid[0].sid,
+                                               decode_label(label),
+                                               new_attr->srv6_l3vpn
+                                                       ->transposition_offset,
+                                               new_attr->srv6_l3vpn
+                                                       ->transposition_len);
+                       } else if (new_attr->srv6_vpn)
                                setsids(bpi, &new_attr->srv6_vpn->sid,
                                        num_sids);
 -              }
 +              } else
 +                      unsetsids(bpi);
  
                if (nexthop_self_flag)
                        bgp_path_info_set_flag(bn, bpi, BGP_PATH_ANNC_NH_SELF);
         * rewrite sid
         */
        if (num_sids) {
-               if (new_attr->srv6_l3vpn)
+               if (new_attr->srv6_l3vpn) {
                        setsids(new, &new_attr->srv6_l3vpn->sid, num_sids);
-               else if (new_attr->srv6_vpn)
+                       extra = bgp_path_info_extra_get(new);
+                       extra->sid[0].loc_block_len =
+                               new_attr->srv6_l3vpn->loc_block_len;
+                       extra->sid[0].loc_node_len =
+                               new_attr->srv6_l3vpn->loc_node_len;
+                       extra->sid[0].func_len = new_attr->srv6_l3vpn->func_len;
+                       extra->sid[0].arg_len = new_attr->srv6_l3vpn->arg_len;
+                       if (new_attr->srv6_l3vpn->transposition_len != 0)
+                               transpose_sid(&extra->sid[0].sid,
+                                             decode_label(label),
+                                             new_attr->srv6_l3vpn
+                                                     ->transposition_offset,
+                                             new_attr->srv6_l3vpn
+                                                     ->transposition_len);
+               } else if (new_attr->srv6_vpn)
                        setsids(new, &new_attr->srv6_vpn->sid, num_sids);
 -      }
 +      } else
 +              unsetsids(new);
  
        if (num_labels)
                setlabels(new, label, num_labels);
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc bgpd/bgpd.h
Simple merge