mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-13 15:04:42 +00:00
67957bd59e
This is a huge patch with many changes, all about the DNS. Initially, the idea was to update the DNS part to ease the threads support integration. But quickly, I started to refactor some parts. And after several iterations, it was impossible for me to commit the different parts atomically. So, instead of adding tens of patches, often reworking the same parts, it was easier to merge all my changes in a uniq patch. Here are all changes made on the DNS. First, the DNS initialization has been refactored. The DNS configuration parsing remains untouched, in cfgparse.c. But all checks have been moved in a post-check callback. In the function dns_finalize_config, for each resolvers, the nameservers configuration is tested and the task used to manage DNS resolutions is created. The links between the backend's servers and the resolvers are also created at this step. Here no connection are kept alive. So there is no needs anymore to reopen them after HAProxy fork. Connections used to send DNS queries will be opened on demand. Then, the way DNS requesters are linked to a DNS resolution has been reworked. The resolution used by a requester is now referenced into the dns_requester structure and the resolution pointers in server and dns_srvrq structures have been removed. wait and curr list of requesters, for a DNS resolution, have been replaced by a uniq list. And Finally, the way a requester is removed from a DNS resolution has been simplified. Now everything is done in dns_unlink_resolution. srv_set_fqdn function has been simplified. Now, there is only 1 way to set the server's FQDN, independently it is done by the CLI or when a SRV record is resolved. The static DNS resolutions pool has been replaced by a dynamoc pool. The part has been modified by Baptiste Assmann. The way the DNS resolutions are triggered by the task or by a health-check has been totally refactored. Now, all timeouts are respected. Especially hold.valid. The default frequency to wake up a resolvers is now configurable using "timeout resolve" parameter. Now, as documented, as long as invalid repsonses are received, we really wait all name servers responses before retrying. As far as possible, resources allocated during DNS configuration parsing are releases when HAProxy is shutdown. Beside all these changes, the code has been cleaned to ease code review and the doc has been updated.
49 lines
1.8 KiB
C
49 lines
1.8 KiB
C
/*
|
|
* include/proto/dns.h
|
|
* This file provides functions related to DNS protocol
|
|
*
|
|
* Copyright (C) 2014 Baptiste Assmann <bedis9@gmail.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation, version 2.1
|
|
* exclusively.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _PROTO_DNS_H
|
|
#define _PROTO_DNS_H
|
|
|
|
#include <types/dns.h>
|
|
|
|
extern struct list dns_resolvers;
|
|
|
|
struct dns_resolvers *find_resolvers_by_id(const char *id);
|
|
struct dns_srvrq *find_srvrq_by_name(const char *name, struct proxy *px);
|
|
struct dns_srvrq *new_dns_srvrq(struct server *srv, char *fqdn);
|
|
|
|
int dns_str_to_dn_label(const char *str, int str_len, char *dn, int dn_len);
|
|
int dns_dn_label_to_str(const char *dn, int dn_len, char *str, int str_len);
|
|
|
|
int dns_hostname_validation(const char *string, char **err);
|
|
int dns_get_ip_from_response(struct dns_response_packet *dns_p,
|
|
struct dns_options *dns_opts, void *currentip,
|
|
short currentip_sin_family,
|
|
void **newip, short *newip_sin_family,
|
|
void *owner);
|
|
|
|
int dns_link_resolution(void *requester, int requester_type);
|
|
void dns_unlink_resolution(struct dns_requester *requester);
|
|
void dns_trigger_resolution(struct dns_requester *requester);
|
|
|
|
|
|
#endif // _PROTO_DNS_H
|