resolved-manager.h revision 78c6a153c47f8d597c827bdcaf8c4e42ac87f738
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc#pragma once
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc/***
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc This file is part of systemd.
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc Copyright 2014 Tom Gundersen <teg@jklm.no>
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc systemd is free software; you can redistribute it and/or modify it
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc under the terms of the GNU Lesser General Public License as published by
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc the Free Software Foundation; either version 2.1 of the License, or
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc (at your option) any later version.
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc systemd is distributed in the hope that it will be useful, but
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc WITHOUT ANY WARRANTY; without even the implied warranty of
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc Lesser General Public License for more details.
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc You should have received a copy of the GNU Lesser General Public License
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc along with systemd; If not, see <http://www.gnu.org/licenses/>.
d62bc4badc1c1f1549c961cfb8b420e650e1272byz***/
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc#include "sd-event.h"
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc#include "sd-network.h"
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc#include "sd-netlink.h"
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc#include "list.h"
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc#include "hashmap.h"
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
d62bc4badc1c1f1549c961cfb8b420e650e1272byztypedef struct Manager Manager;
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dhtypedef enum Support Support;
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dhenum Support {
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh SUPPORT_NO,
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh SUPPORT_YES,
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh SUPPORT_RESOLVE,
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh _SUPPORT_MAX,
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh _SUPPORT_INVALID = -1
f595a68a3b8953a12aa778c2abd7642df8da8c3ayz};
0ba2cbe97e0678a691742f98d2532caed0a2c4aaxc
d62bc4badc1c1f1549c961cfb8b420e650e1272byz#include "resolved-dns-query.h"
f595a68a3b8953a12aa778c2abd7642df8da8c3ayz#include "resolved-dns-stream.h"
d62bc4badc1c1f1549c961cfb8b420e650e1272byz#include "resolved-link.h"
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dhstruct Manager {
d62bc4badc1c1f1549c961cfb8b420e650e1272byz sd_event *event;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini Support llmnr_support;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini /* Network */
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan Hashmap *links;
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh sd_netlink *rtnl;
afdda45f890ee5dfc86e5131a30b11b354d51633Vasumathi Sundaram - Sun Microsystems sd_event_source *rtnl_event_source;
afdda45f890ee5dfc86e5131a30b11b354d51633Vasumathi Sundaram - Sun Microsystems
afdda45f890ee5dfc86e5131a30b11b354d51633Vasumathi Sundaram - Sun Microsystems sd_network_monitor *network_monitor;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz sd_event_source *network_event_source;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini /* DNS query management */
d62bc4badc1c1f1549c961cfb8b420e650e1272byz Hashmap *dns_transactions;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz LIST_HEAD(DnsQuery, dns_queries);
d62bc4badc1c1f1549c961cfb8b420e650e1272byz unsigned n_dns_queries;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz
d62bc4badc1c1f1549c961cfb8b420e650e1272byz LIST_HEAD(DnsStream, dns_streams);
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini unsigned n_dns_streams;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini /* Unicast dns */
6b9e797c2ea518518cb2b57895991d8bdaa167fesowmini LIST_HEAD(DnsServer, dns_servers);
afdda45f890ee5dfc86e5131a30b11b354d51633Vasumathi Sundaram - Sun Microsystems LIST_HEAD(DnsServer, fallback_dns_servers);
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh DnsServer *current_dns_server;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz
d62bc4badc1c1f1549c961cfb8b420e650e1272byz bool read_resolv_conf;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz usec_t resolv_conf_mtime;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini LIST_HEAD(DnsScope, dns_scopes);
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini DnsScope *unicast_scope;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini /* LLMNR */
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini int llmnr_ipv4_udp_fd;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini int llmnr_ipv6_udp_fd;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz int llmnr_ipv4_tcp_fd;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini int llmnr_ipv6_tcp_fd;
6b9e797c2ea518518cb2b57895991d8bdaa167fesowmini
6b9e797c2ea518518cb2b57895991d8bdaa167fesowmini sd_event_source *llmnr_ipv4_udp_event_source;
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh sd_event_source *llmnr_ipv6_udp_event_source;
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh sd_event_source *llmnr_ipv4_tcp_event_source;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz sd_event_source *llmnr_ipv6_tcp_event_source;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz
d62bc4badc1c1f1549c961cfb8b420e650e1272byz /* dbus */
d62bc4badc1c1f1549c961cfb8b420e650e1272byz sd_bus *bus;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz sd_event_source *bus_retry_event_source;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini /* The hostname we publish on LLMNR and mDNS */
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini char *llmnr_hostname;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini char *mdns_hostname;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini DnsResourceKey *llmnr_host_ipv4_key;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini DnsResourceKey *llmnr_host_ipv6_key;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini /* Watch the system hostname */
d62bc4badc1c1f1549c961cfb8b420e650e1272byz int hostname_fd;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini sd_event_source *hostname_event_source;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
6b9e797c2ea518518cb2b57895991d8bdaa167fesowmini /* Watch for system suspends */
6b9e797c2ea518518cb2b57895991d8bdaa167fesowmini sd_bus_slot *prepare_for_sleep_slot;
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini};
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan
3fd94f8c011031b38162a1db3b554de4371c167fam/* Manager */
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowminiint manager_new(Manager **ret);
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini VaradhanManager* manager_free(Manager *m);
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhanint manager_start(Manager *m);
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhanint manager_read_resolv_conf(Manager *m);
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhanint manager_write_resolv_conf(Manager *m);
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini VaradhanDnsServer *manager_set_dns_server(Manager *m, DnsServer *s);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun MicrosystemsDnsServer *manager_find_dns_server(Manager *m, int family, const union in_addr_union *in_addr);
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowminiDnsServer *manager_get_dns_server(Manager *m);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystemsvoid manager_next_dns_server(Manager *m);
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhanuint32_t manager_find_mtu(Manager *m);
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystemsint manager_write(Manager *m, int fd, DnsPacket *p);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystemsint manager_send(Manager *m, int fd, int ifindex, int family, const union in_addr_union *addr, uint16_t port, DnsPacket *p);
d62bc4badc1c1f1549c961cfb8b420e650e1272byzint manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
d62bc4badc1c1f1549c961cfb8b420e650e1272byz
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowminiint manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_addr);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun MicrosystemsLinkAddress* manager_find_link_address(Manager *m, int family, const union in_addr_union *in_addr);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystems
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystemsvoid manager_refresh_rrs(Manager *m);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystemsint manager_next_hostname(Manager *m);
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowmini
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystemsbool manager_our_packet(Manager *m, DnsPacket *p);
e7801d59e8ceda0cde8ebdfdddd7582ee2ea96efsowminiDnsScope* manager_find_scope(Manager *m, DnsPacket *p);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystems
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dhvoid manager_verify_all(Manager *m);
3bc21d0a9c7b31b1132c254e389a4114c23bcf00Aruna Ramakrishna - Sun Microsystems
4045d94132614e1de2073685a6cdd4fbd86bec33sowminivoid manager_flush_dns_servers(Manager *m, DnsServerType t);
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini VaradhanDEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan#define EXTRA_CMSG_SPACE 1024
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan
6b9e797c2ea518518cb2b57895991d8bdaa167fesowminiint manager_is_own_hostname(Manager *m, const char *name);
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh
d62bc4badc1c1f1549c961cfb8b420e650e1272byzconst char* support_to_string(Support p) _const_;
d62bc4badc1c1f1549c961cfb8b420e650e1272byzint support_from_string(const char *s) _pure_;
d62bc4badc1c1f1549c961cfb8b420e650e1272byz