Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
25 changes: 25 additions & 0 deletions cmake/CliFboss2.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
# In general, libraries and binaries in fboss/foo/bar are built by
# cmake/FooBar.cmake

add_fbthrift_cpp_library(
cli_metadata
fboss/cli/fboss2/cli_metadata.thrift
OPTIONS
json
)

add_fbthrift_cpp_library(
cli_model
fboss/cli/fboss2/cli.thrift
Expand Down Expand Up @@ -588,6 +595,13 @@ add_library(fboss2_config_lib
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/switchport/CmdConfigInterfaceSwitchport.h
fboss/cli/fboss2/commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.h
fboss/cli/fboss2/commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h
fboss/cli/fboss2/commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.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/history/CmdConfigHistory.h
fboss/cli/fboss2/commands/config/history/CmdConfigHistory.cpp
fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h
Expand All @@ -596,15 +610,26 @@ add_library(fboss2_config_lib
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.h
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/session/Git.h
fboss/cli/fboss2/session/Git.cpp
fboss/cli/fboss2/utils/InterfaceList.h
fboss/cli/fboss2/utils/InterfaceList.cpp
fboss/cli/fboss2/CmdListConfig.cpp
fboss/cli/fboss2/CmdHandlerImplConfig.cpp
)

target_link_libraries(fboss2_config_lib
cli_metadata
fboss2_lib
agent_dir_util
)
Expand Down
8 changes: 7 additions & 1 deletion cmake/CliFboss2Test.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,20 @@ 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/CmdConfigQosBufferPoolTest.cpp
fboss/cli/fboss2/test/CmdConfigReloadTest.cpp
fboss/cli/fboss2/test/CmdConfigSessionDiffTest.cpp
fboss/cli/fboss2/test/CmdConfigSessionTest.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 @@ -52,7 +58,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 @@ -73,6 +78,7 @@ add_executable(fboss2_cmd_test
# 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
27 changes: 27 additions & 0 deletions fboss/cli/fboss2/BUCK
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ thrift_library(
thrift_srcs = {"cli.thrift": []},
)

thrift_library(
name = "cli_metadata",
languages = [
"cpp2",
],
thrift_cpp2_options = "json",
thrift_srcs = {"cli_metadata.thrift": []},
)

# NOTE: all of the actual command tree is managed inside CmdList.cpp
# CmdList.h defines the data structure
cpp_library(
Expand Down Expand Up @@ -792,10 +801,16 @@ cpp_library(
"commands/config/history/CmdConfigHistory.cpp",
"commands/config/interface/CmdConfigInterfaceDescription.cpp",
"commands/config/interface/CmdConfigInterfaceMtu.cpp",
"commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.cpp",
"commands/config/qos/buffer_pool/CmdConfigQosBufferPool.cpp",
"commands/config/rollback/CmdConfigRollback.cpp",
"commands/config/session/CmdConfigSessionCommit.cpp",
"commands/config/session/CmdConfigSessionDiff.cpp",
"commands/config/session/CmdConfigSessionRebase.cpp",
"commands/config/vlan/static_mac/add/CmdConfigVlanStaticMacAdd.cpp",
"commands/config/vlan/static_mac/delete/CmdConfigVlanStaticMacDelete.cpp",
"session/ConfigSession.cpp",
"session/Git.cpp",
"utils/InterfaceList.cpp",
],
headers = [
Expand All @@ -805,16 +820,28 @@ cpp_library(
"commands/config/interface/CmdConfigInterface.h",
"commands/config/interface/CmdConfigInterfaceDescription.h",
"commands/config/interface/CmdConfigInterfaceMtu.h",
"commands/config/interface/switchport/CmdConfigInterfaceSwitchport.h",
"commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.h",
"commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h",
"commands/config/qos/CmdConfigQos.h",
"commands/config/qos/buffer_pool/CmdConfigQosBufferPool.h",
"commands/config/rollback/CmdConfigRollback.h",
"commands/config/session/CmdConfigSessionCommit.h",
"commands/config/session/CmdConfigSessionDiff.h",
"commands/config/session/CmdConfigSessionRebase.h",
"commands/config/vlan/CmdConfigVlan.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/InterfaceList.h",
],
exported_deps = [
"fbsource//third-party/fmt:fmt",
"fbsource//third-party/glog:glog",
"fbsource//third-party/re2:re2",
":cli_metadata-cpp2-types",
":cmd-common-utils",
":cmd-handler",
":fboss2-lib",
Expand Down
34 changes: 34 additions & 0 deletions fboss/cli/fboss2/CmdHandlerImplConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,28 @@

// Current linter doesn't properly handle the template functions which need the
// following headers
// NOLINTBEGIN(misc-include-cleaner)
// @lint-ignore-every CLANGTIDY facebook-unused-include-check
#include "fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.h"
#include "fboss/cli/fboss2/commands/config/CmdConfigReload.h"
#include "fboss/cli/fboss2/commands/config/history/CmdConfigHistory.h"
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.h"
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.h"
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceMtu.h"
#include "fboss/cli/fboss2/commands/config/interface/switchport/CmdConfigInterfaceSwitchport.h"
#include "fboss/cli/fboss2/commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.h"
#include "fboss/cli/fboss2/commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h"
#include "fboss/cli/fboss2/commands/config/qos/CmdConfigQos.h"
#include "fboss/cli/fboss2/commands/config/qos/buffer_pool/CmdConfigQosBufferPool.h"
#include "fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.h"
#include "fboss/cli/fboss2/commands/config/vlan/CmdConfigVlan.h"
#include "fboss/cli/fboss2/commands/config/vlan/static_mac/CmdConfigVlanStaticMac.h"
#include "fboss/cli/fboss2/commands/config/vlan/static_mac/add/CmdConfigVlanStaticMacAdd.h"
#include "fboss/cli/fboss2/commands/config/vlan/static_mac/delete/CmdConfigVlanStaticMacDelete.h"
// NOLINTEND(misc-include-cleaner)

namespace facebook::fboss {

Expand All @@ -34,11 +46,33 @@ template void CmdHandler<
CmdConfigInterfaceDescriptionTraits>::run();
template void
CmdHandler<CmdConfigInterfaceMtu, CmdConfigInterfaceMtuTraits>::run();
template void CmdHandler<
CmdConfigInterfaceSwitchport,
CmdConfigInterfaceSwitchportTraits>::run();
template void CmdHandler<
CmdConfigInterfaceSwitchportAccess,
CmdConfigInterfaceSwitchportAccessTraits>::run();
template void CmdHandler<
CmdConfigInterfaceSwitchportAccessVlan,
CmdConfigInterfaceSwitchportAccessVlanTraits>::run();
template void CmdHandler<CmdConfigHistory, CmdConfigHistoryTraits>::run();
template void CmdHandler<CmdConfigRollback, CmdConfigRollbackTraits>::run();
template void
CmdHandler<CmdConfigSessionCommit, CmdConfigSessionCommitTraits>::run();
template void
CmdHandler<CmdConfigSessionDiff, CmdConfigSessionDiffTraits>::run();
template void
CmdHandler<CmdConfigSessionRebase, CmdConfigSessionRebaseTraits>::run();
template void CmdHandler<CmdConfigQos, CmdConfigQosTraits>::run();
template void
CmdHandler<CmdConfigQosBufferPool, CmdConfigQosBufferPoolTraits>::run();
template void CmdHandler<CmdConfigVlan, CmdConfigVlanTraits>::run();
template void
CmdHandler<CmdConfigVlanStaticMac, CmdConfigVlanStaticMacTraits>::run();
template void
CmdHandler<CmdConfigVlanStaticMacAdd, CmdConfigVlanStaticMacAddTraits>::run();
template void CmdHandler<
CmdConfigVlanStaticMacDelete,
CmdConfigVlanStaticMacDeleteTraits>::run();

} // namespace facebook::fboss
75 changes: 75 additions & 0 deletions fboss/cli/fboss2/CmdListConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,19 @@
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.h"
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.h"
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceMtu.h"
#include "fboss/cli/fboss2/commands/config/interface/switchport/CmdConfigInterfaceSwitchport.h"
#include "fboss/cli/fboss2/commands/config/interface/switchport/access/CmdConfigInterfaceSwitchportAccess.h"
#include "fboss/cli/fboss2/commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h"
#include "fboss/cli/fboss2/commands/config/qos/CmdConfigQos.h"
#include "fboss/cli/fboss2/commands/config/qos/buffer_pool/CmdConfigQosBufferPool.h"
#include "fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h"
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionRebase.h"
#include "fboss/cli/fboss2/commands/config/vlan/CmdConfigVlan.h"
#include "fboss/cli/fboss2/commands/config/vlan/static_mac/CmdConfigVlanStaticMac.h"
#include "fboss/cli/fboss2/commands/config/vlan/static_mac/add/CmdConfigVlanStaticMacAdd.h"
#include "fboss/cli/fboss2/commands/config/vlan/static_mac/delete/CmdConfigVlanStaticMacDelete.h"

namespace facebook::fboss {

Expand Down Expand Up @@ -54,9 +64,42 @@ const CommandTree& kConfigCommandTree() {
"Set interface MTU",
commandHandler<CmdConfigInterfaceMtu>,
argTypeHandler<CmdConfigInterfaceMtuTraits>,
},
{
"switchport",
"Configure switchport settings",
commandHandler<CmdConfigInterfaceSwitchport>,
argTypeHandler<CmdConfigInterfaceSwitchportTraits>,
{{
"access",
"Configure access mode settings",
commandHandler<CmdConfigInterfaceSwitchportAccess>,
argTypeHandler<CmdConfigInterfaceSwitchportAccessTraits>,
{{
"vlan",
"Set access VLAN (ingressVlan) for the interface",
commandHandler<CmdConfigInterfaceSwitchportAccessVlan>,
argTypeHandler<
CmdConfigInterfaceSwitchportAccessVlanTraits>,
}},
}},
}},
},

{
"config",
"qos",
"Configure QoS settings",
commandHandler<CmdConfigQos>,
argTypeHandler<CmdConfigQosTraits>,
{{
"buffer-pool",
"Configure buffer pool settings",
commandHandler<CmdConfigQosBufferPool>,
argTypeHandler<CmdConfigQosBufferPoolTraits>,
}},
},

{
"config",
"session",
Expand All @@ -72,6 +115,12 @@ const CommandTree& kConfigCommandTree() {
"Show diff between configs (session vs live, session vs revision, or revision vs revision)",
commandHandler<CmdConfigSessionDiff>,
argTypeHandler<CmdConfigSessionDiffTraits>,
},
{
"rebase",
"Rebase session changes onto current HEAD",
commandHandler<CmdConfigSessionRebase>,
argTypeHandler<CmdConfigSessionRebaseTraits>,
}},
},

Expand All @@ -86,6 +135,32 @@ const CommandTree& kConfigCommandTree() {
"Rollback to a previous config revision",
commandHandler<CmdConfigRollback>,
argTypeHandler<CmdConfigRollbackTraits>},

{
"config",
"vlan",
"Configure VLAN settings",
commandHandler<CmdConfigVlan>,
argTypeHandler<CmdConfigVlanTraits>,
{{
"static-mac",
"Manage static MAC entries for VLANs",
commandHandler<CmdConfigVlanStaticMac>,
argTypeHandler<CmdConfigVlanStaticMacTraits>,
{{
"add",
"Add a static MAC entry to a VLAN",
commandHandler<CmdConfigVlanStaticMacAdd>,
argTypeHandler<CmdConfigVlanStaticMacAddTraits>,
},
{
"delete",
"Delete a static MAC entry from a VLAN",
commandHandler<CmdConfigVlanStaticMacDelete>,
argTypeHandler<CmdConfigVlanStaticMacDeleteTraits>,
}},
}},
},
};
sort(root.begin(), root.end());
return root;
Expand Down
16 changes: 16 additions & 0 deletions fboss/cli/fboss2/CmdSubcommands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,22 @@ CLI::App* CmdSubcommands::addCommand(
subCmd->add_option(
"revisions", args, "Revision(s) in the form 'rN' or 'current'");
break;
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_BUFFER_POOL_NAME:
subCmd->add_option(
"buffer_pool_config",
args,
"<name> <attr> <value> [<attr> <value> ...] where <attr> is one "
"of: shared-bytes, headroom-bytes, reserved-bytes");
break;
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_VLAN_ID:
subCmd->add_option("vlan_id", args, "VLAN ID (1-4094)");
break;
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_MAC_AND_PORT:
subCmd->add_option(
"mac_and_port",
args,
"MAC address and port name (e.g., AA:BB:CC:DD:EE:FF eth1/1/1)");
break;
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_UNINITIALIZE:
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_NONE:
break;
Expand Down
41 changes: 41 additions & 0 deletions fboss/cli/fboss2/cli_metadata.thrift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* 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.
*
*/

package "facebook.com/fboss/cli"

namespace cpp2 facebook.fboss.cli

// Action level required for config changes to take effect.
// Used to track the highest impact action needed when committing config
// changes.
enum ConfigActionLevel {
HITLESS = 0, // Can be applied with reloadConfig() - default
AGENT_RESTART = 1, // Requires agent restart
}

// Identifier for different agents that can be configured
enum AgentType {
WEDGE_AGENT = 1,
}

// Metadata stored alongside the session configuration file.
// This metadata tracks state that needs to persist across CLI invocations
// within a single config session.
struct ConfigSessionMetadata {
// Maps each agent to the required action level for pending config changes.
// Agents not in this map default to HITLESS.
1: map<AgentType, ConfigActionLevel> action;
// List of CLI commands executed in this session, in chronological order.
// Each entry is the full command string (e.g., "config interface eth1/1/1 mtu 9000").
2: list<string> commands;
// Git commit SHA that this session is based on. Used to detect if someone
// else committed changes while this session was in progress.
3: string base;
}
Loading
Loading