]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: Add `behavior usid` command to VTY
authorCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Thu, 27 Oct 2022 18:08:40 +0000 (20:08 +0200)
committerCarmine Scarpitta <carmine.scarpitta@uniroma2.it>
Tue, 8 Nov 2022 21:44:24 +0000 (22:44 +0100)
Install a new command `behavior usid` into the `SRV6_LOC_NODE` CLI node.

This command allows the user to set/unset the `SRV6_LOCATOR_USID` flag
for an SRv6 locator. The `SRV6_LOCATOR_USID` flag indicates whether a
locator is a uSID locator or not. When the flag is set, the routing
daemons (e.g., bgpd) will install SRv6 behaviors with the uSID in the
dataplane.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
zebra/zebra_srv6_vty.c

index 956669af5606063fdf5f6c7bd207e3a7eb90eadf..88922607e86e937be2752405093114f1d39eb142 100644 (file)
@@ -374,6 +374,38 @@ DEFPY (locator_prefix,
        return CMD_SUCCESS;
 }
 
+DEFPY (locator_behavior,
+       locator_behavior_cmd,
+       "[no] behavior usid",
+       NO_STR
+       "Configure SRv6 behavior\n"
+       "Specify SRv6 behavior uSID\n")
+{
+       VTY_DECLVAR_CONTEXT(srv6_locator, locator);
+
+       if (no && !CHECK_FLAG(locator->flags, SRV6_LOCATOR_USID))
+               /* SRv6 locator uSID flag already unset, nothing to do */
+               return CMD_SUCCESS;
+
+       if (!no && CHECK_FLAG(locator->flags, SRV6_LOCATOR_USID))
+               /* SRv6 locator uSID flag already set, nothing to do */
+               return CMD_SUCCESS;
+
+       /* Remove old locator from zclients */
+       zebra_notify_srv6_locator_delete(locator);
+
+       /* Set/Unset the SRV6_LOCATOR_USID */
+       if (no)
+               UNSET_FLAG(locator->flags, SRV6_LOCATOR_USID);
+       else
+               SET_FLAG(locator->flags, SRV6_LOCATOR_USID);
+
+       /* Notify the new locator to zclients */
+       zebra_notify_srv6_locator_add(locator);
+
+       return CMD_SUCCESS;
+}
+
 static int zebra_sr_config(struct vty *vty)
 {
        struct zebra_srv6 *srv6 = zebra_srv6_get_default();
@@ -404,6 +436,8 @@ static int zebra_sr_config(struct vty *vty)
                        if (locator->argument_bits_length)
                                vty_out(vty, " arg-len %u",
                                        locator->argument_bits_length);
+                       if (CHECK_FLAG(locator->flags, SRV6_LOCATOR_USID))
+                               vty_out(vty, "    behavior usid");
                        vty_out(vty, "\n");
                        vty_out(vty, "   exit\n");
                        vty_out(vty, "   !\n");
@@ -440,6 +474,7 @@ void zebra_srv6_vty_init(void)
 
        /* Command for configuration */
        install_element(SRV6_LOC_NODE, &locator_prefix_cmd);
+       install_element(SRV6_LOC_NODE, &locator_behavior_cmd);
 
        /* Command for operation */
        install_element(VIEW_NODE, &show_srv6_locator_cmd);