1# Service processor discovery through Avahi
2Author: Ratan Gupta
3
4Other contributors: Asmitha KR
5
6Created: 2019-07-12
7
8# Background and References
9[1] https://www.engineersgarage.com/Articles/IoT-Service-Discovery-Protocols
10[2] http://www.zeroconf.org/ZeroconfAndUPnP.html : comparison of mDns v/s UPnP.
11[3] https://www.avahi.org/
12[4] https://github.com/lathiat/avahi/blob/master/avahi-daemon/example.service
13
14Apple’s Bonjour uses mDNS and DNS-SD. Linux’s Avahi uses IPv4LL, mDNS, and DNS-SD.
15Linux’s systemd uses resolve hostnames on a network via DNS, mDNS, and LMMNR.
16
17## Problem Description
18In a network where there are thousands of system, Management console should
19be able to discover the server. We have a requirement where the management
20console wants to discover the vendor-specific server.
21
22eg: Management console wants to discover the low-end server of manufacturer XYZ.
23
24## Proposed Design
25Currently in openBMC, Avahi is being used as service discovery.
26Avahi is a system which facilitates service discovery on a local network via the
27mDNS/DNS-SD protocol suite.  BMC publishes the hostname and interface details to
28the network using the Avahi service.
29
30The services that are being published by Avahi have various fields like -
31service name, type, port, hostname, address, port, and a text record. To solve
32the above-listed problem, we are proposing a solution in which the
33vendor-specific information is included in the text record field of the Avahi
34service file.
35
36To do so, currently, in OpenBMC we have the infrastructure where the
37service-specific data is passed through a systemd service specific bb file.
38Depending on the distro feature(Avahi) enabled or not, it generates the Avahi
39service file with the given data. We are enhancing this infrastructure to add
40the vendor-specific information in the avahi service file(under txt-record).
41
42Following commits implements the behaviour.
43
44 https://gerrit.openbmc.org/c/openbmc/meta-phosphor/+/22950
45 https://gerrit.openbmc.org/c/openbmc/meta-ibm/+/22951
46
47As part of avahi discovery response, the client receives the following:
481) Hostname
492) IP address
503) Service Port
514) Service Type
525) Additional data
53
54### How to do discovery through avahi
55
56The following command may be used to discover the BMC systems in the network.
57Avahi-browse -rt <service type>
58e.g. To discover service type : _obmc_rest._tcp
59avahi-browse -rt _obmc_rest._tcp
60Output of the above command is as follows
61avahi-browse -rt _obmc_rest._tcp
62+   eth0 IPv6 obmc_rest       _obmc_rest._tcp      local
63+   eth0 IPv4 obmc_rest       _obmc_rest._tcp      local
64=   eth0 IPv6 obmc_rest       _obmc_rest._tcp      local
65   hostname = [witherspoon-cdcb785972fb41f082c7ca747e287fa6.local]
66   address = [fe80::72e2:84ff:fe14:2390]
67   port = [443]
68   txt = ["Manufacturer=XYZ"]
69   txt = ["Type=abc"]
70=   eth0 IPv4 obmc_rest       _obmc_rest._tcp      local
71   hostname = [witherspoon-cdcb785972fb41f082c7ca747e287fa6.local]
72   address = [9.5.180.233]
73   port = [443]
74   txt = ["Manufacturer=XYZ"]
75   txt = ["Type=abc"]
76
77## Alternatives Considered
78openSLP
79
80## Impacts
81None.
82
83## Testing
84The path /etc/avahi/services contain all the services that avahi publishes on
85startup.
86