1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
---
---
Multicast DNS Daemon
====================
== mdns
'This is early stage documentation, but at least attempts to cover
some basic usage, and bring mdns usage out of the dark.'
mDNS, also known as Bonjour or zero-configuration networking, enables automatic
discovery of computers, devices, and services on IP networks. It is
an internet standard documented in link:https://tools.ietf.org/html/rfc6762[RFC6762]
The 'mdns' package provides a compact implementation of this standard, well
integrated with the 'LEDE' system environment. In particular, almost all
interaction with the daemon is via link:ubus.html[ubus]
=== Alternatives
* mdnsd - provided by Apple's mDNSResponder package
* avahi-* - A fairly full, but quite large implementation
=== Browsing announced services
----
$ ubus call mdns scan
# wait a second or two
$ ubus call mdns browse
# big json dump example...
....
"_printer._tcp": {
"HP\\032Color\\032LaserJet\\032CP2025dn\\032(28A6CC)": {
"port": 515,
"txt": "txtvers=1",
"txt": "qtotal=1",
"txt": "rp=RAW",
"txt": "ty=HP Color LaserJet CP2025dn",
"txt": "product=(HP Color LaserJet CP2025dn)",
"txt": "priority=50",
"txt": "adminurl=http:\/\/NPI28A6CC.local.",
"txt": "Transparent=T",
"txt": "Binary=T",
"txt": "TBCP=T"
},
"HP\\032LaserJet\\032P3010\\032Series\\032[46A14F]": {
"port": 515,
"txt": "txtvers=1",
"txt": "qtotal=4",
"txt": "rp=RAW",
"txt": "pdl=application\/postscript,application\/vnd.hp-PCL,application\/vnd.hp-PCLXL",
"txt": "ty=HP LaserJet P3010 Series",
"txt": "product=(HP LaserJet P3010 Series)",
"txt": "usb_MFG=Hewlett-Packard",
"txt": "usb_MDL=HP LaserJet P3010 Series",
"txt": "priority=52",
"txt": "adminurl=http:\/\/NPI46A14F.local."
},
....
----
==== Issues/Bugs
* IP addresses are missing
* TXT records aren't valid json in the dump, so jsonfilter can't be used.
* How long is data cached? What causes it to update? No idea.
=== Announcing local services
'mdns' scans all the services listed in 'ubus' (`ubus call service list`) and
looks for 'mdns' objects in their data object. You can view this more
selectively for example with:
----
# ubus call service list | jsonfilter -e '@[*].instances[*].data.mdns'
{ "ssh_22": { "service": "_ssh._tcp.local", "port": 22, "txt": [ "daemon=dropbear" ] } }
----
Here we can see that ssh is being advertised locally.
If you want to advertise your own service, your service needs to (*AT THE
TIME OF WRITING*) be a link:procd.html[procd] managed service. You can use the `procd_add_mdns`
call to provide a basic definition.
----
procd_open_instance
....
procd_add_mdns <service> <proto> <port> [<textkey=textvalue> ... ]
...
procd_close_instance
----
As an example, the following call
----
procd_add_mdns "hoho" "tcp" "99" "daemon=special" "colour=fuschia"
----
will result in advertising `_hoho._tcp.local` with two text records.
If you wish to create a more complicated mdns information block, see
'procd_add_mdns_service' in '/lib/functions/procd.sh' but be warned that mdns
probably can't automatically support everything you can represent in json.
|