nmos-cpp: IS-04 unicast discover more than 2 doesn't work

Hello,

I’m having issues discovering more than 2 registration API’s in unicast DNS_SD mode. I am using avahi 0.7 as DNS_SD resolver and have the following BIND config (sorry for the uninitiated 😃 ):

$ORIGIN .
$TTL 604800     ; 1 week
axon.jtnm.lan         IN SOA  axon.jtnm.lan. root.axon.jtnm.lan. (
                                1          ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                604800     ; minimum (1 week)
                                )
                        NS      axon.jtnm.lan.
                        NS      localhost.
                        A       192.168.10.254
$ORIGIN axon.jtnm.lan.
$TTL 0       ; 1 hour

; reg1             A       192.168.10.254

; These lines indicate to clients that this server supports DNS Service Discovery
b._dns-sd._udp	IN	PTR	@
lb._dns-sd._udp	IN	PTR	@

; These lines indicate to clients which service types this server may advertise
_services._dns-sd._udp	PTR	_nmos-register._tcp
_services._dns-sd._udp	PTR	_nmos-registration._tcp
_services._dns-sd._udp	PTR	_nmos-query._tcp
_services._dns-sd._udp	PTR	_nmos-system._tcp

; These lines give the fully qualified DNS names to the IP addresses of the hosts which we'd like to discover
; This example uses a domain of 'dns.nmos.tv'. We recommend using a subdomain of a domain name which you own.
reg1	IN	A	192.168.10.1
reg2	IN	A	192.168.10.2
reg3	IN	A	192.168.10.3
reg4	IN	A	192.168.10.4
; query1.dns.nmos.tv.	IN	A	192.168.200.6

; There should be one PTR record for each instance of the service you wish to advertise.
; Here we have one Registration API (_nmos-registration._tcp) and one Query API (_nmos-query._tcp)
; From v1.3, the Registration API switches to use a new name (_nmos-register._tcp)
_nmos-register._tcp	PTR	reg-api-1._nmos-register._tcp
_nmos-registration._tcp	PTR	reg-api-1._nmos-registration._tcp
_nmos-query._tcp	PTR	qry-api-1._nmos-query._tcp
_nmos-system._tcp	PTR	sys-api-1._nmos-system._tcp

_nmos-register._tcp	PTR	reg-api-2._nmos-register._tcp
_nmos-registration._tcp	PTR	reg-api-2._nmos-registration._tcp
_nmos-query._tcp	PTR	qry-api-2._nmos-query._tcp
_nmos-system._tcp	PTR	sys-api-2._nmos-system._tcp

_nmos-register._tcp	PTR	reg-api-3._nmos-register._tcp
_nmos-registration._tcp	PTR	reg-api-3._nmos-registration._tcp
_nmos-query._tcp	PTR	qry-api-3._nmos-query._tcp
_nmos-system._tcp	PTR	sys-api-3._nmos-system._tcp

_nmos-register._tcp	PTR	reg-api-4._nmos-register._tcp
_nmos-registration._tcp	PTR	reg-api-4._nmos-registration._tcp
_nmos-query._tcp	PTR	qry-api-4._nmos-query._tcp
_nmos-system._tcp	PTR	sys-api-4._nmos-system._tcp


; Next we have a SRV and a TXT record corresponding to each PTR above, first the Registration API
; The SRV links the PTR name to a resolvable DNS name (see the A records above) and identify the port which the API runs on
; The TXT records indicate additional metadata relevant to the IS-04 spec
reg-api-1._nmos-register._tcp	SRV	0 0 3210 reg1.axon.jtnm.lan.
reg-api-1._nmos-register._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=50" "api_auth=false"
reg-api-2._nmos-register._tcp	SRV	0 0 3210 reg2.axon.jtnm.lan.
reg-api-2._nmos-register._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=60" "api_auth=false"
reg-api-3._nmos-register._tcp	SRV	0 0 3210 reg3.axon.jtnm.lan.
reg-api-3._nmos-register._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=70" "api_auth=false"
reg-api-4._nmos-register._tcp	SRV	0 0 3210 reg4.axon.jtnm.lan.
reg-api-4._nmos-register._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=80" "api_auth=false"

reg-api-1._nmos-registration._tcp	SRV	0 0 3210 reg1.axon.jtnm.lan.
reg-api-1._nmos-registration._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=50" "api_auth=false"
reg-api-2._nmos-registration._tcp	SRV	0 0 3210 reg2.axon.jtnm.lan.
reg-api-2._nmos-registration._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=60" "api_auth=false"
reg-api-3._nmos-registration._tcp	SRV	0 0 3210 reg3.axon.jtnm.lan.
reg-api-3._nmos-registration._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=70" "api_auth=false"
reg-api-4._nmos-registration._tcp	SRV	0 0 3210 reg4.axon.jtnm.lan.
reg-api-4._nmos-registration._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=80" "api_auth=false"

; Finally, the SRV and TXT for the Query API
qry-api-1._nmos-query._tcp	SRV	0 0 3210 reg1.axon.jtnm.lan.
qry-api-1._nmos-query._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=50" "api_auth=false"
qry-api-2._nmos-query._tcp	SRV	0 0 3210 reg2.axon.jtnm.lan.
qry-api-2._nmos-query._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=60" "api_auth=false"
qry-api-3._nmos-query._tcp	SRV	0 0 3210 reg3.axon.jtnm.lan.
qry-api-3._nmos-query._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=70" "api_auth=false"
qry-api-4._nmos-query._tcp	SRV	0 0 3210 reg3.axon.jtnm.lan.
qry-api-4._nmos-query._tcp	TXT	"api_ver=v1.0,v1.1,v1.2,v1.3" "api_proto=http" "pri=80" "api_auth=false"

sys-api-1._nmos-system._tcp	SRV	0 0 10641 reg1.axon.jtnm.lan.
sys-api-1._nmos-system._tcp	TXT	"api_ver=v1.0" "api_proto=http" "pri=50" "api_auth=false"
sys-api-2._nmos-system._tcp	SRV	0 0 10641 reg2.axon.jtnm.lan.
sys-api-2._nmos-system._tcp	TXT	"api_ver=v1.0" "api_proto=http" "pri=60" "api_auth=false"
sys-api-3._nmos-system._tcp	SRV	0 0 10641 reg3.axon.jtnm.lan.
sys-api-3._nmos-system._tcp	TXT	"api_ver=v1.0" "api_proto=http" "pri=70" "api_auth=false"
sys-api-4._nmos-system._tcp	SRV	0 0 10641 reg4.axon.jtnm.lan.
sys-api-4._nmos-system._tcp	TXT	"api_ver=v1.0" "api_proto=http" "pri=80" "api_auth=false"

However when running nmos-cpp I get the following output: image

I always seem to get one or two, never four. In multicast the mechanism works find. Any thoughts?

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 36 (18 by maintainers)

Commits related to this issue

Most upvoted comments

I’m doing a full clean build now to verify. Should take around an hour or so. But yeah I think this is the only change.