1 #pragma once 2 3 #include "associations.hpp" 4 #include "types.hpp" 5 6 #include <boost/container/flat_map.hpp> 7 #include <boost/container/flat_set.hpp> 8 9 #include <cassert> 10 #include <string> 11 12 /** @brief Define allow list and deny list data structure */ 13 using AllowDenyList = boost::container::flat_set<std::string>; 14 15 /** @brief The associations definitions interface */ 16 constexpr const char* assocDefsInterface = 17 "xyz.openbmc_project.Association.Definitions"; 18 19 /** @brief The associations definitions property name */ 20 constexpr const char* assocDefsProperty = "Associations"; 21 22 /** @brief InterfacesAdded represents the dbus data from the signal 23 * 24 * There are 2 pairs 25 * pair1: D-bus Interface,vector[pair2] 26 * pair2: D-bus Method,vector[Associations] 27 */ 28 using InterfacesAdded = std::vector<std::pair< 29 std::string, std::vector<std::pair< 30 std::string, std::variant<std::vector<Association>>>>>>; 31 32 /** @brief Get well known name of input unique name 33 * 34 * If user passes in well known name then that will be returned. 35 * 36 * @param[in] owners - Current list of owners 37 * @param[in] request - The name to look up 38 * @param[out] wellKnown - The well known name if found 39 * 40 * @return True if well known name is found, false otherwise 41 */ 42 bool getWellKnown( 43 const boost::container::flat_map<std::string, std::string>& owners, 44 const std::string& request, std::string& well_known); 45 46 /** @brief Determine if dbus service is something to monitor 47 * 48 * mapper supports an allowlist and denylist concept. If an allowlist is 49 * provided as input then only dbus objects matching that list is monitored. If 50 * a denylist is provided then objects matching it will not be monitored. 51 * 52 * @param[in] processName - Dbus service name 53 * @param[in] allowList - The allow list 54 * @param[in] denyList - The deny list 55 * 56 * @return True if input process_name should be monitored, false otherwise 57 */ 58 bool needToIntrospect(const std::string& processName, 59 const AllowDenyList& allowList, 60 const AllowDenyList& denyList); 61 62 /** @brief Handle the removal of an existing name in objmgr data structures 63 * 64 * @param[in,out] nameOwners - Map of unique name to well known name 65 * @param[in] wellKnown - Well known name that has new owner 66 * @param[in] oldOwner - Old unique name 67 * @param[in,out] interfaceMap - Map of interfaces 68 * @param[in,out] assocMaps - The association maps 69 * @param[in,out] server - sdbus system object 70 * 71 */ 72 void processNameChangeDelete( 73 boost::container::flat_map<std::string, std::string>& nameOwners, 74 const std::string& wellKnown, const std::string& oldOwner, 75 interface_map_type& interfaceMap, AssociationMaps& assocMaps, 76 sdbusplus::asio::object_server& server); 77 78 /** @brief Handle an interfaces added signal 79 * 80 * @param[in,out] interfaceMap - Global map of interfaces 81 * @param[in] objPath - New path to process 82 * @param[in] interfacesAdded - New interfaces to process 83 * @param[in] wellKnown - Well known name that has new owner 84 * @param[in,out] assocMaps - The association maps 85 * @param[in,out] server - sdbus system object 86 * 87 */ 88 void processInterfaceAdded(interface_map_type& interfaceMap, 89 const sdbusplus::message::object_path& objPath, 90 const InterfacesAdded& intfAdded, 91 const std::string& wellKnown, 92 AssociationMaps& assocMaps, 93 sdbusplus::asio::object_server& server); 94