Refactor inventory path matching for precise MAC retrieval

Refactored inventory path matching to perform exact string comparison
on the final path segment, ensuring the MAC is retrieved from the
correct inventory path. Previously, partial prefix matching caused
retrieval of the MAC from incorrect paths, for example, intending to
retrieve Minerva_CMM but retrieving Minerva_CMM_SCM instead. This
change matches the string after the last '/' to select only the
intended inventory path.

Tested:
    * Configured inventory paths with
xyz.openbmc_project.Inventory.Item.NetworkInterface and MACAddress
properties:
      - /xyz/openbmc_project/inventory/system/board/Minerva_CMM_SCM
      - /xyz/openbmc_project/inventory/system/board/Minerva_CMM_BSM
      - /xyz/openbmc_project/inventory/system/board/Minerva_CMM

    * Logs:
'''
    Before:
    Case 1: Inventory MAC existed before phosphor-network started
    root@bmc:~# journalctl -u xyz.openbmc_project.Network
    bmc systemd[1]: Starting Phosphor Network Manager...
    bmc phosphor-network-manager[537]: Check VPD for MAC: Force sync enabled
    bmc phosphor-network-manager[537]: Registering the Inventory Signals Matcher
    bmc phosphor-network-manager[537]: Get info on interface Minerva_CMM, object /xyz/openbmc_project/inventory/system/board/Minerva_CMM_SCM
    bmc phosphor-network-manager[537]: Mac Address 74:d4:dd:f4:39:8c in Inventory on Interface eth0
    bmc phosphor-network-manager[537]: Wrote networkd file: /etc/systemd/network/00-bmc-eth0.network
    bmc phosphor-network-manager[537]: Setting MAC 74:d4:dd:f4:39:8c on interface eth0
    bmc phosphor-network-manager[537]: Removing the match for ethernet interfaces
    bmc phosphor-network-manager[537]: Setting NIC down on eth0
    bmc systemd[1]: Started Phosphor Network Manager.
    bmc phosphor-network-manager[537]: Reloaded systemd-networkd

    Case 2: Inventory MAC didn't exist before phosphor-network started
    root@bmc:~# journalctl -u xyz.openbmc_project.Network
    bmc systemd[1]: Starting Phosphor Network Manager...
    bmc phosphor-network-manager[428]: Check VPD for MAC: Force sync enabled
    bmc phosphor-network-manager[428]: Registering the Inventory Signals Matcher
    bmc phosphor-network-manager[428]: No Object has implemented the interface xyz.openbmc_project.Inventory.Item.NetworkInterface
    bmc phosphor-network-manager[428]: The operation failed internally.
    bmc phosphor-network-manager[428]: Exception occurred during getting of MAC address from Inventory
    bmc systemd[1]: Started Phosphor Network Manager.
    bmc phosphor-network-manager[428]: Setting MAC 74D4DDF4398C on interface eth0
    bmc phosphor-network-manager[428]: Wrote networkd file: /etc/systemd/network/00-bmc-eth0.network
    bmc phosphor-network-manager[428]: Setting MAC 74D4DDF4398D on interface eth0
    bmc phosphor-network-manager[428]: Wrote networkd file: /etc/systemd/network/00-bmc-eth0.network
    bmc phosphor-network-manager[428]: Setting MAC 74D4DDF4398E on interface eth0
    bmc phosphor-network-manager[428]: Setting NIC down on eth0
    bmc phosphor-network-manager[428]: Setting NIC down on eth0
    bmc phosphor-network-manager[428]: Reloaded systemd-networkd

    After:
    Case 1: Inventory MAC existed before phosphor-network started
    root@bmc:~# journalctl -u xyz.openbmc_project.Network
    bmc systemd[1]: Starting Phosphor Network Manager...
    bmc phosphor-network-manager[447]: Check VPD for MAC: Force sync enabled
    bmc phosphor-network-manager[447]: Registering the Inventory Signals Matcher
    bmc phosphor-network-manager[447]: No Object has implemented the interface xyz.openbmc_project.Inventory.Item.NetworkInterface
    bmc phosphor-network-manager[447]: The operation failed internally.
    bmc phosphor-network-manager[447]: Exception occurred during getting of MAC address from Inventory
    bmc systemd[1]: Started Phosphor Network Manager.
    bmc phosphor-network-manager[447]: Wrote networkd file: /etc/systemd/network/00-bmc-eth0.network
    bmc phosphor-network-manager[447]: Setting MAC 74D4DDF4398D on interface eth0
    bmc phosphor-network-manager[447]: Check xyz.openbmc_project.Network.IP for sdbus response
    bmc phosphor-network-manager[447]: Check xyz.openbmc_project.Object.Delete for sdbus response
    bmc phosphor-network-manager[447]: Setting NIC down on eth0
    bmc phosphor-network-manager[447]: Reloaded systemd-networkd

    Case 2: Inventory MAC didn't exist before phosphor-network started
    root@bmc:~# journalctl -u xyz.openbmc_project.Network
    bmc systemd[1]: Starting Phosphor Network Manager...
    bmc phosphor-network-manager[1040]: Check VPD for MAC: Force sync enabled
    bmc phosphor-network-manager[1040]: Registering the Inventory Signals Matcher
    bmc phosphor-network-manager[1040]: Get info on interface Minerva_CMM, object /xyz/openbmc_project/inventory/system/board/Minerva_CMM_SCM
    bmc phosphor-network-manager[1040]: Get info on interface Minerva_CMM, object /xyz/openbmc_project/inventory/system/board/Minerva_CMM_BSM
    bmc phosphor-network-manager[1040]: Get info on interface Minerva_CMM, object /xyz/openbmc_project/inventory/system/board/Minerva_CMM
    bmc phosphor-network-manager[1040]: Mac Address 74:d4:dd:f4:39:8d in Inventory on Interface eth0
    bmc phosphor-network-manager[1040]: Setting MAC 74:d4:dd:f4:39:8d on interface eth0
    bmc phosphor-network-manager[1040]: Removing the match for ethernet interfaces
    bmc systemd[1]: Started Phosphor Network Manager.
'''

Change-Id: Ibe9171372bd244dbaa524d9b8c7ed58d94aa5b91
Signed-off-by: Anderson Kuo <Anderson.Kuo@quantatw.com>
1 file changed
tree: e846f442aea052b6e0cd27c004a37c701f3e01af
  1. docs/
  2. gen/
  3. src/
  4. subprojects/
  5. test/
  6. yaml/
  7. .clang-format
  8. .clang-tidy
  9. .gitignore
  10. .shellcheck
  11. 60-phosphor-networkd-default.network.in
  12. LICENSE
  13. meson.build
  14. meson.options
  15. OWNERS
  16. README.md
  17. xyz.openbmc_project.Network.conf.in
  18. xyz.openbmc_project.Network.service.in
README.md

phosphor-networkd

To Build

To build this package, do the following steps:

1. meson build
2. ninja -C build