blob: 05557509d655c645f2794a4f07102aab93b11731 [file] [log] [blame]
Igor Sysoevd90282d2004-09-28 08:34:51 +00001
2/*
Igor Sysoevff8da912004-09-29 16:00:49 +00003 * Copyright (C) Igor Sysoev
Maxim Konovalovf8d59e32012-01-18 15:07:43 +00004 * Copyright (C) Nginx, Inc.
Igor Sysoevd90282d2004-09-28 08:34:51 +00005 */
6
7
Igor Sysoev42feecb2002-12-15 06:25:09 +00008#ifndef _NGX_INET_H_INCLUDED_
9#define _NGX_INET_H_INCLUDED_
10
11
Igor Sysoev02025fd2005-01-18 13:03:58 +000012#include <ngx_config.h>
13#include <ngx_core.h>
14
15
Igor Sysoeva35eacc2009-02-21 07:02:02 +000016/*
Igor Sysoevbaf8e402009-10-26 11:43:32 +000017 * TODO: autoconfigure NGX_SOCKADDRLEN and NGX_SOCKADDR_STRLEN as
Igor Sysoeva35eacc2009-02-21 07:02:02 +000018 * sizeof(struct sockaddr_storage)
Igor Sysoev8e1aa8e2009-02-21 15:13:13 +000019 * sizeof(struct sockaddr_un)
Igor Sysoeva35eacc2009-02-21 07:02:02 +000020 * sizeof(struct sockaddr_in6)
21 * sizeof(struct sockaddr_in)
22 */
23
Igor Sysoevbaf8e402009-10-26 11:43:32 +000024#define NGX_INET_ADDRSTRLEN (sizeof("255.255.255.255") - 1)
25#define NGX_INET6_ADDRSTRLEN \
26 (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") - 1)
27#define NGX_UNIX_ADDRSTRLEN \
28 (sizeof(struct sockaddr_un) - offsetof(struct sockaddr_un, sun_path))
29
30#if (NGX_HAVE_UNIX_DOMAIN)
31#define NGX_SOCKADDR_STRLEN (sizeof("unix:") - 1 + NGX_UNIX_ADDRSTRLEN)
32#else
Ruslan Ermilovf707bea2012-11-30 11:26:50 +000033#define NGX_SOCKADDR_STRLEN (NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1)
Igor Sysoevbaf8e402009-10-26 11:43:32 +000034#endif
35
Igor Sysoev8e1aa8e2009-02-21 15:13:13 +000036#if (NGX_HAVE_UNIX_DOMAIN)
37#define NGX_SOCKADDRLEN sizeof(struct sockaddr_un)
Igor Sysoeva35eacc2009-02-21 07:02:02 +000038#else
Igor Sysoev8e1aa8e2009-02-21 15:13:13 +000039#define NGX_SOCKADDRLEN 512
Igor Sysoeva35eacc2009-02-21 07:02:02 +000040#endif
Igor Sysoev6a750192008-08-21 18:47:23 +000041
42
Igor Sysoev822834e2004-05-25 15:28:46 +000043typedef struct {
Igor Sysoevd7b3b482009-02-24 14:25:24 +000044 in_addr_t addr;
45 in_addr_t mask;
46} ngx_in_cidr_t;
Igor Sysoev36860102009-02-24 14:01:40 +000047
48
49#if (NGX_HAVE_INET6)
50
51typedef struct {
Igor Sysoevd7b3b482009-02-24 14:25:24 +000052 struct in6_addr addr;
53 struct in6_addr mask;
54} ngx_in6_cidr_t;
Igor Sysoev36860102009-02-24 14:01:40 +000055
56#endif
57
58
59typedef struct {
60 ngx_uint_t family;
61 union {
62 ngx_in_cidr_t in;
63#if (NGX_HAVE_INET6)
64 ngx_in6_cidr_t in6;
65#endif
66 } u;
67} ngx_cidr_t;
Igor Sysoev822834e2004-05-25 15:28:46 +000068
69
Igor Sysoev6f134cc2006-05-23 14:54:58 +000070typedef struct {
Igor Sysoev36860102009-02-24 14:01:40 +000071 struct sockaddr *sockaddr;
72 socklen_t socklen;
73 ngx_str_t name;
Igor Sysoev0c189c52009-11-02 15:14:17 +000074} ngx_addr_t;
Igor Sysoev6f134cc2006-05-23 14:54:58 +000075
Igor Sysoev6f134cc2006-05-23 14:54:58 +000076
Igor Sysoev3d2fd182006-12-04 16:46:13 +000077typedef struct {
Igor Sysoev36860102009-02-24 14:01:40 +000078 ngx_str_t url;
79 ngx_str_t host;
80 ngx_str_t port_text;
81 ngx_str_t uri;
Igor Sysoev6f134cc2006-05-23 14:54:58 +000082
Igor Sysoev36860102009-02-24 14:01:40 +000083 in_port_t port;
84 in_port_t default_port;
85 int family;
Igor Sysoev6f134cc2006-05-23 14:54:58 +000086
Igor Sysoev36860102009-02-24 14:01:40 +000087 unsigned listen:1;
88 unsigned uri_part:1;
89 unsigned no_resolve:1;
Ruslan Ermilovb8a90c62012-12-17 12:08:53 +000090 unsigned one_addr:1; /* compatibility */
Igor Sysoev6f134cc2006-05-23 14:54:58 +000091
Igor Sysoev36860102009-02-24 14:01:40 +000092 unsigned no_port:1;
93 unsigned wildcard:1;
Igor Sysoev20bf47b2006-10-24 13:06:55 +000094
Igor Sysoev36860102009-02-24 14:01:40 +000095 socklen_t socklen;
96 u_char sockaddr[NGX_SOCKADDRLEN];
Igor Sysoeva35eacc2009-02-21 07:02:02 +000097
Igor Sysoev0c189c52009-11-02 15:14:17 +000098 ngx_addr_t *addrs;
Igor Sysoev36860102009-02-24 14:01:40 +000099 ngx_uint_t naddrs;
Igor Sysoev3d2fd182006-12-04 16:46:13 +0000100
Igor Sysoev36860102009-02-24 14:01:40 +0000101 char *err;
Igor Sysoev6f134cc2006-05-23 14:54:58 +0000102} ngx_url_t;
103
104
Igor Sysoev36b634c2007-11-23 16:59:24 +0000105in_addr_t ngx_inet_addr(u_char *text, size_t len);
Igor Sysoev5a76cbb2009-11-02 12:50:00 +0000106#if (NGX_HAVE_INET6)
107ngx_int_t ngx_inet6_addr(u_char *p, size_t len, u_char *addr);
Igor Sysoevfd078fd2009-11-03 12:44:55 +0000108size_t ngx_inet6_ntop(u_char *p, u_char *text, size_t len);
Igor Sysoev5a76cbb2009-11-02 12:50:00 +0000109#endif
Vladimir Homutovaf189462013-07-11 16:07:25 +0400110size_t ngx_sock_ntop(struct sockaddr *sa, socklen_t socklen, u_char *text,
111 size_t len, ngx_uint_t port);
Igor Sysoev9c610952004-03-16 13:35:20 +0000112size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
Igor Sysoev36860102009-02-24 14:01:40 +0000113ngx_int_t ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr);
Igor Sysoev8b816d82009-11-02 16:11:06 +0000114ngx_int_t ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
115 size_t len);
Igor Sysoev7ed63ee2007-10-08 08:55:12 +0000116ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u);
117ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u);
Ruslan Ermilovefd0e0e2013-12-06 14:30:27 +0400118ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1,
119 struct sockaddr *sa2, socklen_t slen2, ngx_uint_t cmp_port);
Igor Sysoev3d2fd182006-12-04 16:46:13 +0000120
Igor Sysoev02025fd2005-01-18 13:03:58 +0000121
Igor Sysoev42feecb2002-12-15 06:25:09 +0000122#endif /* _NGX_INET_H_INCLUDED_ */