TVHeadend, Docker, HDHomeRun, macOS: no UDP broadcast, manually configure HDHomeRun?
Docker on macOS does not support "--net=host" in a way that would be useful. The containers actually run inside a VM, and it is the VM's network "--net=host" exposes, not that of the actual physical host. This is a well-known limitation due to the implementation on macOS and a fix is not forthcoming.
If I understand correctly that causes HDHomeRun receivers not to be detected because the UDP broadcast will not work.
Would it be possible to instead manually provide the IP addresses of the HDHomeRun devices on the LAN, either by entering them in the UI or by providing a configuration file somewhere? I tried copying the configuration from an existing and working TVHeadend install, but that did not appear to carry over the HDHomeRun receiver info. That might allow this configuration to work in a bridged Docker network configuration.
Updated by Mono Polimorph almost 5 years ago
Thank for your response in http://www.tvheadend.org/issues/4157
The function of (--satip_xml option) is great for the SAT>IP protocol.
However, I suggest to add a similar option for HDHOMERUNs, like "--hdhr_ip":
The discovery protocol of the HDHOMERUN uses UDP broadcasts to port 65001, and then the TCP port 65001 for the control plane.
(search for '#define HDHOMERUN_DISCOVER_UDP_PORT 65001' & '#define HDHOMERUN_CONTROL_TCP_PORT 65001' in "hdhomerun_pkt.h").
The problem is then the broadcast domain... the discovering doesn't work then in routed networks.
The solution is quite simple: the "--hdhr_ip" option indicates one IP where a HDHOMERUN is running and listening in the port tcp/65001. Don't care about if the device is active or not, so it's like when it restarts: you can't connect to the TCP port if the device is shutdown. So, you only need to add the IP (from the --hdhr_ip option) to the list of returned servers, as the library uses the IP address of the device to comunicate with it. Typically using the "libhdhomerun" you use the function hdhomerun_device_create_from_str() and this function can accept <device id> OR <device id>-<tuner index> OR <ip address>. Then, your entry point can be the IP address. See the API doc included in "hdhomerun_device.h".
I hope you like to implement it!