Skip to content
Draft
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
48 changes: 32 additions & 16 deletions src/DbInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,8 @@ void DbInterface::processLoopbackInterfacesInfo(std::vector<std::string> &loopba
const std::string loopback3 = "Loopback3|";
bool loopback2IPv4Found = false;
bool loopback3IPv4Found = false;
bool loopback2IPv6Found = false;
bool loopback3IPv6Found = false;

for (auto &loopbackIntf: loopbackIntfs) {
size_t pos2 = loopbackIntf.find(loopback2);
Expand All @@ -693,7 +695,8 @@ void DbInterface::processLoopbackInterfacesInfo(std::vector<std::string> &loopba
mMuxManagerPtr->setLoopbackIpv4Address(ipAddress);
loopback2IPv4Found = true;
} else if (ipAddress.is_v6()) {
MUXLOGWARNING(boost::format("Ipv6 for Loopback2: ip: %s is not supported.") % ip);
mMuxManagerPtr->setLoopbackIpv6Address(ipAddress);
loopback2IPv6Found = true;
}
} else {
MUXLOGFATAL(boost::format("Received Loopback2 IP: %s, error code: %d") % ip % errorCode);
Expand All @@ -714,20 +717,21 @@ void DbInterface::processLoopbackInterfacesInfo(std::vector<std::string> &loopba
mMuxManagerPtr->setLoopback3Ipv4Address(ipAddress);
loopback3IPv4Found = true;
} else if (ipAddress.is_v6()) {
MUXLOGWARNING(boost::format("Ipv6 for Loopback3: ip: %s is not supported.") % ip);
mMuxManagerPtr->setLoopback3Ipv6Address(ipAddress);
loopback3IPv6Found = true;
}
} else {
MUXLOGFATAL(boost::format("Received Loopback3 IP: %s, error code: %d") % ip % errorCode);
}
}
}

