Skip to content

Commit 95c2d20

Browse files
Add a fboss2 config interface <name> description <desc> command.
Add some helper code to process interface-list arguments.
1 parent 0fe0152 commit 95c2d20

15 files changed

+403
-0
lines changed

cmake/CliFboss2.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,8 @@ add_library(fboss2_lib
479479
fboss/cli/fboss2/utils/PortMap.cpp
480480
fboss/cli/fboss2/utils/Table.cpp
481481
fboss/cli/fboss2/utils/HostInfo.h
482+
fboss/cli/fboss2/utils/InterfaceList.h
483+
fboss/cli/fboss2/utils/InterfaceList.cpp
482484
fboss/cli/fboss2/utils/FilterOp.h
483485
fboss/cli/fboss2/utils/AggregateOp.h
484486
fboss/cli/fboss2/utils/AggregateUtils.h
@@ -575,6 +577,9 @@ add_library(fboss2_config_lib
575577
fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.cpp
576578
fboss/cli/fboss2/commands/config/CmdConfigReload.h
577579
fboss/cli/fboss2/commands/config/CmdConfigReload.cpp
580+
fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.h
581+
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.h
582+
fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.cpp
578583
fboss/cli/fboss2/commands/config/history/CmdConfigHistory.h
579584
fboss/cli/fboss2/commands/config/history/CmdConfigHistory.cpp
580585
fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h

cmake/CliFboss2Test.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ add_executable(fboss2_cmd_test
55
fboss/cli/fboss2/test/TestMain.cpp
66
fboss/cli/fboss2/test/CmdConfigAppliedInfoTest.cpp
77
fboss/cli/fboss2/test/CmdConfigHistoryTest.cpp
8+
fboss/cli/fboss2/test/CmdConfigInterfaceDescriptionTest.cpp
89
fboss/cli/fboss2/test/CmdConfigReloadTest.cpp
910
fboss/cli/fboss2/test/CmdConfigSessionDiffTest.cpp
1011
fboss/cli/fboss2/test/CmdConfigSessionTest.cpp

fboss/cli/fboss2/BUCK

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ cpp_library(
146146
name = "cmd-common-utils",
147147
srcs = [
148148
"utils/CmdUtilsCommon.cpp",
149+
"utils/InterfaceList.cpp",
149150
],
150151
headers = [
151152
"commands/clear/CmdClearUtils.h",
@@ -154,6 +155,7 @@ cpp_library(
154155
"utils/CmdUtilsCommon.h",
155156
"utils/FilterUtils.h",
156157
"utils/HostInfo.h",
158+
"utils/InterfaceList.h",
157159
],
158160
exported_deps = [
159161
":cmd-global-options",
@@ -768,6 +770,7 @@ cpp_library(
768770
"commands/config/CmdConfigAppliedInfo.cpp",
769771
"commands/config/CmdConfigReload.cpp",
770772
"commands/config/history/CmdConfigHistory.cpp",
773+
"commands/config/interface/CmdConfigInterfaceDescription.cpp",
771774
"commands/config/rollback/CmdConfigRollback.cpp",
772775
"commands/config/session/CmdConfigSessionCommit.cpp",
773776
"commands/config/session/CmdConfigSessionDiff.cpp",
@@ -778,6 +781,8 @@ cpp_library(
778781
"commands/config/CmdConfigAppliedInfo.h",
779782
"commands/config/CmdConfigReload.h",
780783
"commands/config/history/CmdConfigHistory.h",
784+
"commands/config/interface/CmdConfigInterface.h",
785+
"commands/config/interface/CmdConfigInterfaceDescription.h",
781786
"commands/config/rollback/CmdConfigRollback.h",
782787
"commands/config/session/CmdConfigSessionCommit.h",
783788
"commands/config/session/CmdConfigSessionDiff.h",

fboss/cli/fboss2/CmdHandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ class CmdHandler {
169169
RetType result;
170170
try {
171171
result = queryClientHelper(hostInfo);
172+
} catch (std::invalid_argument const& err) {
173+
errStr = folly::to<std::string>("Invalid argument: ", err.what());
172174
} catch (std::exception const& err) {
173175
errStr = folly::to<std::string>("Thrift call failed: '", err.what(), "'");
174176
}

fboss/cli/fboss2/CmdHandlerImplConfig.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include "fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.h"
1414
#include "fboss/cli/fboss2/commands/config/CmdConfigReload.h"
1515
#include "fboss/cli/fboss2/commands/config/history/CmdConfigHistory.h"
16+
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.h"
17+
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.h"
1618
#include "fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h"
1719
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
1820
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h"
@@ -22,6 +24,10 @@ namespace facebook::fboss {
2224
template void
2325
CmdHandler<CmdConfigAppliedInfo, CmdConfigAppliedInfoTraits>::run();
2426
template void CmdHandler<CmdConfigReload, CmdConfigReloadTraits>::run();
27+
template void CmdHandler<CmdConfigInterface, CmdConfigInterfaceTraits>::run();
28+
template void CmdHandler<
29+
CmdConfigInterfaceDescription,
30+
CmdConfigInterfaceDescriptionTraits>::run();
2531
template void CmdHandler<CmdConfigHistory, CmdConfigHistoryTraits>::run();
2632
template void CmdHandler<CmdConfigRollback, CmdConfigRollbackTraits>::run();
2733
template void

fboss/cli/fboss2/CmdListConfig.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include "fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.h"
1515
#include "fboss/cli/fboss2/commands/config/CmdConfigReload.h"
1616
#include "fboss/cli/fboss2/commands/config/history/CmdConfigHistory.h"
17+
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.h"
18+
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.h"
1719
#include "fboss/cli/fboss2/commands/config/rollback/CmdConfigRollback.h"
1820
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
1921
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionDiff.h"
@@ -34,6 +36,20 @@ const CommandTree& kConfigCommandTree() {
3436
commandHandler<CmdConfigHistory>,
3537
argTypeHandler<CmdConfigHistoryTraits>},
3638

39+
{
40+
"config",
41+
"interface",
42+
"Configure interface settings",
43+
commandHandler<CmdConfigInterface>,
44+
argTypeHandler<CmdConfigInterfaceTraits>,
45+
{{
46+
"description",
47+
"Set interface description",
48+
commandHandler<CmdConfigInterfaceDescription>,
49+
argTypeHandler<CmdConfigInterfaceDescriptionTraits>,
50+
}},
51+
},
52+
3753
{
3854
"config",
3955
"session",

fboss/cli/fboss2/CmdSubcommands.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ CLI::App* CmdSubcommands::addCommand(
219219
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_FAN_PWM:
220220
subCmd->add_option("pwm", args, "Fan PWM (0..100) or 'disable'");
221221
break;
222+
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_INTERFACE_LIST:
223+
subCmd->add_option("interfaces", args, "Interface(s)");
224+
break;
222225
case utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_REVISION_LIST:
223226
subCmd->add_option(
224227
"revisions", args, "Revision(s) in the form 'rN' or 'current'");
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (c) 2004-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
#pragma once
12+
13+
#include "fboss/cli/fboss2/CmdHandler.h"
14+
#include "fboss/cli/fboss2/utils/CmdUtils.h"
15+
16+
namespace facebook::fboss {
17+
18+
struct CmdConfigInterfaceTraits : public WriteCommandTraits {
19+
static constexpr utils::ObjectArgTypeId ObjectArgTypeId =
20+
utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_PORT_LIST;
21+
using ObjectArgType = std::vector<std::string>;
22+
using RetType = std::string;
23+
};
24+
25+
class CmdConfigInterface
26+
: public CmdHandler<CmdConfigInterface, CmdConfigInterfaceTraits> {
27+
public:
28+
RetType queryClient(
29+
const HostInfo& /* hostInfo */,
30+
const ObjectArgType& /* interfaceNames */) {
31+
throw std::runtime_error(
32+
"Incomplete command, please use one of the subcommands");
33+
}
34+
35+
void printOutput(const RetType& /* model */) {}
36+
};
37+
38+
} // namespace facebook::fboss
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright (c) 2004-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterfaceDescription.h"
12+
13+
#include <folly/Conv.h>
14+
#include "fboss/cli/fboss2/session/ConfigSession.h"
15+
16+
namespace facebook::fboss {
17+
18+
CmdConfigInterfaceDescriptionTraits::RetType
19+
CmdConfigInterfaceDescription::queryClient(
20+
const HostInfo& hostInfo,
21+
const utils::InterfaceList& interfaces,
22+
const ObjectArgType& description) {
23+
if (interfaces.empty()) {
24+
throw std::invalid_argument("No interface name provided");
25+
}
26+
27+
std::string descriptionStr = description.data()[0];
28+
29+
// Update description for all resolved ports
30+
for (const utils::Intf& intf : interfaces) {
31+
cfg::Port* port = intf.getPort();
32+
if (port) {
33+
port->description() = descriptionStr;
34+
}
35+
}
36+
37+
// Save the updated config
38+
ConfigSession::getInstance().saveConfig();
39+
40+
std::string interfaceList = folly::join(", ", interfaces.getNames());
41+
return "Successfully set description for interface(s) " + interfaceList;
42+
}
43+
44+
void CmdConfigInterfaceDescription::printOutput(const RetType& logMsg) {
45+
std::cout << logMsg << std::endl;
46+
}
47+
48+
} // namespace facebook::fboss
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright (c) 2004-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
#pragma once
12+
13+
#include "fboss/cli/fboss2/CmdHandler.h"
14+
#include "fboss/cli/fboss2/commands/config/interface/CmdConfigInterface.h"
15+
#include "fboss/cli/fboss2/utils/CmdUtils.h"
16+
#include "fboss/cli/fboss2/utils/InterfaceList.h"
17+
18+
namespace facebook::fboss {
19+
20+
struct CmdConfigInterfaceDescriptionTraits : public WriteCommandTraits {
21+
using ParentCmd = CmdConfigInterface;
22+
static constexpr utils::ObjectArgTypeId ObjectArgTypeId =
23+
utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_MESSAGE;
24+
using ObjectArgType = utils::Message;
25+
using RetType = std::string;
26+
};
27+
28+
class CmdConfigInterfaceDescription : public CmdHandler<
29+
CmdConfigInterfaceDescription,
30+
CmdConfigInterfaceDescriptionTraits> {
31+
public:
32+
using ObjectArgType = CmdConfigInterfaceDescriptionTraits::ObjectArgType;
33+
using RetType = CmdConfigInterfaceDescriptionTraits::RetType;
34+
35+
RetType queryClient(
36+
const HostInfo& hostInfo,
37+
const utils::InterfaceList& interfaces,
38+
const ObjectArgType& description);
39+
40+
void printOutput(const RetType& logMsg);
41+
};
42+
43+
} // namespace facebook::fboss

0 commit comments

Comments
 (0)