Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
893888f
Add a `fboss2 config interface <name> switchport access vlan <N>` com…
benoit-nexthop Jan 5, 2026
844ea4f
Add a unit tests checking the CLI command tree.
benoit-nexthop Jan 9, 2026
af3fdd8
Save the config commands to CLI metadata and in session commit.
benoit-nexthop Jan 13, 2026
2fd4452
Replace file-based config versioning with Git
benoit-nexthop Jan 19, 2026
eb6a123
Add `config session rebase` command for concurrent session conflict r…
benoit-nexthop Jan 23, 2026
b906406
Add CLI command for managing static MAC entries on VLANs
manoharan-nexthop Jan 27, 2026
fcaaa90
NOS-4057: Add show running-config CLI command (#382)
benoit-nexthop Jan 28, 2026
57f2788
Add CLI commands for configuring priority group policies
benoit-nexthop Jan 24, 2026
31f1176
Add CLI commands for configuring per-port PFC settings
benoit-nexthop Feb 2, 2026
baaf124
Add CLI commands for configuring port queue configs (queuing-policy)
benoit-nexthop Feb 2, 2026
5ad8716
Add active-queue-management (AQM) support to queuing-policy queue-id CLI
benoit-nexthop Jan 29, 2026
8e54af4
Add config interface queuing-policy CLI command
benoit-nexthop Jan 29, 2026
0287957
Add QoS policy map configuration commands
benoit-nexthop Jan 29, 2026
9028c1a
Rewrite fboss2-dev CLI end-to-end tests in C++ with gtest
benoit-nexthop Feb 3, 2026
ffd4d0e
Add CLI commands: config vlan port taggingMode and config l2 learning…
manoharan-nexthop Feb 3, 2026
f1533ef
Add dscp, exp, and dot1p map configuration commands
benoit-nexthop Feb 5, 2026
932b694
Consolidate interface description and MTU config commands into one cp…
hillol-nexthop Feb 10, 2026
b9b0542
Move explicit template instantiations to individual files
manoharan-nexthop Feb 11, 2026
17ab4f8
Add a command for clearing the session
hillol-nexthop Feb 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 53 additions & 6 deletions cmake/CliFboss2.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,8 @@ add_library(fboss2_lib
fboss/cli/fboss2/commands/show/interface/prbs/stats/CmdShowInterfacePrbsStats.h
fboss/cli/fboss2/commands/show/rif/CmdShowRif.h
fboss/cli/fboss2/commands/show/rif/CmdShowRif.cpp
fboss/cli/fboss2/commands/show/running_config/CmdShowRunningConfig.cpp
fboss/cli/fboss2/commands/show/running_config/CmdShowRunningConfig.h
fboss/cli/fboss2/commands/show/sdk/dump/CmdShowSdkDump.h
fboss/cli/fboss2/commands/show/sdk/dump/CmdShowSdkDump.cpp
fboss/cli/fboss2/commands/show/systemport/CmdShowSystemPort.h
Expand All @@ -517,6 +519,7 @@ add_library(fboss2_lib
fboss/cli/fboss2/commands/show/transceiver/CmdShowTransceiver.cpp
fboss/cli/fboss2/commands/start/pcap/CmdStartPcap.h
fboss/cli/fboss2/commands/stop/pcap/CmdStopPcap.h
fboss/cli/fboss2/CliAppInit.h
fboss/cli/fboss2/CmdSubcommands.cpp
fboss/cli/fboss2/oss/CmdGlobalOptions.cpp
fboss/cli/fboss2/oss/CmdList.cpp
Expand Down Expand Up @@ -628,28 +631,72 @@ add_library(fboss2_config_lib
fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.cpp
fboss/cli/fboss2/commands/config/CmdConfigReload.h
fboss/cli/fboss2/commands/config/CmdConfigReload.cpp
fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.cpp
fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.h
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.h
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.cpp
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceMtu.h
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceMtu.cpp
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceQueuingPolicy.cpp
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceQueuingPolicy.h
fboss/cli/fboss2/commands/config/interface/pfc_config/CmdConfigInterfacePfcConfig.cpp
fboss/cli/fboss2/commands/config/interface/pfc_config/CmdConfigInterfacePfcConfig.h
fboss/cli/fboss2/commands/config/interface/pfc_config/PfcConfigUtils.h
fboss/cli/fboss2/commands/config/interface/switchport/CmdConfigInterfaceSwitchport.cpp
fboss/cli/fboss2/commands/config/interface/switchport/CmdConfigInterfaceSwitchport.h
fboss/cli/fboss2/commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.cpp
fboss/cli/fboss2/commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.h
fboss/cli/fboss2/commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.cpp
fboss/cli/fboss2/commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h
fboss/cli/fboss2/commands/config/l2/CmdConfigL2.cpp
fboss/cli/fboss2/commands/config/l2/CmdConfigL2.h
fboss/cli/fboss2/commands/config/l2/learning_mode/CmdConfigL2LearningMode.h
fboss/cli/fboss2/commands/config/l2/learning_mode/CmdConfigL2LearningMode.cpp
fboss/cli/fboss2/commands/config/qos/CmdConfigQos.cpp
fboss/cli/fboss2/commands/config/qos/CmdConfigQos.h
fboss/cli/fboss2/commands/config/qos/buffer_pool/CmdConfigQosBufferPool.cpp
fboss/cli/fboss2/commands/config/qos/buffer_pool/CmdConfigQosBufferPool.h
fboss/cli/fboss2/commands/config/qos/policy/CmdConfigQosPolicy.cpp
fboss/cli/fboss2/commands/config/qos/policy/CmdConfigQosPolicy.h
fboss/cli/fboss2/commands/config/qos/policy/CmdConfigQosPolicyMap.cpp
fboss/cli/fboss2/commands/config/qos/policy/CmdConfigQosPolicyMap.h
fboss/cli/fboss2/commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicy.cpp
fboss/cli/fboss2/commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicy.h
fboss/cli/fboss2/commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicyGroupId.cpp
fboss/cli/fboss2/commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicyGroupId.h
fboss/cli/fboss2/commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicy.cpp
fboss/cli/fboss2/commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicy.h
fboss/cli/fboss2/commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicyQueueId.cpp
fboss/cli/fboss2/commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicyQueueId.h
fboss/cli/fboss2/commands/config/history/CmdConfigHistory.h
fboss/cli/fboss2/commands/config/history/CmdConfigHistory.cpp
fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h
fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.cpp
fboss/cli/fboss2/commands/config/session/CmdConfigSessionClear.h
fboss/cli/fboss2/commands/config/session/CmdConfigSessionClear.cpp
fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h
fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.cpp
fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h
fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.cpp
fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.h
fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.cpp
fboss/cli/fboss2/commands/config/vlan/CmdConfigVlan.cpp
fboss/cli/fboss2/commands/config/vlan/CmdConfigVlan.h
fboss/cli/fboss2/commands/config/vlan/port/CmdConfigVlanPort.cpp
fboss/cli/fboss2/commands/config/vlan/port/CmdConfigVlanPort.h
fboss/cli/fboss2/commands/config/vlan/port/tagging_mode/CmdConfigVlanPortTaggingMode.h
fboss/cli/fboss2/commands/config/vlan/port/tagging_mode/CmdConfigVlanPortTaggingMode.cpp
fboss/cli/fboss2/commands/config/vlan/static_mac/CmdConfigVlanStaticMac.cpp
fboss/cli/fboss2/commands/config/vlan/static_mac/CmdConfigVlanStaticMac.h
fboss/cli/fboss2/commands/config/vlan/static_mac/add/CmdConfigVlanStaticMacAdd.h
fboss/cli/fboss2/commands/config/vlan/static_mac/add/CmdConfigVlanStaticMacAdd.cpp
fboss/cli/fboss2/commands/config/vlan/static_mac/delete/CmdConfigVlanStaticMacDelete.h
fboss/cli/fboss2/commands/config/vlan/static_mac/delete/CmdConfigVlanStaticMacDelete.cpp
fboss/cli/fboss2/session/ConfigSession.h
fboss/cli/fboss2/session/ConfigSession.cpp
fboss/cli/fboss2/utils/InterfaceList.h
fboss/cli/fboss2/session/Git.h
fboss/cli/fboss2/session/Git.cpp
fboss/cli/fboss2/utils/InterfacesConfig.cpp
fboss/cli/fboss2/utils/InterfacesConfig.h
fboss/cli/fboss2/utils/InterfaceList.cpp
fboss/cli/fboss2/utils/InterfaceList.h
fboss/cli/fboss2/CmdListConfig.cpp
fboss/cli/fboss2/CmdHandlerImplConfig.cpp
)

target_link_libraries(fboss2_config_lib
Expand Down
46 changes: 43 additions & 3 deletions cmake/CliFboss2Test.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,22 @@ gtest_discover_tests(fboss2_framework_test)

# cmd_test - Command tests from BUCK file
add_executable(fboss2_cmd_test
fboss/cli/fboss2/oss/CmdListConfig.cpp
fboss/cli/fboss2/test/TestMain.cpp
fboss/cli/fboss2/test/CmdConfigAppliedInfoTest.cpp
fboss/cli/fboss2/test/CmdConfigHistoryTest.cpp
fboss/cli/fboss2/test/CmdConfigInterfaceDescriptionTest.cpp
fboss/cli/fboss2/test/CmdConfigInterfaceMtuTest.cpp
fboss/cli/fboss2/test/CmdConfigInterfaceSwitchportAccessVlanTest.cpp
fboss/cli/fboss2/test/CmdConfigL2LearningModeTest.cpp
fboss/cli/fboss2/test/CmdConfigInterfaceTest.cpp
fboss/cli/fboss2/test/CmdConfigQosBufferPoolTest.cpp
fboss/cli/fboss2/test/CmdConfigReloadTest.cpp
fboss/cli/fboss2/test/CmdConfigSessionClearTest.cpp
fboss/cli/fboss2/test/CmdConfigSessionDiffTest.cpp
fboss/cli/fboss2/test/CmdConfigSessionTest.cpp
fboss/cli/fboss2/test/CmdConfigVlanPortTaggingModeTest.cpp
fboss/cli/fboss2/test/CmdConfigVlanStaticMacTest.cpp
fboss/cli/fboss2/test/CmdGetPcapTest.cpp
fboss/cli/fboss2/test/CmdListConfigTest.cpp
fboss/cli/fboss2/test/CmdSetPortStateTest.cpp
fboss/cli/fboss2/test/CmdShowAclTest.cpp
fboss/cli/fboss2/test/CmdShowAgentSslTest.cpp
Expand All @@ -53,7 +60,6 @@ add_executable(fboss2_cmd_test
fboss/cli/fboss2/test/CmdShowL2Test.cpp
fboss/cli/fboss2/test/CmdShowLldpTest.cpp
fboss/cli/fboss2/test/CmdShowNdpTest.cpp
fboss/cli/fboss2/test/CmdGetPcapTest.cpp
fboss/cli/fboss2/test/CmdShowAggregatePortTest.cpp
fboss/cli/fboss2/test/CmdShowCpuPortTest.cpp
fboss/cli/fboss2/test/CmdShowExampleTest.cpp
Expand All @@ -70,10 +76,12 @@ add_executable(fboss2_cmd_test
fboss/cli/fboss2/test/CmdShowProductTest.cpp
fboss/cli/fboss2/test/CmdShowRouteDetailsTest.cpp
fboss/cli/fboss2/test/CmdShowRouteSummaryTest.cpp
fboss/cli/fboss2/test/CmdShowRunningConfigTest.cpp
fboss/cli/fboss2/test/CmdShowTeFlowTest.cpp
# fboss/cli/fboss2/test/CmdShowTransceiverTest.cpp - excluded (depends on configerator bgp namespace)
fboss/cli/fboss2/test/CmdStartPcapTest.cpp
fboss/cli/fboss2/test/CmdStopPcapTest.cpp
fboss/cli/fboss2/test/GitTest.cpp
fboss/cli/fboss2/test/PortMapTest.cpp
)

Expand Down Expand Up @@ -106,3 +114,35 @@ target_link_libraries(thrift_latency_test
Folly::folly
FBThrift::thriftcpp2
)

# cli_test - CLI E2E test binary
#
# CLI tests are platform/SAI independent - they test the CLI binary which
# communicates with the agent via Thrift, without running the actual fboss2-dev
# binary.
add_executable(cli_test
fboss/cli/fboss2/oss/CmdListConfig.cpp
fboss/cli/test/CliTest.cpp
fboss/cli/test/ConfigInterfaceDescriptionTest.cpp
fboss/cli/test/ConfigInterfaceMtuTest.cpp
fboss/cli/test/ConfigQosPolicyMapTest.cpp
fboss/cli/test/ConfigSessionClearTest.cpp
)

target_link_libraries(cli_test
fboss2_lib
fboss2_config_lib
thrift_service_utils
CLI11::CLI11
${GTEST}
${LIBGMOCK_LIBRARIES}
Folly::folly
Folly::folly_test_util
FBThrift::thriftcpp2
gflags
fmt::fmt
)

target_include_directories(cli_test PUBLIC
${CMAKE_SOURCE_DIR}
)
56 changes: 51 additions & 5 deletions fboss/cli/fboss2/BUCK
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ cpp_library(
"CmdSubcommands.cpp",
],
headers = [
"CliAppInit.h",
"CmdArgsLists.h",
"CmdSubcommands.h",
],
Expand Down Expand Up @@ -559,6 +560,7 @@ cpp_library(
"commands/show/product/CmdShowProduct.h",
"commands/show/product/CmdShowProductDetails.h",
"commands/show/rif/CmdShowRif.h",
"commands/show/running_config/CmdShowRunningConfig.h",
"commands/show/route/CmdShowRoute.h",
"commands/show/route/CmdShowRouteDetails.h",
"commands/show/route/CmdShowRouteSummary.h",
Expand Down Expand Up @@ -851,33 +853,77 @@ auto_tab_complete(
cpp_library(
name = "fboss2-config-lib",
srcs = [
"CmdHandlerImplConfig.cpp",
"CmdListConfig.cpp",
"commands/config/CmdConfigAppliedInfo.cpp",
"commands/config/CmdConfigReload.cpp",
"commands/config/history/CmdConfigHistory.cpp",
"commands/config/interface/CmdConfigInterfaceDescription.cpp",
"commands/config/interface/CmdConfigInterfaceMtu.cpp",
"commands/config/interface/CmdConfigInterface.cpp",
"commands/config/interface/CmdConfigInterfaceQueuingPolicy.cpp",
"commands/config/interface/pfc_config/CmdConfigInterfacePfcConfig.cpp",
"commands/config/interface/switchport/CmdConfigInterfaceSwitchport.cpp",
"commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.cpp",
"commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.cpp",
"commands/config/l2/CmdConfigL2.cpp",
"commands/config/l2/learning_mode/CmdConfigL2LearningMode.cpp",
"commands/config/qos/CmdConfigQos.cpp",
"commands/config/qos/buffer_pool/CmdConfigQosBufferPool.cpp",
"commands/config/qos/policy/CmdConfigQosPolicy.cpp",
"commands/config/qos/policy/CmdConfigQosPolicyMap.cpp",
"commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicy.cpp",
"commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicyGroupId.cpp",
"commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicy.cpp",
"commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicyQueueId.cpp",
"commands/config/rollback/CmdConfigRollback.cpp",
"commands/config/session/CmdConfigSessionClear.cpp",
"commands/config/session/CmdConfigSessionCommit.cpp",
"commands/config/session/CmdConfigSessionDiff.cpp",
"commands/config/session/CmdConfigSessionRebase.cpp",
"commands/config/vlan/CmdConfigVlan.cpp",
"commands/config/vlan/port/CmdConfigVlanPort.cpp",
"commands/config/vlan/port/tagging_mode/CmdConfigVlanPortTaggingMode.cpp",
"commands/config/vlan/static_mac/CmdConfigVlanStaticMac.cpp",
"commands/config/vlan/static_mac/add/CmdConfigVlanStaticMacAdd.cpp",
"commands/config/vlan/static_mac/delete/CmdConfigVlanStaticMacDelete.cpp",
"session/ConfigSession.cpp",
"session/Git.cpp",
"utils/InterfacesConfig.cpp",
"utils/InterfaceList.cpp",
],
headers = [
"commands/config/CmdConfigAppliedInfo.h",
"commands/config/CmdConfigReload.h",
"commands/config/history/CmdConfigHistory.h",
"commands/config/interface/CmdConfigInterface.h",
"commands/config/interface/CmdConfigInterfaceDescription.h",
"commands/config/interface/CmdConfigInterfaceMtu.h",
"commands/config/interface/CmdConfigInterfaceQueuingPolicy.h",
"commands/config/interface/pfc_config/CmdConfigInterfacePfcConfig.h",
"commands/config/interface/pfc_config/PfcConfigUtils.h",
"commands/config/interface/switchport/CmdConfigInterfaceSwitchport.h",
"commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.h",
"commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h",
"commands/config/l2/CmdConfigL2.h",
"commands/config/l2/learning_mode/CmdConfigL2LearningMode.h",
"commands/config/qos/CmdConfigQos.h",
"commands/config/qos/buffer_pool/CmdConfigQosBufferPool.h",
"commands/config/qos/policy/CmdConfigQosPolicy.h",
"commands/config/qos/policy/CmdConfigQosPolicyMap.h",
"commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicy.h",
"commands/config/qos/priority_group_policy/CmdConfigQosPriorityGroupPolicyGroupId.h",
"commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicy.h",
"commands/config/qos/queuing_policy/CmdConfigQosQueuingPolicyQueueId.h",
"commands/config/rollback/CmdConfigRollback.h",
"commands/config/session/CmdConfigSessionClear.h",
"commands/config/session/CmdConfigSessionCommit.h",
"commands/config/session/CmdConfigSessionDiff.h",
"commands/config/session/CmdConfigSessionRebase.h",
"commands/config/vlan/CmdConfigVlan.h",
"commands/config/vlan/port/CmdConfigVlanPort.h",
"commands/config/vlan/port/tagging_mode/CmdConfigVlanPortTaggingMode.h",
"commands/config/vlan/static_mac/CmdConfigVlanStaticMac.h",
"commands/config/vlan/static_mac/add/CmdConfigVlanStaticMacAdd.h",
"commands/config/vlan/static_mac/delete/CmdConfigVlanStaticMacDelete.h",
"session/ConfigSession.h",
"session/Git.h",
"utils/InterfacesConfig.h",
"utils/InterfaceList.h",
],
exported_deps = [
Expand Down
37 changes: 37 additions & 0 deletions fboss/cli/fboss2/CliAppInit.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (c) 2004-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#pragma once

#include <CLI/App.hpp>
#include "fboss/cli/fboss2/CmdGlobalOptions.h"
#include "fboss/cli/fboss2/CmdList.h"
#include "fboss/cli/fboss2/CmdSubcommands.h"

namespace facebook::fboss::utils {

/**
* Initialize the CLI app with global options and command tree.
* This sets up the CLI infrastructure and should be called before parsing.
*
* This function is shared between the main CLI binary and CLI E2E tests
* to ensure consistent CLI initialization.
*/
inline void initApp(CLI::App& app) {
app.require_subcommand();

// Initialize global options (--fmt, --host, etc.)
CmdGlobalOptions::getInstance()->init(app);

// Initialize command tree with all available commands
CmdSubcommands::getInstance()->init(
app, kCommandTree(), kAdditionalCommandTree(), kSpecialCommands());
}

} // namespace facebook::fboss::utils
Loading