IPv6 support in resolver

ToSHiC toshic.toshic at gmail.com
Wed Jul 10 17:17:43 UTC 2013


commit 482bd2a0b6240a2b26409b9c7924ad01c814f293
Author: Anton Kortunov <toshic.toshic at gmail.com>
Date:   Wed Jul 10 13:21:27 2013 +0400

    Added NGX_RESOLVE_* constants

    Module developers can decide how to resolve hosts relating to IPv6:

    NGX_RESOLVE_AAAA - try to resolve only to IPv6 address
    NGX_RESOLVE_AAAA_A - IPv6 is preferred (recommended by standards)
    NGX_RESOLVE_A_AAAA - IPv4 is preferred (better strategy nowadays)

diff --git a/src/core/ngx_resolver.h b/src/core/ngx_resolver.h
index ae34ca5..6fd81fe 100644
--- a/src/core/ngx_resolver.h
+++ b/src/core/ngx_resolver.h
@@ -20,6 +20,15 @@
 #define NGX_RESOLVE_TXT       16
 #define NGX_RESOLVE_DNAME     39

+#if (NGX_HAVE_INET6)
+
+#define NGX_RESOLVE_AAAA      28
+#define NGX_RESOLVE_A_AAAA    1000
+#define NGX_RESOLVE_AAAA_A    1001
+#define NGX_RESOLVE_RETRY     1002
+
+#endif
+
 #define NGX_RESOLVE_FORMERR   1
 #define NGX_RESOLVE_SERVFAIL  2
 #define NGX_RESOLVE_NXDOMAIN  3



On Wed, Jul 10, 2013 at 9:17 PM, ToSHiC <toshic.toshic at gmail.com> wrote:

> Hello,
>
> I've split this big patch into several small patches, taking into account
> your comments. I'll send each part in separate email. Here is the first one.
>
> commit 597d09e7ae9247c5466b18aa2ef3f5892e61b708
> Author: Anton Kortunov <toshic.toshic at gmail.com>
> Date:   Wed Jul 10 13:14:52 2013 +0400
>
>     Added new structure ngx_ipaddr_t
>
>     This structure contains family field
>     and the union of ipv4/ipv6 structures in_addr_t and in6_addr.
>
> diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h
> index 6a5a368..077ed34 100644
> --- a/src/core/ngx_inet.h
> +++ b/src/core/ngx_inet.h
> @@ -68,6 +68,16 @@ typedef struct {
>
>
>  typedef struct {
> +    ngx_uint_t                family;
> +    union {
> +        in_addr_t             v4;
> +#if (NGX_HAVE_INET6)
> +        struct in6_addr       v6;
> +#endif
> +    } u;
> +} ngx_ipaddr_t;
> +
> +typedef struct {
>      struct sockaddr          *sockaddr;
>      socklen_t                 socklen;
>      ngx_str_t                 name;
>
>
>
> On Mon, Jun 17, 2013 at 7:30 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
>
>> Hello!
>>
>> On Fri, Jun 14, 2013 at 09:44:46PM +0400, ToSHiC wrote:
>>
>> > Hello,
>> >
>> > We needed this feature in our company, I found that it is in milestones
>> of
>> > version 1.5 but doesn't exist yet. So I've implemented it based in 1.3
>> code
>> > and merged in current 1.5 code. When I wrote this code I mostly cared
>> about
>> > minimum intrusion into other parts of nginx.
>> >
>> > IPv6 fallback logic is not a straightforward implementation of
>> suggested by
>> > RFC. RFC states that IPv6 resolving have priority over IPv4, and it's
>> not
>> > very good for Internet we have currently. With this patch you can
>> specify
>> > priority, and in upstream and mail modules I've set IPv4 as preferred
>> > address family.
>> >
>> > Patch is pretty big and I hope it'll not break mailing list or mail
>> clients.
>>
>> You may want to try to split the patch into smaller patches to
>> simplify review.  See also some hints here:
>>
>> http://nginx.org/en/docs/contributing_changes.html
>>
>> Some quick comments below.
>>
>> [...]
>>
>> > -        addr = ntohl(ctx->addr);
>> > +failed:
>> > +
>> > +        //addr = ntohl(ctx->addr);
>> > +        inet_ntop(ctx->addr.family, &ctx->addr.u, text,
>> > NGX_SOCKADDR_STRLEN);
>> >
>> >          ngx_log_error(NGX_LOG_ALERT, r->log, 0,
>> > -                      "could not cancel %ud.%ud.%ud.%ud resolving",
>> > -                      (addr >> 24) & 0xff, (addr >> 16) & 0xff,
>> > -                      (addr >> 8) & 0xff, addr & 0xff);
>> > +                      "could not cancel %s resolving", text);
>>
>> 1. Don't use inet_ntop(), there is ngx_sock_ntop() instead.
>>
>> 2. Don't use C++ style ("//") comments.
>>
>> 3. If some data is only needed for debug logging, keep relevant
>> calculations under #if (NGX_DEBUG).
>>
>> [...]
>>
>> > @@ -334,6 +362,7 @@
>> > ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
>> >              peers->peer[i].current_weight = 0;
>> >              peers->peer[i].max_fails = 1;
>> >              peers->peer[i].fail_timeout = 10;
>> > +
>> >          }
>> >      }
>> >
>>
>> Please avoid unrelated changes.
>>
>> [...]
>>
>> --
>> Maxim Dounin
>> http://nginx.org/en/donation.html
>>
>> _______________________________________________
>> nginx-devel mailing list
>> nginx-devel at nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20130710/36013650/attachment.html>


More information about the nginx-devel mailing list