openbmc_docs/designs/management-console/service-discovery.md
2024-12-23 14:53:31 +08:00

88 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Service processor discovery through Avahi
Author: Ratan Gupta
Other contributors: Asmitha KR
Created: 2019-07-12
# Background and References
[1] https://www.engineersgarage.com/Articles/IoT-Service-Discovery-Protocols [2]
http://www.zeroconf.org/ZeroconfAndUPnP.html : comparison of mDns v/s UPnP. [3]
https://www.avahi.org/ [4]
https://github.com/lathiat/avahi/blob/master/avahi-daemon/example.service
Apples Bonjour uses mDNS and DNS-SD. Linuxs Avahi uses IPv4LL, mDNS, and
DNS-SD. Linuxs systemd uses resolve hostnames on a network via DNS, mDNS, and
LMMNR.
## Problem Description
In a network where there are thousands of system, Management console should be
able to discover the server. We have a requirement where the management console
wants to discover the vendor-specific server.
eg: Management console wants to discover the low-end server of manufacturer XYZ.
## Proposed Design
Currently in openBMC, Avahi is being used as service discovery. Avahi is a
system which facilitates service discovery on a local network via the
mDNS/DNS-SD protocol suite. BMC publishes the hostname and interface details to
the network using the Avahi service.
The services that are being published by Avahi have various fields like -
service name, type, port, hostname, address, port, and a text record. To solve
the above-listed problem, we are proposing a solution in which the
vendor-specific information is included in the text record field of the Avahi
service file.
To do so, currently, in OpenBMC we have the infrastructure where the
service-specific data is passed through a systemd service specific bb file.
Depending on the distro feature(Avahi) enabled or not, it generates the Avahi
service file with the given data. We are enhancing this infrastructure to add
the vendor-specific information in the avahi service file(under txt-record).
Following commits implements the behaviour.
https://gerrit.openbmc.org/c/openbmc/meta-phosphor/+/22950
https://gerrit.openbmc.org/c/openbmc/meta-ibm/+/22951
As part of avahi discovery response, the client receives the following:
1. Hostname
2. IP address
3. Service Port
4. Service Type
5. Additional data
### How to do discovery through avahi
The following command may be used to discover the BMC systems in the network.
Avahi-browse -rt <service type> e.g. To discover service type :
\_obmc_rest.\_tcp avahi-browse -rt \_obmc_rest.\_tcp Output of the above command
is as follows avahi-browse -rt \_obmc_rest.\_tcp
- eth0 IPv6 obmc_rest \_obmc_rest.\_tcp local
- eth0 IPv4 obmc_rest \_obmc_rest.\_tcp local = eth0 IPv6 obmc_rest
\_obmc_rest.\_tcp local hostname =
[witherspoon-cdcb785972fb41f082c7ca747e287fa6.local] address =
[fe80::72e2:84ff:fe14:2390] port = [443] txt = ["Manufacturer=XYZ"] txt =
["Type=abc"] = eth0 IPv4 obmc_rest \_obmc_rest.\_tcp local hostname =
[witherspoon-cdcb785972fb41f082c7ca747e287fa6.local] address = [9.5.180.233]
port = [443] txt = ["Manufacturer=XYZ"] txt = ["Type=abc"]
## Alternatives Considered
openSLP
## Impacts
None.
## Testing
The path /etc/avahi/services contain all the services that avahi publishes on
startup.