Skip to content

[Cisco][fboss2-dev] Add SRv6 MySID configuration support - #1426

Open
selekkala wants to merge 3 commits into
facebook:mainfrom
selekkala:srv6-mysid-cli
Open

[Cisco][fboss2-dev] Add SRv6 MySID configuration support#1426
selekkala wants to merge 3 commits into
facebook:mainfrom
selekkala:srv6-mysid-cli

Conversation

@selekkala

@selekkala selekkala commented Jul 28, 2026

Copy link
Copy Markdown

Pre-submission checklist

  • I've ran the linters locally and fixed lint errors related to the files I modified in this PR. You can install the linters by running pip install -r requirements-dev.txt && pre-commit install
  • pre-commit run

Summary

FBOSS currently lacks an fboss2-dev workflow for configuring SRv6 MySID entries. This makes it difficult for operators to initialize a locator and manage adjacency, node, and decapsulation entries through the configuration session CLI.

This change:

  • Adds fboss2-dev commands to initialize SRv6 MySID configuration and add or delete adjacency, node, and decap entries.
  • Adds support for deleting the complete MySID configuration.
  • Validates IPv6 /32 locator prefixes, function IDs, entry-specific arguments, and locator consistency.
  • Synchronizes static MySID switch state from the RIB after configuration updates.
  • Defers SAI programming for unresolved node micro-SIDs until resolution.
  • Registers the new commands and tests in the CMake and BUCK builds.
  • Adds CLI, configuration-application, and SAI manager unit coverage.

New CLI commands

  1. fboss2-dev config srv6 my-sid <locator-prefix>
  2. fboss2-dev config srv6 my-sid <locator-prefix> add entry <function> type adjacency is-v6 <true|false> port-name <port>
  3. fboss2-dev config srv6 my-sid <locator-prefix> add entry <function> type node node-address <IPv6-address>
  4. fboss2-dev config srv6 my-sid <locator-prefix> add entry <function> type decap
  5. fboss2-dev config srv6 my-sid <locator-prefix> delete entry <function>
  6. fboss2-dev delete srv6 my-sid <locator-prefix>

Test Plan

  • Compiled the relevant SRv6 CLI and test translation units with the repository-generated CMake flags, including -Wall -Werror.

  • Ran the focused CLI suite:

    ./fboss2_cmd_config_test \
      --gtest_filter='CmdConfigSrv6MySidTestFixture.*' \
      --gtest_color=no
  • Result: all 25 tests passed in 3.471 seconds.

    • Positive and behavioral scenarios: 9
    • Negative and edge-case scenarios: 16
  • Coverage includes every new command path, invalid or missing arguments, missing configuration, locator-prefix mismatch, and update/delete behavior.

  • Integrated the changes into FBOSS and verified the SRv6 MySID CLI workflows on a Cisco 8501 switch.

