diff options
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Correct-the-IPv6-Router-Address-Configuration-comman.patch')
-rw-r--r-- | meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Correct-the-IPv6-Router-Address-Configuration-comman.patch | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Correct-the-IPv6-Router-Address-Configuration-comman.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Correct-the-IPv6-Router-Address-Configuration-comman.patch new file mode 100644 index 000000000..658f0d8b7 --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Correct-the-IPv6-Router-Address-Configuration-comman.patch @@ -0,0 +1,120 @@ +From 4d7c0f704df21912fa447caca4dbba246d1b80f6 Mon Sep 17 00:00:00 2001 +From: Johnathan Mantey <johnathanx.mantey@intel.com> +Date: Tue, 26 Jan 2021 14:24:53 -0800 +Subject: [PATCH] Correct the IPv6 Router Address Configuration command + +The IPv6 Router Address Configuration Get/Set LAN command was not +reporting or modifying the correct portion of the networking +system. This command is intended to configure the Routing +Advertisement feature of IPv6. It is not a direct reflection of the +DHCP state. + +Systemd-networkd manages the Routing Advertisement via the +IPv6AcceptRA parameter, which according to the networkd documentaion, +enables/disables IPv6 DHCP functionality. + +Tested: +Issued "ipmitool raw 12 2 3 64 0 0" and was able to read the current +state of the IPv6AcceptRA variable. +Issued "ipmitool raw 12 1 3 64 2" and saw the configuration file for +the channel change, and the addition of a new IPv6 address to the +network device. +Issued "ipmitool raw 12 1 3 64 0" and saw that configuration file for +the channel change, and the removal of the IPv6 address from the +network device. + +Change-Id: Id01441f88ccc9d56449ab8115f4855de74e80cfc +Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com> +--- + transporthandler.cpp | 61 ++++++++++++++++++++++++-------------------- + 1 file changed, 34 insertions(+), 27 deletions(-) + +diff --git a/transporthandler.cpp b/transporthandler.cpp +index b81e0d5..50343c7 100644 +--- a/transporthandler.cpp ++++ b/transporthandler.cpp +@@ -1260,6 +1260,35 @@ SetStatus& getSetStatus(uint8_t channel) + return setStatus[channel] = SetStatus::Complete; + } + ++/** @brief Gets the IPv6 Router Advertisement value ++ * ++ * @param[in] bus - The bus object used for lookups ++ * @param[in] params - The parameters for the channel ++ * @return networkd IPV6AcceptRA value ++ */ ++static bool getIPv6AcceptRA(sdbusplus::bus::bus& bus, ++ const ChannelParams& params) ++{ ++ auto raEnabled = ++ std::get<bool>(getDbusProperty(bus, params.service, params.logicalPath, ++ INTF_ETHERNET, "IPv6AcceptRA")); ++ return raEnabled; ++} ++ ++/** @brief Sets the IPv6AcceptRA flag ++ * ++ * @param[in] bus - The bus object used for lookups ++ * @param[in] params - The parameters for the channel ++ * @param[in] ipv6AcceptRA - boolean to enable/disable IPv6 Routing ++ * Advertisement ++ */ ++void setIPv6AcceptRA(sdbusplus::bus::bus& bus, const ChannelParams& params, ++ const bool ipv6AcceptRA) ++{ ++ setDbusProperty(bus, params.service, params.logicalPath, INTF_ETHERNET, ++ "IPv6AcceptRA", ipv6AcceptRA); ++} ++ + /** + * Define placeholder command handlers for the OEM Extension bytes for the Set + * LAN Configuration Parameters and Get LAN Configuration Parameters +@@ -1629,22 +1658,8 @@ RspType<> setLan(Context::ptr ctx, uint4_t channelBits, uint4_t reserved1, + { + return responseReqDataLenInvalid(); + } +- std::bitset<8> expected; +- EthernetInterface::DHCPConf dhcp = +- channelCall<getDHCPProperty>(channel); +- if ((dhcp == EthernetInterface::DHCPConf::both) | +- (dhcp == EthernetInterface::DHCPConf::v6)) +- { +- expected[IPv6RouterControlFlag::Dynamic] = 1; +- } +- else +- { +- expected[IPv6RouterControlFlag::Static] = 1; +- } +- if (expected != control) +- { +- return responseInvalidFieldRequest(); +- } ++ bool enableRA = control[IPv6RouterControlFlag::Dynamic]; ++ channelCall<setIPv6AcceptRA>(channel, enableRA); + return responseSuccess(); + } + case LanParam::IPv6StaticRouter1IP: +@@ -1948,17 +1963,9 @@ RspType<message::Payload> getLan(Context::ptr ctx, uint4_t channelBits, + case LanParam::IPv6RouterControl: + { + std::bitset<8> control; +- EthernetInterface::DHCPConf dhcp = +- channelCall<getDHCPProperty>(channel); +- if ((dhcp == EthernetInterface::DHCPConf::both) || +- (dhcp == EthernetInterface::DHCPConf::v6)) +- { +- control[IPv6RouterControlFlag::Dynamic] = 1; +- } +- else +- { +- control[IPv6RouterControlFlag::Static] = 1; +- } ++ control[IPv6RouterControlFlag::Dynamic] = ++ channelCall<getIPv6AcceptRA>(channel); ++ control[IPv6RouterControlFlag::Static] = 0; + ret.pack(control); + return responseSuccess(std::move(ret)); + } +-- +2.26.2 + |