]> git.puffer.fish Git - matthieu/frr.git/commitdiff
staticd: Extend CLI to configure an SRv6 uA SID
authorCarmine Scarpitta <cscarpit@cisco.com>
Thu, 13 Feb 2025 10:04:03 +0000 (11:04 +0100)
committerCarmine Scarpitta <cscarpit@cisco.com>
Wed, 26 Feb 2025 06:19:52 +0000 (07:19 +0100)
This commit extends the STATIC CLI to support the configuration of uA
SIDs.

```
router(config)# sid fcbb:bbbb:1:fe00::/64 locator MAIN behavior uA interface sr0 nexthop 2001::2
```

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
staticd/static_vty.c

index 5c19d238835a5ffe26d043cc91c2ad1d68f630c6..ad4ef87319cae25f8375b8a1cb9a6f5807d72e20 100644 (file)
@@ -1199,13 +1199,18 @@ DEFUN_NOSH (static_srv6_sids, static_srv6_sids_cmd,
 }
 
 DEFPY_YANG(srv6_sid, srv6_sid_cmd,
-      "sid X:X::X:X/M locator NAME$locator_name behavior <uN | uDT6 vrf VIEWVRFNAME | uDT4 vrf VIEWVRFNAME | uDT46 vrf VIEWVRFNAME>",
+      "sid X:X::X:X/M locator NAME$locator_name behavior <uN | uA interface INTERFACE$interface [nexthop X:X::X:X$nh6] | uDT6 vrf VIEWVRFNAME | uDT4 vrf VIEWVRFNAME | uDT46 vrf VIEWVRFNAME>",
          "Configure SRv6 SID\n"
       "Specify SRv6 SID\n"
          "Locator name\n"
       "Specify Locator name\n"
       "Specify SRv6 SID behavior\n"
       "Apply the code to a uN SID\n"
+      "Behavior uA\n"
+      "Configure the interface\n"
+      "Interface name\n"
+      "Configure the nexthop\n"
+      "IPv6 address of the nexthop\n"
       "Apply the code to an uDT6 SID\n"
       "Configure VRF name\n"
       "Specify VRF name\n"
@@ -1223,7 +1228,10 @@ DEFPY_YANG(srv6_sid, srv6_sid_cmd,
        char xpath_sid[XPATH_MAXLEN];
        char xpath_behavior[XPATH_MAXLEN];
        char xpath_vrf_name[XPATH_MAXLEN];
+       char xpath_ifname[XPATH_MAXLEN];
+       char xpath_nexthop[XPATH_MAXLEN];
        char xpath_locator_name[XPATH_MAXLEN];
+       char ab_xpath[XPATH_MAXLEN];
 
        if (argv_find(argv, argc, "uN", &idx)) {
                behavior = SRV6_ENDPOINT_BEHAVIOR_END_NEXT_CSID;
@@ -1236,6 +1244,8 @@ DEFPY_YANG(srv6_sid, srv6_sid_cmd,
        } else if (argv_find(argv, argc, "uDT46", &idx)) {
                behavior = SRV6_ENDPOINT_BEHAVIOR_END_DT46_USID;
                vrf_name = argv[idx + 2]->arg;
+       } else if (argv_find(argv, argc, "uA", &idx)) {
+               behavior = SRV6_ENDPOINT_BEHAVIOR_END_X_NEXT_CSID;
        }
 
        snprintf(xpath_srv6, sizeof(xpath_srv6), FRR_STATIC_SRV6_INFO_KEY_XPATH,
@@ -1259,6 +1269,22 @@ DEFPY_YANG(srv6_sid, srv6_sid_cmd,
                nb_cli_enqueue_change(vty, xpath_vrf_name, NB_OP_MODIFY, vrf_name);
        }
 
+       if (interface) {
+               snprintf(ab_xpath, sizeof(ab_xpath), FRR_STATIC_SRV6_SID_INTERFACE_XPATH, 0);
+               strlcpy(xpath_ifname, xpath_sid, sizeof(xpath_ifname));
+               strlcat(xpath_ifname, ab_xpath, sizeof(xpath_ifname));
+
+               nb_cli_enqueue_change(vty, xpath_ifname, NB_OP_MODIFY, interface);
+       }
+
+       if (nh6_str) {
+               snprintf(ab_xpath, sizeof(ab_xpath), FRR_STATIC_SRV6_SID_NEXTHOP_XPATH, 0);
+               strlcpy(xpath_nexthop, xpath_sid, sizeof(xpath_nexthop));
+               strlcat(xpath_nexthop, ab_xpath, sizeof(xpath_nexthop));
+
+               nb_cli_enqueue_change(vty, xpath_nexthop, NB_OP_MODIFY, nh6_str);
+       }
+
        strlcpy(xpath_locator_name, xpath_sid, sizeof(xpath_locator_name));
        strlcat(xpath_locator_name, FRR_STATIC_SRV6_SID_LOCATOR_NAME_XPATH,
                sizeof(xpath_locator_name));