treewide: Codify memory pinning
This enforces movability constraints.
Change-Id: I49dbd43a791c1d70eb7e97f30708231c053901d9
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index 102173f..5e61cbd 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -69,7 +69,8 @@
return ret;
}
-EthernetInterface::EthernetInterface(sdbusplus::bus_t& bus, Manager& manager,
+EthernetInterface::EthernetInterface(stdplus::PinnedRef<sdbusplus::bus_t> bus,
+ stdplus::PinnedRef<Manager> manager,
const AllIntfInfo& info,
std::string_view objRoot,
const config::Parser& config,
@@ -79,7 +80,8 @@
{
}
-EthernetInterface::EthernetInterface(sdbusplus::bus_t& bus, Manager& manager,
+EthernetInterface::EthernetInterface(stdplus::PinnedRef<sdbusplus::bus_t> bus,
+ stdplus::PinnedRef<Manager> manager,
const AllIntfInfo& info,
std::string&& objPath,
const config::Parser& config,
@@ -270,7 +272,7 @@
}
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
return it->second->getObjPath();
}
@@ -326,7 +328,7 @@
}
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
return it->second->getObjPath();
}
@@ -336,7 +338,7 @@
if (ipv6AcceptRA() != EthernetInterfaceIntf::ipv6AcceptRA(value))
{
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
return value;
}
@@ -346,7 +348,7 @@
if (dhcp4() != EthernetInterfaceIntf::dhcp4(value))
{
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
return value;
}
@@ -356,7 +358,7 @@
if (dhcp6() != EthernetInterfaceIntf::dhcp6(value))
{
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
return value;
}
@@ -378,7 +380,7 @@
if (old4 != new4 || old6 != new6 || oldra != newra)
{
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
return value;
}
@@ -423,10 +425,10 @@
{
// We only need to bring down the interface, networkd will always bring
// up managed interfaces
- manager.addReloadPreHook(
+ manager.get().addReloadPreHook(
[ifname = interfaceName()]() { system::setNICUp(ifname, false); });
}
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
return value;
}
@@ -453,7 +455,7 @@
EthernetInterfaceIntf::staticNameServers(value);
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
catch (const InternalFailure& e)
{
@@ -479,14 +481,15 @@
ServerList EthernetInterface::getNTPServerFromTimeSyncd()
{
ServerList servers; // Variable to capture the NTP Server IPs
- auto method = bus.new_method_call(TIMESYNCD_SERVICE, TIMESYNCD_SERVICE_PATH,
- PROPERTY_INTERFACE, METHOD_GET);
+ auto method =
+ bus.get().new_method_call(TIMESYNCD_SERVICE, TIMESYNCD_SERVICE_PATH,
+ PROPERTY_INTERFACE, METHOD_GET);
method.append(TIMESYNCD_INTERFACE, "LinkNTPServers");
try
{
- auto reply = bus.call(method);
+ auto reply = bus.get().call(method);
std::variant<ServerList> response;
reply.read(response);
servers = std::get<ServerList>(response);
@@ -523,14 +526,14 @@
using type = std::vector<std::tuple<int32_t, std::vector<uint8_t>>>;
std::variant<type> name; // Variable to capture the DNS property
- auto method = bus.new_method_call(RESOLVED_SERVICE, OBJ_PATH.c_str(),
- PROPERTY_INTERFACE, METHOD_GET);
+ auto method = bus.get().new_method_call(RESOLVED_SERVICE, OBJ_PATH.c_str(),
+ PROPERTY_INTERFACE, METHOD_GET);
method.append(RESOLVED_INTERFACE, "DNS");
try
{
- auto reply = bus.call(method);
+ auto reply = bus.get().call(method);
reply.read(name);
}
catch (const sdbusplus::exception_t& e)
@@ -552,7 +555,8 @@
{
auto intfName = fmt::format(FMT_COMPILE("{}.{}"), interfaceName(), id);
auto idStr = std::to_string(id);
- if (manager.interfaces.find(intfName) != manager.interfaces.end())
+ if (manager.get().interfaces.find(intfName) !=
+ manager.get().interfaces.end())
{
log<level::ERR>("VLAN already exists", entry("VLANID=%u", id));
elog<InvalidArgument>(Argument::ARGUMENT_NAME("VLANId"),
@@ -582,7 +586,7 @@
bus, manager, info, objRoot, config::Parser(), nicEnabled());
ObjectPath ret = vlanIntf->objPath;
- manager.interfaces.emplace(intfName, std::move(vlanIntf));
+ manager.get().interfaces.emplace(intfName, std::move(vlanIntf));
// write the device file for the vlan interface.
config::Parser config;
@@ -590,10 +594,11 @@
netdev["Name"].emplace_back(intfName);
netdev["Kind"].emplace_back("vlan");
config.map["VLAN"].emplace_back()["Id"].emplace_back(std::move(idStr));
- config.writeFile(config::pathForIntfDev(manager.getConfDir(), intfName));
+ config.writeFile(
+ config::pathForIntfDev(manager.get().getConfDir(), intfName));
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
return ret;
}
@@ -605,7 +610,7 @@
EthernetInterfaceIntf::staticNTPServers(value);
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
catch (InternalFailure& e)
{
@@ -653,7 +658,7 @@
: (dhcp6() ? "ipv6" : "false"));
{
auto& vlans = network["VLAN"];
- for (const auto& [_, intf] : manager.interfaces)
+ for (const auto& [_, intf] : manager.get().interfaces)
{
if (intf->vlan && intf->vlan->parentIdx == ifIdx)
{
@@ -722,7 +727,7 @@
{
auto& dhcp = config.map["DHCP"].emplace_back();
dhcp["ClientIdentifier"].emplace_back("mac");
- const auto& conf = manager.getDHCPConf();
+ const auto& conf = manager.get().getDHCPConf();
auto dns_enabled = conf.dnsEnabled() ? "true" : "false";
dhcp["UseDNS"].emplace_back(dns_enabled);
dhcp["UseDomains"].emplace_back(dns_enabled);
@@ -732,7 +737,8 @@
dhcp["SendHostname"].emplace_back(conf.sendHostNameEnabled() ? "true"
: "false");
}
- auto path = config::pathForIntfConf(manager.getConfDir(), interfaceName());
+ auto path =
+ config::pathForIntfConf(manager.get().getConfDir(), interfaceName());
config.writeFile(path);
auto msg = fmt::format("Wrote networkd file: {}", path.native());
log<level::INFO>(msg.c_str(), entry("FILE=%s", path.c_str()));
@@ -774,7 +780,7 @@
if (newMAC != oldMAC)
{
// Update everything that depends on the MAC value
- for (const auto& [_, intf] : manager.interfaces)
+ for (const auto& [_, intf] : manager.get().interfaces)
{
if (intf->vlan && intf->vlan->parentIdx == ifIdx)
{
@@ -784,11 +790,11 @@
MacAddressIntf::macAddress(validMAC);
writeConfigurationFile();
- manager.addReloadPreHook([interface]() {
+ manager.get().addReloadPreHook([interface]() {
// The MAC and LLADDRs will only update if the NIC is already down
system::setNICUp(interface, false);
});
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
#ifdef HAVE_UBOOT_ENV
@@ -816,7 +822,7 @@
addrs.clear();
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
}
std::string EthernetInterface::defaultGateway(std::string gateway)
@@ -843,7 +849,7 @@
EthernetInterfaceIntf::defaultGateway(gateway);
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
return gateway;
}
@@ -872,14 +878,14 @@
EthernetInterfaceIntf::defaultGateway6(gateway);
writeConfigurationFile();
- manager.reloadConfigs();
+ manager.get().reloadConfigs();
return gateway;
}
EthernetInterface::VlanProperties::VlanProperties(
sdbusplus::bus_t& bus, stdplus::const_zstring objPath,
- const InterfaceInfo& info, EthernetInterface& eth) :
+ const InterfaceInfo& info, stdplus::PinnedRef<EthernetInterface> eth) :
VlanIfaces(bus, objPath.c_str(), VlanIfaces::action::defer_emit),
parentIdx(*info.parent_idx), eth(eth)
{
@@ -889,24 +895,24 @@
void EthernetInterface::VlanProperties::delete_()
{
- auto intf = eth.interfaceName();
+ auto intf = eth.get().interfaceName();
// Remove all configs for the current interface
- const auto& confDir = eth.manager.getConfDir();
+ const auto& confDir = eth.get().manager.get().getConfDir();
std::error_code ec;
std::filesystem::remove(config::pathForIntfConf(confDir, intf), ec);
std::filesystem::remove(config::pathForIntfDev(confDir, intf), ec);
- if (eth.ifIdx > 0)
+ if (eth.get().ifIdx > 0)
{
- eth.manager.interfacesByIdx.erase(eth.ifIdx);
+ eth.get().manager.get().interfacesByIdx.erase(eth.get().ifIdx);
}
- auto it = eth.manager.interfaces.find(intf);
+ auto it = eth.get().manager.get().interfaces.find(intf);
auto obj = std::move(it->second);
- eth.manager.interfaces.erase(it);
+ eth.get().manager.get().interfaces.erase(it);
// Write an updated parent interface since it has a VLAN entry
- for (const auto& [_, intf] : eth.manager.interfaces)
+ for (const auto& [_, intf] : eth.get().manager.get().interfaces)
{
if (intf->ifIdx == parentIdx)
{
@@ -914,17 +920,17 @@
}
}
- if (eth.ifIdx > 0)
+ if (eth.get().ifIdx > 0)
{
// We need to forcibly delete the interface as systemd does not
- eth.manager.addReloadPostHook(
- [idx = eth.ifIdx]() { system::deleteIntf(idx); });
+ eth.get().manager.get().addReloadPostHook(
+ [idx = eth.get().ifIdx]() { system::deleteIntf(idx); });
// Ignore the interface so the reload doesn't re-query it
- eth.manager.ignoredIntf.emplace(eth.ifIdx);
+ eth.get().manager.get().ignoredIntf.emplace(eth.get().ifIdx);
}
- eth.manager.reloadConfigs();
+ eth.get().manager.get().reloadConfigs();
}
} // namespace network