if (!loopback2IPv4Found) {
MUXLOGFATAL(boost::format("Config not found: Loopback2 IPv4 address missing, using default value %s ") % mMuxManagerPtr->getLoopbackIpv4Address().to_string());
if (!loopback2IPv4Found && !loopback2IPv6Found) {
MUXLOGFATAL(boost::format("Config not found: Loopback2 address missing, using default value %s ") % mMuxManagerPtr->getLoopbackIpv4Address().to_string());
}

if (!loopback3IPv4Found) {
MUXLOGFATAL(boost::format("Config not found: Loopback3 IPv4 address missing, using default value %s ") % mMuxManagerPtr->getLoopback3Ipv4Address().to_string());
if (!loopback3IPv4Found && !loopback3IPv6Found) {
MUXLOGFATAL(boost::format("Config not found: Loopback3 address missing, using default value %s ") % mMuxManagerPtr->getLoopback3Ipv4Address().to_string());
}
}

Expand Down Expand Up @@ -758,11 +762,17 @@ void DbInterface::processServerIpAddress(std::vector<swss::KeyOpFieldsValuesTupl
std::string operation = kfvOp(entry);
std::vector<swss::FieldValueTuple> fieldValues = kfvFieldsValues(entry);

std::vector<swss::FieldValueTuple>::const_iterator cit = std::find_if(
fieldValues.cbegin(),
fieldValues.cend(),
[] (const swss::FieldValueTuple &fv) {return fvField(fv) == "server_ipv4";}
);
std::vector<swss::FieldValueTuple>::const_iterator cit = fieldValues.cend();
for (const std::string &field: {"server_ipv4", "server_ipv6"}) {
cit = std::find_if(
fieldValues.cbegin(),
fieldValues.cend(),
[&field] (const swss::FieldValueTuple &fv) {return fvField(fv) == field;}
);
if (cit != fieldValues.cend()) {
break;
}
}
if (cit != fieldValues.cend()) {
const std::string f = cit->first;
std::string smartNicIpAddress = cit->second;
Expand Down Expand Up @@ -914,11 +924,17 @@ void DbInterface::processSoCIpAddress(std::vector<swss::KeyOpFieldsValuesTuple>
std::string operation = kfvOp(entry);
std::vector<swss::FieldValueTuple> fieldValues = kfvFieldsValues(entry);

std::vector<swss::FieldValueTuple>::const_iterator cit = std::find_if(
fieldValues.cbegin(),
fieldValues.cend(),
[] (const swss::FieldValueTuple &fv) {return fvField(fv) == "soc_ipv4";}
);
std::vector<swss::FieldValueTuple>::const_iterator cit = fieldValues.cend();
for (const std::string &field: {"soc_ipv4", "soc_ipv6"}) {
cit = std::find_if(
fieldValues.cbegin(),
fieldValues.cend(),
[&field] (const swss::FieldValueTuple &fv) {return fvField(fv) == field;}
);
if (cit != fieldValues.cend()) {
break;
}
}
if (cit != fieldValues.cend()) {
const std::string f = cit->first;
std::string SoCIpAddress = cit->second;
Expand Down
21 changes: 6 additions & 15 deletions src/MuxManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,14 +189,9 @@ void MuxManager::addOrUpdateMuxPort(const std::string &portName, boost::asio::ip
std::shared_ptr<MuxPort> muxPortPtr = getMuxPortPtrOrThrow(portName);
common::MuxPortConfig::PortCableType portCableType = getMuxPortCableType(portName);

if (address.is_v4()) {
if (portCableType == common::MuxPortConfig::PortCableType::ActiveStandby) {
// notify server IP address for ports in active-standby cable type
muxPortPtr->handleBladeIpv4AddressUpdate(address);
}

} else if (address.is_v6()) {
// handle IPv6 probing
if (portCableType == common::MuxPortConfig::PortCableType::ActiveStandby) {
// notify server IP address for ports in active-standby cable type
muxPortPtr->handleBladeIpv4AddressUpdate(address);
}
}

Expand All @@ -212,13 +207,9 @@ void MuxManager::addOrUpdateMuxPortSoCAddress(const std::string &portName, boost
std::shared_ptr<MuxPort> muxPortPtr = getMuxPortPtrOrThrow(portName);
common::MuxPortConfig::PortCableType portCableType = getMuxPortCableType(portName);

if (address.is_v4()) {
if (portCableType == common::MuxPortConfig::PortCableType::ActiveActive) {
// notify NiC IP address for ports in active-active cable type
muxPortPtr->handleSoCIpv4AddressUpdate(address);
}
} else if (address.is_v6()) {
// handle IPv6 probing
if (portCableType == common::MuxPortConfig::PortCableType::ActiveActive) {
// notify NiC IP address for ports in active-active cable type
muxPortPtr->handleSoCIpv4AddressUpdate(address);
}
}

Expand Down
40 changes: 40 additions & 0 deletions src/MuxManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,28 @@ class MuxManager
*/
inline void setLoopback3Ipv4Address(boost::asio::ip::address& address) {mMuxConfig.setLoopback3Ipv4Address(address);};

/**
*@method setLoopbackIpv6Address
*
*@brief setter for Loopback IPv6 address
*
*@param address (in) IPv6 address
*
*@return none
*/
inline void setLoopbackIpv6Address(boost::asio::ip::address& address) {mMuxConfig.setLoopbackIpv6Address(address);};

/**
*@method setLoopback3Ipv6Address
*
*@brief setter for Loopback3 IPv6 address
*
*@param address (in) IPv6 address
*
*@return none
*/
inline void setLoopback3Ipv6Address(boost::asio::ip::address& address) {mMuxConfig.setLoopback3Ipv6Address(address);};


/**
*@method setUseWellKnownMacActiveActive
Expand Down Expand Up @@ -289,6 +311,24 @@ class MuxManager
*/
inline boost::asio::ip::address getLoopback3Ipv4Address() {return mMuxConfig.getLoopback3Ipv4Address();};

/**
* @method getLoopbackIpv6Address
*
* @brief getter for Loopback IPv6 address
*
* @return IPv6 address
*/
inline boost::asio::ip::address getLoopbackIpv6Address() {return mMuxConfig.getLoopbackIpv6Address();};

/**
* @method getLoopback3Ipv6Address
*
* @brief getter for Loopback3 IPv6 address
*
* @return IPv6 address
*/
inline boost::asio::ip::address getLoopback3Ipv6Address() {return mMuxConfig.getLoopback3Ipv6Address();};

/**
*@method initialize
*
Expand Down
42 changes: 42 additions & 0 deletions src/common/MuxConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,28 @@ class MuxConfig
*/
inline void setLoopback3Ipv4Address(boost::asio::ip::address& address) {mLoopback3Ipv4Address = address;};

/**
*@method setLoopbackIpv6Address
*
*@brief setter for Loopback IPv6 address
*
*@param address (in) IPv6 address
*
*@return none
*/
inline void setLoopbackIpv6Address(boost::asio::ip::address& address) {mLoopbackIpv6Address = address;};

/**
*@method setLoopback3Ipv6Address
*
*@brief setter for Loopback3 IPv6 address
*
*@param address (in) IPv6 address
*
*@return none
*/
inline void setLoopback3Ipv6Address(boost::asio::ip::address& address) {mLoopback3Ipv6Address = address;};

/**
*@method getNumberOfThreads
*
Expand Down Expand Up @@ -396,6 +418,24 @@ class MuxConfig
*@return IPv4 address
*/
inline boost::asio::ip::address getLoopback3Ipv4Address() {return mLoopback3Ipv4Address;};

/**
*@method getLoopbackIpv6Address
*
*@brief getter for Loopback IPv6 address
*
*@return IPv6 address
*/
inline boost::asio::ip::address getLoopbackIpv6Address() {return mLoopbackIpv6Address;};

/**
*@method getLoopback3Ipv6Address
*
*@brief getter for Loopback3 IPv6 address
*
*@return IPv6 address
*/
inline boost::asio::ip::address getLoopback3Ipv6Address() {return mLoopback3Ipv6Address;};

/**
*@method getDecreasedTimeoutIpv4_msec
Expand Down Expand Up @@ -511,6 +551,8 @@ class MuxConfig
std::array<uint8_t, ETHER_ADDR_LEN> mVlanMacAddress;
boost::asio::ip::address mLoopbackIpv4Address = boost::asio::ip::make_address("10.212.64.0");
boost::asio::ip::address mLoopback3Ipv4Address = boost::asio::ip::make_address("10.212.66.0");
boost::asio::ip::address mLoopbackIpv6Address = boost::asio::ip::make_address("::");
boost::asio::ip::address mLoopback3Ipv6Address = boost::asio::ip::make_address("::");
};

} /* namespace common */
Expand Down
18 changes: 18 additions & 0 deletions src/common/MuxPortConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,24 @@ class MuxPortConfig
*/
inline boost::asio::ip::address getLoopback3Ipv4Address() const {return mMuxConfig.getLoopback3Ipv4Address();};

/**
*@method getLoopbackIpv6Address
*
*@brief getter for Loopback IPv6 address
*
*@return IPv6 address
*/
inline boost::asio::ip::address getLoopbackIpv6Address() const {return mMuxConfig.getLoopbackIpv6Address();};

/**
*@method getLoopback3Ipv6Address
*
*@brief getter for Loopback3 IPv6 address
*
*@return IPv6 address
*/
inline boost::asio::ip::address getLoopback3Ipv6Address() const {return mMuxConfig.getLoopback3Ipv6Address();};

/**
*@method getPortName
*
Expand Down
Loading
Loading