88 lines
3.1 KiB
Markdown
88 lines
3.1 KiB
Markdown
# 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
|
||
|
||
Apple’s Bonjour uses mDNS and DNS-SD. Linux’s Avahi uses IPv4LL, mDNS, and
|
||
DNS-SD. Linux’s 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.
|