Rafał Miłecki [Fri, 10 Feb 2017 22:37:11 +0000 (23:37 +0100)]
Don't use _services._dns-sd._tcp.local
It seems mdns(d) was trying to support queries for two records with
following names:
1) _services._dns-sd._udp.local
2) _services._dns-sd._tcp.local
According to the RFC 6763 Section 9 only the first one should be used
and response PTR records should include services of both protocols: UDP
and TCP.
This fixes discovering TCP services as in practice no other software was
sending queries with _services._dns-sd._tcp.local.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Rafał Miłecki [Fri, 10 Feb 2017 21:55:00 +0000 (22:55 +0100)]
Simplify UDP vs. TCP handling in service_announce_services
Out of 3 calls of this function only one doesn't have TCP vs. UDP
hardcoded. It's easier to move string check to that place and make this
function take "int tcp" argument instead.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Rafał Miłecki [Fri, 10 Feb 2017 13:48:36 +0000 (14:48 +0100)]
Check correct attributes when loading service from blob
We access SERVICE_TXT so we should check for this entry. Checking
SERVICE_SERVICE doesn't make sense anyway as it's verified few lines
above (in the same funcion).
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Rafał Miłecki [Fri, 10 Feb 2017 13:44:39 +0000 (14:44 +0100)]
Avoid duplicated iteration over services when announcing
In function service_announce_services we iterate over services and
handle every single one so calling service_reply which also iterates
doesn't make sense.
In simple cases it was just wasting CPU cycles. We got service, we were
passing its name and we were looking for it again comparing names.
In cases with one service available on few different ports it was worse.
For every iterated service we were announcing that one and all other
sharing the same name. It resulted in sending n^2 records.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Rafał Miłecki [Fri, 10 Feb 2017 11:58:24 +0000 (12:58 +0100)]
Move matching logic out of service_reply_single function
There is only 1 place in project calling this function with the match
argument. It's easier to add prooper condition in this place and have
service_reply_single simplified by taking 1 less argument.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Rafał Miłecki [Thu, 9 Feb 2017 09:11:16 +0000 (10:11 +0100)]
Send A(AAA) records when announcing
This allows device to be discovered by its local hostname.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Rafał Miłecki [Thu, 9 Feb 2017 08:19:05 +0000 (09:19 +0100)]
Fix/change comment format about port 5353
It wasn't ANSI C comment and there were 2 unneeded spaces.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Rafał Miłecki [Wed, 8 Feb 2017 17:04:27 +0000 (18:04 +0100)]
Don't call dns_reply_a from service_reply
This simplifies code without changing any behavior. Having this call in
service_reply required checking two conditions and was making code flow
harder to follow.
There are 2 more service_reply calls in the project:
1) In service_announce_services where we iterate over &services and
every element of this list has "service" field filled. It means match
argument was never NULL and dns_reply_a was never called from there.
2) In parse_question which also receives some name (there is a proper
check in the dns_handle_packet). No call there neither.
So after all there was only 1 place that was indeed calling dns_reply_a.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Rafał Miłecki [Wed, 8 Feb 2017 15:47:52 +0000 (16:47 +0100)]
Rename service_reply_a to dns_reply_a and move it to proper file
This function doesn't really do anything service specify, it just sends
an A(AAA) records. It could probably be used even without any services
registered.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Rafał Miłecki [Wed, 8 Feb 2017 14:20:42 +0000 (15:20 +0100)]
Add simple "Fall through" comment to the announce_timer function switch
It's a common practice to add such comments to make it clear break
instruction was skipped on purpose.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Rafał Miłecki [Wed, 8 Feb 2017 13:04:57 +0000 (14:04 +0100)]
Change dns_send_question function arg from unicast to multicast
This trivial patch just reverses argument logic to make it a bit more
consistent with struct interface which contains "multicast" field. This
hopefully will make typos less likely and code easier to follow.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
Johannes Wegener [Wed, 25 Jan 2017 23:07:00 +0000 (00:07 +0100)]
do not assume that dns structs are aligned
They do not have a fixed alignment in the packet. ARMv5 has separate
instructions for unaligned and aligned 16-bit load/store. The aligned
ones have undefined behavior if the addresses are unaligned, and that
completely breaks packet parsing.
Signed-off-by: Johannes Wegener <mail@johanneswegener.de>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
John Crispin [Mon, 19 Dec 2016 12:06:15 +0000 (13:06 +0100)]
mdnsd: the service is ignoring questions
When a question is incoming the service was incorrectly resettig the
query timeout regardless of it being the right service. This causes
the code to never answer the questions it is being asked.
Reported-by: Cristian Morales Vega <cristian@samknows.com>
Signed-off-by: John Crispin <john@phrozen.org>
Florian Fainelli [Tue, 13 Dec 2016 22:23:53 +0000 (14:23 -0800)]
cmake: Search for libjson-c
Since we use libblobmsg_json which uses libjson-c internally, make sure
we find this library.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Cristian Morales Vega [Wed, 14 Dec 2016 16:49:38 +0000 (16:49 +0000)]
Fix IPv6 read
This is a quick fix. It may still not work when the interface has
multiple IPs, and this also applies to IPv4.
Signed-off-by: Cristian Morales Vega <cristian@samknows.com>
John Crispin [Mon, 24 Oct 2016 16:43:16 +0000 (18:43 +0200)]
Revert "mdnsd: interface: enable looped back messages"
This reverts commit
8a70b2b47dd328f8180e5ecaa7bdc817f574a81b.
Eyal Birger [Sun, 22 May 2016 09:20:43 +0000 (12:20 +0300)]
mdnsd: interface: enable looped back messages
When the IP_MULTICAST_LOOP/IPV6_MULTICAST_LOOP socket options are not enabled,
locally generated queries are ignored by mdnsd; This prevents local
applications from being able to discover locally published services.
Signed-off-by: Eyal Birger <eyal.birger@gmail.com>
Felix Fietkau [Thu, 3 Sep 2015 12:59:12 +0000 (14:59 +0200)]
interface: include libubox/utils.h
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Thu, 3 Sep 2015 12:58:24 +0000 (14:58 +0200)]
service: remove obsolete uci include statements
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Steven Barth [Thu, 6 Nov 2014 20:18:54 +0000 (21:18 +0100)]
ubus: add keep functionality to set_config-call
Signed-off-by: Steven Barth <steven@midlink.org>
Steven Barth [Tue, 28 Oct 2014 19:50:31 +0000 (20:50 +0100)]
cache: fix cache record refreshing
Signed-off-by: Steven Barth <steven@midlink.org>
Steven Barth [Tue, 28 Oct 2014 19:11:35 +0000 (20:11 +0100)]
ubus: add ubus fetch call
Signed-off-by: Steven Barth <steven@midlink.org>
Steven Barth [Tue, 28 Oct 2014 18:41:13 +0000 (19:41 +0100)]
dns: use different buffers for encoding and decoding names
dns_send_question was ocassionally called with a name from name_buf
Signed-off-by: Steven Barth <steven@midlink.org>
Steven Barth [Tue, 28 Oct 2014 11:29:13 +0000 (12:29 +0100)]
cache: also cache PTR records
Signed-off-by: Steven Barth <steven@midlink.org>
Steven Barth [Tue, 28 Oct 2014 10:57:09 +0000 (11:57 +0100)]
cache: cache rdata of SRV-records as well
Signed-off-by: Steven Barth <steven@midlink.org>
Steven Barth [Tue, 28 Oct 2014 08:57:24 +0000 (09:57 +0100)]
Use monotonic clock for timeouts
Signed-off-by: Steven Barth <steven@midlink.org>
Steven Barth [Sun, 26 Oct 2014 19:00:21 +0000 (20:00 +0100)]
Add query ubus call
Signed-off-by: Steven Barth <steven@midlink.org>
John Crispin [Thu, 4 Sep 2014 20:37:41 +0000 (22:37 +0200)]
add a basic cache refresh logic
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 4 Sep 2014 20:35:48 +0000 (22:35 +0200)]
add a iface pointer to services and records
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 4 Sep 2014 19:23:07 +0000 (21:23 +0200)]
entry->service
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 4 Sep 2014 19:01:48 +0000 (21:01 +0200)]
print ttl when receiving a PTR record
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 4 Sep 2014 18:26:43 +0000 (20:26 +0200)]
basic support for the cache flush bit
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 4 Sep 2014 17:34:18 +0000 (19:34 +0200)]
add src ip validation
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 4 Sep 2014 15:44:46 +0000 (17:44 +0200)]
silently drop unicast questions that dont originate from port 5353
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 4 Sep 2014 15:42:21 +0000 (17:42 +0200)]
propagate sockaddr and port form the receive function to the parser
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 19:25:19 +0000 (21:25 +0200)]
fix free after use on shutdown
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 18:37:24 +0000 (20:37 +0200)]
add good bye messages
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 18:20:10 +0000 (20:20 +0200)]
add SO_BINDTODEVICE support
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 18:15:43 +0000 (20:15 +0200)]
saner debug output
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 14:41:51 +0000 (16:41 +0200)]
ipv6 cleanup
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 13:23:57 +0000 (15:23 +0200)]
propagate unicast bit
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 13:15:23 +0000 (15:15 +0200)]
nicer debug output on rx
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 12:44:16 +0000 (14:44 +0200)]
add unicast listener sockets
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Tue, 2 Sep 2014 12:24:12 +0000 (14:24 +0200)]
interface.c cleanup
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Sat, 30 Aug 2014 11:55:03 +0000 (13:55 +0200)]
remove debug code
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Sat, 30 Aug 2014 11:17:02 +0000 (13:17 +0200)]
validate incoming interface
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Sat, 30 Aug 2014 10:24:52 +0000 (12:24 +0200)]
sane error message when read fails
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Fri, 29 Aug 2014 19:28:45 +0000 (21:28 +0200)]
add pktinfo to rx path
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Fri, 29 Aug 2014 19:24:35 +0000 (21:24 +0200)]
add -4 and -6 options
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Fri, 29 Aug 2014 12:02:31 +0000 (14:02 +0200)]
load service info from procd
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Fri, 29 Aug 2014 11:53:11 +0000 (13:53 +0200)]
split the service_load() function into 2. this allows us to reuse the parsing
code when reading services via ubus
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Fri, 29 Aug 2014 11:42:20 +0000 (13:42 +0200)]
change the service json format this allows one instance to register multiple services of the same kind but with different ports
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Fri, 29 Aug 2014 07:01:31 +0000 (09:01 +0200)]
send unsolicitated answers when a new service appears
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 10:43:22 +0000 (12:43 +0200)]
remove some debug code
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 10:40:12 +0000 (12:40 +0200)]
dont delete records but set ttl to 1
-> 10.2. Announcements to Flush Outdated Cache Entries
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 10:29:41 +0000 (12:29 +0200)]
add the rfc
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 10:29:01 +0000 (12:29 +0200)]
add goodbye messages when service disappear
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 10:14:37 +0000 (12:14 +0200)]
more ttl related changes. prereq for goodbye messages
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 08:15:21 +0000 (10:15 +0200)]
dns_add_answer() now has a ttl parameter
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 08:01:33 +0000 (10:01 +0200)]
properly announce all ips of an interface when asked
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Thu, 28 Aug 2014 02:20:58 +0000 (04:20 +0200)]
add ipv6 support
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Wed, 27 Aug 2014 17:51:07 +0000 (19:51 +0200)]
fix potential null pointer deref when packets are forged
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Wed, 27 Aug 2014 17:49:04 +0000 (19:49 +0200)]
fix potential buffer overflow when txt records are forged
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Wed, 27 Aug 2014 16:10:20 +0000 (18:10 +0200)]
abort the reply parsing if an error is encountered
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Wed, 27 Aug 2014 14:09:08 +0000 (16:09 +0200)]
gracefully exit if the cmdline is bogus
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Fri, 27 Jun 2014 01:07:17 +0000 (02:07 +0100)]
remove now unused service-types index
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Wed, 25 Jun 2014 03:06:54 +0000 (04:06 +0100)]
fix entry duplication bug
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Wed, 25 Jun 2014 02:32:22 +0000 (03:32 +0100)]
fix off by one in record find code
Signed-off-by: John Crispin <blogic@openwrt.org>
John Crispin [Wed, 25 Jun 2014 01:09:02 +0000 (02:09 +0100)]
fix use after free
Signed-off-by: John Crispin <blogic@openwrt.org>
Felix Fietkau [Wed, 25 Jun 2014 08:02:11 +0000 (10:02 +0200)]
remove linux specific includes
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Wed, 25 Jun 2014 08:00:25 +0000 (10:00 +0200)]
mdns: remove dependencies on asm/byteorder.h, fix constant endian swap initialization
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Wed, 25 Jun 2014 07:58:13 +0000 (09:58 +0200)]
service.c: remove unused service_attr_list
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Wed, 11 Jun 2014 14:58:19 +0000 (16:58 +0200)]
rename set_interfaces to set_config, more stuff can be added here
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Wed, 11 Jun 2014 14:40:38 +0000 (16:40 +0200)]
allow starting without an active interface
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Wed, 11 Jun 2014 14:40:24 +0000 (16:40 +0200)]
add support for dynamic reconfiguration of interfaces
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 22:42:10 +0000 (00:42 +0200)]
fix segfault while dumping records
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 22:35:52 +0000 (00:35 +0200)]
simplify memory management for dns answers: use a blob_buf to cache entries
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 22:11:50 +0000 (00:11 +0200)]
use lookup array for dns_type_string()
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 22:07:49 +0000 (00:07 +0200)]
reuse mdns_buf for cache_answer()
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 22:00:08 +0000 (00:00 +0200)]
move signal_setup() to main.c
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:58:46 +0000 (23:58 +0200)]
make iface_name static
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:58:10 +0000 (23:58 +0200)]
clean up hostname handling, make service_name() static
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:40:59 +0000 (23:40 +0200)]
fix excessive stack usage
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:34:24 +0000 (23:34 +0200)]
fix a few format string bugs
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:14:53 +0000 (23:14 +0200)]
service: simplify and remove more code duplication
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:08:55 +0000 (23:08 +0200)]
service: get rid of some code duplication
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:06:38 +0000 (23:06 +0200)]
service: free the blob_buf on exit
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 21:05:59 +0000 (23:05 +0200)]
remove a few TODO items
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 20:49:08 +0000 (22:49 +0200)]
make the "records" avl tree static
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 20:46:54 +0000 (22:46 +0200)]
rename mdns_add_records to cache_dump_records and move it to cache.c
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 20:37:55 +0000 (22:37 +0200)]
remove unused avl tree hosts
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 20:34:30 +0000 (22:34 +0200)]
store ip address as struct in_addr instead of a string
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 20:20:33 +0000 (22:20 +0200)]
make interface_socket_setup static
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 19:46:25 +0000 (21:46 +0200)]
move rdata_buffer to cache_answer()
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 19:44:30 +0000 (21:44 +0200)]
clean up interfaces on exit
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 19:43:06 +0000 (21:43 +0200)]
move interface connect/read handling to interface.c
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 19:35:47 +0000 (21:35 +0200)]
call announce_free from interface_free
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 19:23:59 +0000 (21:23 +0200)]
move dns packet processing to dns.c
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 19:15:19 +0000 (21:15 +0200)]
cache: add support for scanning on multiple interfaces
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau [Mon, 9 Jun 2014 19:13:38 +0000 (21:13 +0200)]
move announce state to struct interface
Signed-off-by: Felix Fietkau <nbd@openwrt.org>