xref: /unit/src/nxt_http_route_addr.h (revision 2161:f8e608f69800)
11324Saxel.duch@nginx.com 
21324Saxel.duch@nginx.com /*
31324Saxel.duch@nginx.com  * Copyright (C) Axel Duch
41324Saxel.duch@nginx.com  * Copyright (C) NGINX, Inc.
51324Saxel.duch@nginx.com  */
61324Saxel.duch@nginx.com 
71324Saxel.duch@nginx.com #include <nxt_conf.h>
81324Saxel.duch@nginx.com 
91324Saxel.duch@nginx.com #ifndef _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_
101324Saxel.duch@nginx.com #define _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_
111324Saxel.duch@nginx.com 
121324Saxel.duch@nginx.com 
131324Saxel.duch@nginx.com enum {
141324Saxel.duch@nginx.com     NXT_HTTP_ROUTE_ADDR_ANY = 0,
151324Saxel.duch@nginx.com     NXT_HTTP_ROUTE_ADDR_RANGE,
161324Saxel.duch@nginx.com     NXT_HTTP_ROUTE_ADDR_EXACT,
171324Saxel.duch@nginx.com     NXT_HTTP_ROUTE_ADDR_CIDR,
181324Saxel.duch@nginx.com };
191324Saxel.duch@nginx.com 
201324Saxel.duch@nginx.com 
211324Saxel.duch@nginx.com enum {
221324Saxel.duch@nginx.com     NXT_ADDR_PATTERN_PORT_ERROR = NXT_OK + 1,
231324Saxel.duch@nginx.com     NXT_ADDR_PATTERN_CV_TYPE_ERROR,
241324Saxel.duch@nginx.com     NXT_ADDR_PATTERN_LENGTH_ERROR,
251324Saxel.duch@nginx.com     NXT_ADDR_PATTERN_FORMAT_ERROR,
261324Saxel.duch@nginx.com     NXT_ADDR_PATTERN_RANGE_OVERLAP_ERROR,
271324Saxel.duch@nginx.com     NXT_ADDR_PATTERN_CIDR_ERROR,
281324Saxel.duch@nginx.com     NXT_ADDR_PATTERN_NO_IPv6_ERROR,
29*2161Salx.manpages@gmail.com     NXT_ADDR_PATTERN_NO_UNIX_ERROR,
301324Saxel.duch@nginx.com };
311324Saxel.duch@nginx.com 
321324Saxel.duch@nginx.com 
331324Saxel.duch@nginx.com typedef struct {
341324Saxel.duch@nginx.com     in_addr_t  start;
351324Saxel.duch@nginx.com     in_addr_t  end;
361324Saxel.duch@nginx.com } nxt_http_route_addr_range_t;
371324Saxel.duch@nginx.com 
381324Saxel.duch@nginx.com 
391324Saxel.duch@nginx.com #if (NXT_INET6)
401324Saxel.duch@nginx.com typedef struct {
411324Saxel.duch@nginx.com     struct in6_addr  start;
421324Saxel.duch@nginx.com     struct in6_addr  end;
431324Saxel.duch@nginx.com } nxt_http_route_in6_addr_range_t;
441324Saxel.duch@nginx.com #endif
451324Saxel.duch@nginx.com 
461324Saxel.duch@nginx.com 
471324Saxel.duch@nginx.com typedef struct {
481324Saxel.duch@nginx.com     uint8_t       match_type:2;
491324Saxel.duch@nginx.com     uint8_t       negative:1;
501324Saxel.duch@nginx.com     uint8_t       addr_family;
511324Saxel.duch@nginx.com 
521324Saxel.duch@nginx.com     struct {
531324Saxel.duch@nginx.com         uint16_t  start;
541324Saxel.duch@nginx.com         uint16_t  end;
551324Saxel.duch@nginx.com     } port;
561324Saxel.duch@nginx.com } nxt_http_route_addr_base_t;
571324Saxel.duch@nginx.com 
581324Saxel.duch@nginx.com 
591324Saxel.duch@nginx.com typedef struct {
601324Saxel.duch@nginx.com     nxt_http_route_addr_base_t           base;
611324Saxel.duch@nginx.com 
621324Saxel.duch@nginx.com     union {
631324Saxel.duch@nginx.com         nxt_http_route_addr_range_t      v4;
641324Saxel.duch@nginx.com #if (NXT_INET6)
651324Saxel.duch@nginx.com         nxt_http_route_in6_addr_range_t  v6;
661324Saxel.duch@nginx.com #endif
671324Saxel.duch@nginx.com     } addr;
681324Saxel.duch@nginx.com } nxt_http_route_addr_pattern_t;
691324Saxel.duch@nginx.com 
701324Saxel.duch@nginx.com 
711324Saxel.duch@nginx.com NXT_EXPORT nxt_int_t nxt_http_route_addr_pattern_parse(nxt_mp_t *mp,
721324Saxel.duch@nginx.com     nxt_http_route_addr_pattern_t *pattern, nxt_conf_value_t *cv);
731324Saxel.duch@nginx.com 
741324Saxel.duch@nginx.com #endif /* _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_ */
75