xref: /unit/src/nxt_http_route_addr.h (revision 2161:f8e608f69800)
1 
2 /*
3  * Copyright (C) Axel Duch
4  * Copyright (C) NGINX, Inc.
5  */
6 
7 #include <nxt_conf.h>
8 
9 #ifndef _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_
10 #define _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_
11 
12 
13 enum {
14     NXT_HTTP_ROUTE_ADDR_ANY = 0,
15     NXT_HTTP_ROUTE_ADDR_RANGE,
16     NXT_HTTP_ROUTE_ADDR_EXACT,
17     NXT_HTTP_ROUTE_ADDR_CIDR,
18 };
19 
20 
21 enum {
22     NXT_ADDR_PATTERN_PORT_ERROR = NXT_OK + 1,
23     NXT_ADDR_PATTERN_CV_TYPE_ERROR,
24     NXT_ADDR_PATTERN_LENGTH_ERROR,
25     NXT_ADDR_PATTERN_FORMAT_ERROR,
26     NXT_ADDR_PATTERN_RANGE_OVERLAP_ERROR,
27     NXT_ADDR_PATTERN_CIDR_ERROR,
28     NXT_ADDR_PATTERN_NO_IPv6_ERROR,
29     NXT_ADDR_PATTERN_NO_UNIX_ERROR,
30 };
31 
32 
33 typedef struct {
34     in_addr_t  start;
35     in_addr_t  end;
36 } nxt_http_route_addr_range_t;
37 
38 
39 #if (NXT_INET6)
40 typedef struct {
41     struct in6_addr  start;
42     struct in6_addr  end;
43 } nxt_http_route_in6_addr_range_t;
44 #endif
45 
46 
47 typedef struct {
48     uint8_t       match_type:2;
49     uint8_t       negative:1;
50     uint8_t       addr_family;
51 
52     struct {
53         uint16_t  start;
54         uint16_t  end;
55     } port;
56 } nxt_http_route_addr_base_t;
57 
58 
59 typedef struct {
60     nxt_http_route_addr_base_t           base;
61 
62     union {
63         nxt_http_route_addr_range_t      v4;
64 #if (NXT_INET6)
65         nxt_http_route_in6_addr_range_t  v6;
66 #endif
67     } addr;
68 } nxt_http_route_addr_pattern_t;
69 
70 
71 NXT_EXPORT nxt_int_t nxt_http_route_addr_pattern_parse(nxt_mp_t *mp,
72     nxt_http_route_addr_pattern_t *pattern, nxt_conf_value_t *cv);
73 
74 #endif /* _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_ */
75