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