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
4 changes: 4 additions & 0 deletions cmake/CliFboss2.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,10 @@ add_library(fboss2_config_lib
fboss/cli/fboss2/commands/config/l2/CmdConfigL2.h
fboss/cli/fboss2/commands/config/l2/learning_mode/CmdConfigL2LearningMode.cpp
fboss/cli/fboss2/commands/config/l2/learning_mode/CmdConfigL2LearningMode.h
fboss/cli/fboss2/commands/config/mac/CmdConfigMac.cpp
fboss/cli/fboss2/commands/config/mac/CmdConfigMac.h
fboss/cli/fboss2/commands/config/mac/aging_time/CmdConfigMacAgingTime.cpp
fboss/cli/fboss2/commands/config/mac/aging_time/CmdConfigMacAgingTime.h
fboss/cli/fboss2/commands/config/protocol/CmdConfigProtocol.cpp
fboss/cli/fboss2/commands/config/protocol/CmdConfigProtocol.h
fboss/cli/fboss2/commands/config/protocol/bgp/BgpConfigSession.cpp
Expand Down
1 change: 1 addition & 0 deletions cmake/CliFboss2TestConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ add_executable(fboss2_cmd_config_test
fboss/cli/fboss2/test/config/CmdConfigInterfaceSwitchportAccessVlanTest.cpp
fboss/cli/fboss2/test/config/CmdConfigInterfaceTest.cpp
fboss/cli/fboss2/test/config/CmdConfigL2LearningModeTest.cpp
fboss/cli/fboss2/test/config/CmdConfigMacAgingTimeTest.cpp
fboss/cli/fboss2/test/config/CmdConfigQosBufferPoolTest.cpp
fboss/cli/fboss2/test/config/CmdConfigReloadTest.cpp
fboss/cli/fboss2/test/config/CmdConfigSessionCommitTest.cpp
Expand Down
1 change: 1 addition & 0 deletions cmake/CliFboss2TestIntegrationTest.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ add_executable(fboss2_integration_test
fboss/cli/fboss2/test/integration_test/ConfigInterfaceMtuTest.cpp
fboss/cli/fboss2/test/integration_test/ConfigInterfaceProfileTest.cpp
fboss/cli/fboss2/test/integration_test/ConfigL2LearningModeTest.cpp
fboss/cli/fboss2/test/integration_test/ConfigMacTest.cpp
fboss/cli/fboss2/test/integration_test/ConfigPfcTest.cpp
fboss/cli/fboss2/test/integration_test/ConfigPortQueueConfigTest.cpp
fboss/cli/fboss2/test/integration_test/ConfigQosPolicyMapTest.cpp
Expand Down
4 changes: 4 additions & 0 deletions fboss/cli/fboss2/BUCK
Original file line number Diff line number Diff line change
Expand Up @@ -1025,6 +1025,8 @@ cpp_library(
"commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.cpp",
"commands/config/l2/CmdConfigL2.cpp",
"commands/config/l2/learning_mode/CmdConfigL2LearningMode.cpp",
"commands/config/mac/CmdConfigMac.cpp",
"commands/config/mac/aging_time/CmdConfigMacAgingTime.cpp",
"commands/config/protocol/CmdConfigProtocol.cpp",
"commands/config/protocol/bgp/BgpConfigSession.cpp",
"commands/config/protocol/bgp/CmdConfigProtocolBgp.cpp",
Expand Down Expand Up @@ -1123,6 +1125,8 @@ cpp_library(
"commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h",
"commands/config/l2/CmdConfigL2.h",
"commands/config/l2/learning_mode/CmdConfigL2LearningMode.h",
"commands/config/mac/CmdConfigMac.h",
"commands/config/mac/aging_time/CmdConfigMacAgingTime.h",
"commands/config/protocol/CmdConfigProtocol.h",
"commands/config/protocol/bgp/BgpConfigSession.h",
"commands/config/protocol/bgp/CmdConfigProtocolBgp.h",
Expand Down
16 changes: 16 additions & 0 deletions fboss/cli/fboss2/CmdListConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#include "fboss/cli/fboss2/commands/config/interface/switchport/access/vlan/CmdConfigInterfaceSwitchportAccessVlan.h"
#include "fboss/cli/fboss2/commands/config/l2/CmdConfigL2.h"
#include "fboss/cli/fboss2/commands/config/l2/learning_mode/CmdConfigL2LearningMode.h"
#include "fboss/cli/fboss2/commands/config/mac/CmdConfigMac.h"
#include "fboss/cli/fboss2/commands/config/mac/aging_time/CmdConfigMacAgingTime.h"
#include "fboss/cli/fboss2/commands/config/protocol/CmdConfigProtocol.h"
#include "fboss/cli/fboss2/commands/config/protocol/bgp/CmdConfigProtocolBgp.h"
#include "fboss/cli/fboss2/commands/config/protocol/bgp/global/CmdConfigProtocolBgpGlobal.h"
Expand Down Expand Up @@ -170,6 +172,20 @@ const CommandTree& kConfigCommandTree() {
}},
},

{
"config",
"mac",
"Configure MAC settings",
commandHandler<CmdConfigMac>,
argRegistrar<CmdConfigMacTraits>,
{{
"aging-time",
"Set MAC address aging time in seconds",
commandHandler<CmdConfigMacAgingTime>,
argRegistrar<CmdConfigMacAgingTimeTraits>,
}},
},

{
"config",
"protocol",
Expand Down
20 changes: 20 additions & 0 deletions fboss/cli/fboss2/commands/config/mac/CmdConfigMac.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* 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.
*
*/

#include "fboss/cli/fboss2/commands/config/mac/CmdConfigMac.h"

#include "fboss/cli/fboss2/CmdHandler.cpp"

namespace facebook::fboss {

// Explicit template instantiation
template void CmdHandler<CmdConfigMac, CmdConfigMacTraits>::run();

} // namespace facebook::fboss
35 changes: 35 additions & 0 deletions fboss/cli/fboss2/commands/config/mac/CmdConfigMac.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* 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 "fboss/cli/fboss2/CmdHandler.h"

namespace facebook::fboss {

struct CmdConfigMacTraits : public WriteCommandTraits {
using ObjectArgType = utils::NoneArgType;
using RetType = std::string;
};

class CmdConfigMac : public CmdHandler<CmdConfigMac, CmdConfigMacTraits> {
public:
using ObjectArgType = CmdConfigMacTraits::ObjectArgType;
using RetType = CmdConfigMacTraits::RetType;

RetType queryClient(const HostInfo& /* hostInfo */) {
throw std::runtime_error(
"Incomplete command, please use 'aging-time' subcommand");
}

void printOutput(const RetType& /* model */) {}
};

} // namespace facebook::fboss
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* 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.
*
*/

#include "fboss/cli/fboss2/commands/config/mac/aging_time/CmdConfigMacAgingTime.h"

#include "fboss/cli/fboss2/CmdHandler.cpp"

#include <fmt/format.h>
#include <folly/Conv.h>
#include <iostream>
#include "fboss/cli/fboss2/session/ConfigSession.h"

namespace facebook::fboss {

MacAgingTimeArg::MacAgingTimeArg(std::vector<std::string> v) {
if (v.empty()) {
throw std::invalid_argument(
"MAC aging time in seconds is required (e.g. 300)");
}
if (v.size() != 1) {
throw std::invalid_argument("Expected exactly one argument: seconds");
}

try {
seconds_ = folly::to<int32_t>(v[0]);
} catch (const folly::ConversionError&) {
throw std::invalid_argument(
"Invalid MAC aging time '" + v[0] + "': must be an integer");
}

if (seconds_ <= 0) {
throw std::invalid_argument(
"MAC aging time must be a positive integer, got " + v[0]);
}

data_.push_back(v[0]);
}

CmdConfigMacAgingTimeTraits::RetType CmdConfigMacAgingTime::queryClient(
const HostInfo& /* hostInfo */,
const ObjectArgType& agingTime) {
auto& session = ConfigSession::getInstance();
auto& config = session.getAgentConfig();
auto& swConfig = *config.sw();

int32_t newSeconds = agingTime.getSeconds();
int32_t currentSeconds = *swConfig.switchSettings()->l2AgeTimerSeconds();

if (currentSeconds == newSeconds) {
return fmt::format(
"MAC aging time is already set to {} seconds", newSeconds);
}

swConfig.switchSettings()->l2AgeTimerSeconds() = newSeconds;

session.saveConfig(cli::ServiceType::AGENT, cli::ConfigActionLevel::HITLESS);

return fmt::format(
"Successfully set MAC aging time to {} seconds", newSeconds);
}

void CmdConfigMacAgingTime::printOutput(const RetType& output) {
std::cout << output << std::endl;
}

// Explicit template instantiation
template void
CmdHandler<CmdConfigMacAgingTime, CmdConfigMacAgingTimeTraits>::run();

} // namespace facebook::fboss
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* 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 "fboss/cli/fboss2/CmdHandler.h"
#include "fboss/cli/fboss2/commands/config/mac/CmdConfigMac.h"

namespace facebook::fboss {

class MacAgingTimeArg : public utils::BaseObjectArgType<std::string> {
public:
/* implicit */ MacAgingTimeArg( // NOLINT(google-explicit-constructor)
std::vector<std::string> v);

int32_t getSeconds() const {
return seconds_;
}

private:
int32_t seconds_{300};
};

struct CmdConfigMacAgingTimeTraits : public WriteCommandTraits {
using ParentCmd = CmdConfigMac;
static void addCliArg(CLI::App& cmd, std::vector<std::string>& args) {
cmd.add_option("seconds", args, "MAC aging time in seconds (1-1000000)");
}
using ObjectArgType = MacAgingTimeArg;
using RetType = std::string;
};

class CmdConfigMacAgingTime
: public CmdHandler<CmdConfigMacAgingTime, CmdConfigMacAgingTimeTraits> {
public:
using ObjectArgType = CmdConfigMacAgingTimeTraits::ObjectArgType;
using RetType = CmdConfigMacAgingTimeTraits::RetType;

RetType queryClient(const HostInfo& hostInfo, const ObjectArgType& agingTime);

void printOutput(const RetType& output);
};

} // namespace facebook::fboss
1 change: 1 addition & 0 deletions fboss/cli/fboss2/test/config/BUCK
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ cpp_unittest(
"CmdConfigInterfaceSwitchportAccessVlanTest.cpp",
"CmdConfigInterfaceTest.cpp",
"CmdConfigL2LearningModeTest.cpp",
"CmdConfigMacAgingTimeTest.cpp",
"CmdConfigQosBufferPoolTest.cpp",
"CmdConfigReloadTest.cpp",
"CmdConfigSessionCommitTest.cpp",
Expand Down
Loading