Clean GoogleTest log
[==========] Running 25 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 25 tests from CmdConfigSrv6MySidTestFixture
[ RUN      ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_valid
[TEST] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_valid | Valid IPv6 /32 locator prefix is accepted by LocatorPrefixArg
[RESULT] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_valid => PASS (528 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_valid (528 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_notIPv6
[TEST] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_notIPv6 | Rejects non-IPv6 prefix (192.168.1.0/24)
[RESULT] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_notIPv6 => PASS (112 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_notIPv6 (112 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_invalid
[TEST] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_invalid | Rejects malformed prefix string
[RESULT] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_invalid => PASS (119 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_invalid (119 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_unsupportedLength
[TEST] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_unsupportedLength | Rejects IPv6 locator prefixes other than /32
[RESULT] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_unsupportedLength => PASS (129 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_unsupportedLength (129 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_missing
[TEST] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_missing | Rejects missing locator prefix argument
[RESULT] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_missing => PASS (122 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.locatorPrefixArg_missing (122 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidInit_createsConfig
[TEST] CmdConfigSrv6MySidTestFixture.mySidInit_createsConfig | config srv6 my-sid <prefix> creates empty mySidConfig in session
[RESULT] CmdConfigSrv6MySidTestFixture.mySidInit_createsConfig => PASS (116 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidInit_createsConfig (116 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidInit_rejectsSecondInit
[TEST] CmdConfigSrv6MySidTestFixture.mySidInit_rejectsSecondInit | Second config srv6 my-sid init for same prefix is rejected
[RESULT] CmdConfigSrv6MySidTestFixture.mySidInit_rejectsSecondInit => PASS (137 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidInit_rejectsSecondInit (137 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_validAdjacency
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_validAdjacency | Parses add entry adjacency args (fn, is-v6, port-name)
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_validAdjacency => PASS (109 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_validAdjacency (109 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_validNode
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_validNode | Parses add entry node args (fn, node-address)
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_validNode => PASS (115 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_validNode (115 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_validDecap
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_validDecap | Parses add entry decap args (fn only)
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_validDecap => PASS (130 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_validDecap (130 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_noLocatorThrows
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_noLocatorThrows | add entry before my-sid init fails with runtime_error
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_noLocatorThrows => PASS (146 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_noLocatorThrows (146 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidEntry
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidEntry | Rejects function values 0, 99999, and non-numeric abc
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidEntry => PASS (137 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidEntry (137 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_unknownType
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_unknownType | Rejects unknown entry type 'binding'
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_unknownType => PASS (118 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_unknownType (118 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidIsV6
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidIsV6 | Rejects non-boolean is-v6 value on adjacency entry
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidIsV6 => PASS (118 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_invalidIsV6 (118 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_portNameOnNode
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_portNameOnNode | Rejects port-name on node-type entry
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_portNameOnNode => PASS (133 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_portNameOnNode (133 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_nodeAddressOnAdjacency
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_nodeAddressOnAdjacency | Rejects node-address on adjacency-type entry
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_nodeAddressOnAdjacency => PASS (149 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_nodeAddressOnAdjacency (149 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_insertsEntry
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_insertsEntry | add entry adjacency stages entry in session mySidConfig
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_insertsEntry => PASS (157 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_insertsEntry (157 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_prefixMismatch
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_prefixMismatch | add entry with wrong locator prefix is rejected
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_prefixMismatch => PASS (117 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_prefixMismatch (117 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidAdd_upserts
[TEST] CmdConfigSrv6MySidTestFixture.mySidAdd_upserts | Re-adding same function ID overwrites prior entry with warning
[RESULT] CmdConfigSrv6MySidTestFixture.mySidAdd_upserts => PASS (107 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidAdd_upserts (107 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_removesEntry
[TEST] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_removesEntry | config srv6 my-sid <prefix> delete entry <fn> removes entry
[RESULT] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_removesEntry => PASS (108 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_removesEntry (108 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenMissing
[TEST] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenMissing | delete entry for missing function ID returns informational message
[RESULT] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenMissing => PASS (123 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenMissing (123 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenNoConfig
[TEST] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenNoConfig | delete entry with no mySidConfig returns informational message
[RESULT] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenNoConfig => PASS (103 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.mySidDeleteEntry_noOpWhenNoConfig (103 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.deleteMySid_removesEntireConfig
[TEST] CmdConfigSrv6MySidTestFixture.deleteMySid_removesEntireConfig | delete srv6 my-sid <prefix> removes entire mySidConfig block
[RESULT] CmdConfigSrv6MySidTestFixture.deleteMySid_removesEntireConfig => PASS (111 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.deleteMySid_removesEntireConfig (111 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.deleteMySid_wrongPrefix
[TEST] CmdConfigSrv6MySidTestFixture.deleteMySid_wrongPrefix | delete srv6 my-sid with mismatched prefix is rejected
[RESULT] CmdConfigSrv6MySidTestFixture.deleteMySid_wrongPrefix => PASS (113 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.deleteMySid_wrongPrefix (113 ms)
[ RUN      ] CmdConfigSrv6MySidTestFixture.deleteMySid_noConfig
[TEST] CmdConfigSrv6MySidTestFixture.deleteMySid_noConfig | delete srv6 my-sid when nothing configured returns informational message
[RESULT] CmdConfigSrv6MySidTestFixture.deleteMySid_noConfig => PASS (103 ms)
[       OK ] CmdConfigSrv6MySidTestFixture.deleteMySid_noConfig (103 ms)
[----------] 25 tests from CmdConfigSrv6MySidTestFixture (3471 ms total)
[----------] Global test environment tear-down
[==========] 25 tests from 1 test suite ran. (3471 ms total)
[  PASSED  ] 25 tests.
UT_logs_from_fboss_switch
### HELP COMMANDS ###
$ fboss2-dev config --help
Configuration commands
Usage: fboss2-dev config [OPTIONS] [SUBCOMMAND]

Options:
  -h,--help                   Print this help message and exit

Subcommands:
  acl                         Configure ACL settings
  applied-info                Show config applied information
  arp                         Configure ARP settings
  copp                        Configure CoPP (control-plane policing) settings
  dhcp                        Configure DHCP settings
  history                     Show history of committed config revisions
  interface                   Configure interface settings
  l2                          Configure L2 settings
  load-balancing              Configure load-balancing (ECMP/LAG) settings
  mac                         Configure MAC settings
  protocol                    Configure protocol settings
  ptp                         Configure PTP settings
  qos                         Configure QoS settings
  reload                      Reload agent configuration
  rollback                    Rollback to a previous config revision
  session                     Manage config session
  srv6                        Configure SRv6 MySID settings
  switch                      Configure switch-level settings
  tunnel                      Configure tunnel settings
  vlan                        Configure VLAN settings

$ fboss2-dev config srv6 --help
Configure SRv6 MySID settings
Usage: fboss2-dev config srv6 [OPTIONS] [SUBCOMMAND]

Options:
  -h,--help                   Print this help message and exit

Subcommands:
  my-sid                      Init or manage MySID entries under a locator prefix

$ fboss2-dev config srv6 my-sid --help
Init or manage MySID entries under a locator prefix
Usage: fboss2-dev config srv6 my-sid [OPTIONS] [prefix...] [SUBCOMMAND]

Positionals:
  prefix TEXT ...             SRv6 /32 locator prefix (e.g. fdad:ffff::/32)

Options:
  -h,--help                   Print this help message and exit

Subcommands:
  add                         Add uA/uN/uDT46 entry: add entry <fn> type ...
  delete                      Remove one entry: delete entry <fn>

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add --help
Add uA/uN/uDT46 entry: add entry <fn> type ...
Usage: fboss2-dev config srv6 my-sid add [OPTIONS] [entry_args...]

Positionals:
  entry_args TEXT ...         entry <function> type <adjacency|node|decap> [type-specific args]

Options:
  -h,--help                   Print this help message and exit

$ fboss2-dev config srv6 my-sid 3001:db8::/32 delete --help
Remove one entry: delete entry <fn>
Usage: fboss2-dev config srv6 my-sid delete [OPTIONS] [entry_args...]

Positionals:
  entry_args TEXT ...         entry <function>

Options:
  -h,--help                   Print this help message and exit

$ fboss2-dev delete srv6 --help
Delete SRv6 MySID configuration
Usage: fboss2-dev delete srv6 [OPTIONS] [SUBCOMMAND]

Options:
  -h,--help                   Print this help message and exit

Subcommands:
  my-sid                      Remove entire mySidConfig block for <prefix>

$ fboss2-dev delete srv6 my-sid --help
Remove entire mySidConfig block for <prefix>
Usage: fboss2-dev delete srv6 my-sid [OPTIONS] [prefix...]

Positionals:
  prefix TEXT ...             SRv6 /32 locator prefix (e.g. fdad:ffff::/32)

Options:
  -h,--help                   Print this help message and exit

$ fboss2-dev config session --help
Manage config session
Usage: fboss2-dev config session [OPTIONS] SUBCOMMAND

Options:
  -h,--help                   Print this help message and exit

Subcommands:
  clear                       Clear the current config session
  commit                      Commit the current config session
  diff                        Show diff between configs (session vs live, session vs revision, or revision vs revision)
  rebase                      Rebase session changes onto current HEAD

### EMPTY MYSID BASELINE ###
$ fboss2-dev show mysid

$ fboss2-dev config session diff
No differences between current live config and session config.

### EMPTY-CONFIG AND LOCATOR VALIDATION ###
$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 10 type decap
Thrift call failed: 'No SRv6 MySID configured. Run: config srv6 my-sid <prefix> first.'

$ fboss2-dev config srv6 my-sid
Invalid argument: Expected exactly one locator prefix argument, got 0

$ fboss2-dev config srv6 my-sid not-a-prefix
Invalid argument: Invalid locator prefix 'not-a-prefix': Invalid IP address not-a-prefix

$ fboss2-dev config srv6 my-sid 192.168.1.0/24
Invalid argument: Locator prefix must be IPv6, got '192.168.1.0/24'

$ fboss2-dev config srv6 my-sid 3001:db8::/33
Invalid argument: SRv6 locator prefix length must be /32, got /33 in '3001:db8::/33'

$ fboss2-dev config srv6 my-sid 3001:db8::/120
Invalid argument: SRv6 locator prefix length must be /32, got /120 in '3001:db8::/120'

$ fboss2-dev config session diff
No differences between current live config and session config.

### INITIALIZE AND ADD ALL POSITIVE CLI TYPES ###
$ fboss2-dev config srv6 my-sid 3001:db8::/32
Successfully initialized SRv6 MySID with locator 3001:db8::/32

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 1 type adjacency is-v6 true port-name eth1/6/1
Successfully added adjacency SID: entry=1

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 2 type adjacency is-v6 false port-name eth1/6/5
Successfully added adjacency SID: entry=2

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 3 type node node-address fc00:100::1
Successfully added node SID: entry=3

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 32767 type decap
Successfully added decap SID: entry=32767

$ fboss2-dev config session diff
--- current live config
+++ session config
@@ -1747,6 +1747,31 @@
     "maxNeighborProbes": 300,
     "mirrorOnDropReports": [],
     "mirrors": [],
+    "mySidConfig": {
+      "entries": {
+        "1": {
+          "adjacency": {
+            "isV6": true,
+            "portName": "eth1/6/1"
+          }
+        },
+        "2": {
+          "adjacency": {
+            "isV6": false,
+            "portName": "eth1/6/5"
+          }
+        },
+        "3": {
+          "node": {
+            "nodeAddress": "fc00:100::1"
+          }
+        },
+        "32767": {
+          "decap": {}
+        }
+      },
+      "locatorPrefix": "3001:db8::/32"
+    },
     "portQueueConfigs": {},
     "ports": [
       {

$ fboss2-dev config session commit
Config session committed successfully as f69a8ef and config reloaded for fboss_sw_agent.

# fboss_sw_agent restarted before show verification
$ fboss2-dev show mysid
MySid: 3001:db8:1::/48  Type: ADJACENCY_MICRO_SID
MySid: 3001:db8:2::/48  Type: ADJACENCY_MICRO_SID
MySid: 3001:db8:3::/48  Type: NODE_MICRO_SID
MySid: 3001:db8:7fff::/48  Type: DECAPSULATE_AND_LOOKUP

### SECOND INITIALIZATION, UPSERT, AND SESSION CLEAR ###
$ fboss2-dev config srv6 my-sid 3001:db8::/32
Thrift call failed: 'SRv6 MySID already configured with 3001:db8::/32. Run: delete srv6 my-sid 3001:db8::/32 first.'

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 1 type decap
Warning: MySID entry 1 overwritten with new decap SID

$ fboss2-dev config session diff
--- current live config
+++ session config
@@ -1750,10 +1750,7 @@
     "mySidConfig": {
       "entries": {
         "1": {
-          "adjacency": {
-            "isV6": true,
-            "portName": "eth1/6/1"
-          }
+          "decap": {}
         },
         "2": {
           "adjacency": {

$ fboss2-dev config session clear
Config session cleared successfully.

$ fboss2-dev config session diff
No differences between current live config and session config.

### NEGATIVE AND ERROR CASES ###
$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 0 type decap
Invalid argument: MySID function value must be in range [1, 32767], got 0

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 32768 type decap
Invalid argument: MySID function value must be in range [1, 32767], got 32768

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry abc type decap
Invalid argument: Invalid MySID function value 'abc': must be an integer

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 5 type binding
Invalid argument: Unknown MySID type 'binding'

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 5 type adjacency is-v6 maybe port-name eth1/6/1
Invalid argument: Invalid is-v6 value 'maybe': must be true or false

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 5 type node node-address 192.0.2.1
Invalid argument: Invalid node-address '192.0.2.1': node-address must be IPv6, got '192.0.2.1'

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 5 type node port-name eth1/6/1
Invalid argument: Expected 'node-address', got 'port-name'

$ fboss2-dev config srv6 my-sid 3001:db8::/32 add entry 5 type adjacency is-v6 true node-address 2001:db8::1
Invalid argument: Expected 'port-name', got 'node-address'

$ fboss2-dev config srv6 my-sid 3001:db9::/32 add entry 5 type decap
Thrift call failed: 'Locator 3001:db9::/32 does not match configured 3001:db8::/32'

$ fboss2-dev config srv6 my-sid 3001:db8::/32 delete entry 32768
Invalid argument: MySID function value must be in range [1, 32767], got 32768

$ fboss2-dev delete srv6 my-sid 3001:db9::/32
Thrift call failed: 'No MySID config for 3001:db9::/32 (configured: 3001:db8::/32)'

$ fboss2-dev config session diff
No differences between current live config and session config.

### DELETE MISSING AND EXISTING ENTRY ###
$ fboss2-dev config srv6 my-sid 3001:db8::/32 delete entry 99
MySID entry 99 does not exist

$ fboss2-dev config session diff
No differences between current live config and session config.

$ fboss2-dev config srv6 my-sid 3001:db8::/32 delete entry 2
Successfully deleted MySID entry 2

$ fboss2-dev config session diff
--- current live config
+++ session config
@@ -1755,12 +1755,6 @@
             "portName": "eth1/6/1"
           }
         },
-        "2": {
-          "adjacency": {
-            "isV6": false,
-            "portName": "eth1/6/5"
-          }
-        },
         "3": {
           "node": {
             "nodeAddress": "fc00:100::1"

$ fboss2-dev config session commit
Config session committed successfully as b94051e and config reloaded for fboss_sw_agent.

# fboss_sw_agent restarted before show verification
$ fboss2-dev show mysid
MySid: 3001:db8:1::/48  Type: ADJACENCY_MICRO_SID
MySid: 3001:db8:3::/48  Type: NODE_MICRO_SID
MySid: 3001:db8:7fff::/48  Type: DECAPSULATE_AND_LOOKUP

### DELETE ENTIRE MYSID CONFIGURATION ###
$ fboss2-dev delete srv6 my-sid 3001:db8::/32
Successfully deleted SRv6 MySID configuration for 3001:db8::/32

$ fboss2-dev config session diff
--- current live config
+++ session config
@@ -1747,25 +1747,6 @@
     "maxNeighborProbes": 300,
     "mirrorOnDropReports": [],
     "mirrors": [],
-    "mySidConfig": {
-      "entries": {
-        "1": {
-          "adjacency": {
-            "isV6": true,
-            "portName": "eth1/6/1"
-          }
-        },
-        "3": {
-          "node": {
-            "nodeAddress": "fc00:100::1"
-          }
-        },
-        "32767": {
-          "decap": {}
-        }
-      },
-      "locatorPrefix": "3001:db8::/32"
-    },
     "portQueueConfigs": {},
     "ports": [
       {

$ fboss2-dev config session commit
Config session committed successfully as f27a592 and config reloaded for fboss_sw_agent.

# fboss_sw_agent restarted before show verification
$ fboss2-dev show mysid

### DELETE WHEN NO MYSID CONFIGURATION EXISTS ###
$ fboss2-dev config srv6 my-sid 3001:db8::/32 delete entry 1
MySID entry 1 does not exist (no mySidConfig configured)

$ fboss2-dev delete srv6 my-sid 3001:db8::/32
No MySID config for 3001:db8::/32 (nothing configured)

$ fboss2-dev config session diff
No differences between current live config and session config.

Summary:
- Add fboss2 commands to initialize SRv6 MySID configuration and add or
  delete adjacency, node, and decap entries.
- Add support for deleting the complete MySID configuration.
- Validate IPv6 /32 locator prefixes, function IDs, entry-specific
  arguments, and locator consistency.
- Synchronize static MySID switch state from the RIB after configuration
  updates.
- Defer SAI programming for unresolved node micro-SIDs until resolution.
- Register the new commands and tests in the CMake and BUCK builds.
- Add CLI, configuration-application, and SAI manager unit coverage.

Test Plan:
- Compiled the relevant SRv6 CLI and test sources with -Wall -Werror.
- Ran CmdConfigSrv6MySidTestFixture.*.
- All 25 tests passed, covering every new command and positive, negative,
  validation, missing-configuration, and prefix-mismatch scenarios.
- Integrated the changes into FBOSS and verified the SRv6 MySID CLI
  workflows on a Cisco 8501 switch.
@selekkala
selekkala requested review from a team as code owners July 28, 2026 01:19
@meta-cla

meta-cla Bot commented Jul 28, 2026

Copy link
Copy Markdown

Hi @selekkala!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

@srikrishnagopu
srikrishnagopu self-requested a review July 28, 2026 05:01
@selekkala selekkala changed the title Add SRv6 MySID configuration support [Cisco][fboss2-dev] Add SRv6 MySID configuration support Jul 28, 2026
@github-actions github-actions Bot added the cisco label Jul 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant