kres-gen.lua 6.71 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
--[[ This file is generated by ./kres-gen.sh ]] ffi.cdef[[

typedef struct knot_dump_style knot_dump_style_t;
extern const knot_dump_style_t KNOT_DUMP_STYLE_DEFAULT;

typedef struct knot_mm {
	void *ctx, *alloc, *free;
} knot_mm_t;

typedef void *(*map_alloc_f)(void *, size_t);
typedef void (*map_free_f)(void *baton, void *ptr);
typedef enum {KNOT_ANSWER, KNOT_AUTHORITY, KNOT_ADDITIONAL} knot_section_t;
typedef struct {
    uint16_t pos;
    uint16_t flags;
    uint16_t compress_ptr[16];
} knot_rrinfo_t;
typedef unsigned char knot_dname_t;
typedef unsigned char knot_rdata_t;
typedef struct knot_rdataset knot_rdataset_t;
struct knot_rdataset {
    uint16_t rr_count;
    knot_rdata_t *data;
24
};
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
typedef struct knot_rrset knot_rrset_t;
typedef struct {
    struct knot_pkt *pkt;
    uint16_t pos;
    uint16_t count;
} knot_pktsection_t;
struct knot_pkt {
    uint8_t *wire;
    size_t size;
    size_t max_size;
    size_t parsed;
    uint16_t reserved;
    uint16_t qname_size;
    uint16_t rrset_count;
    uint16_t flags;
    knot_rrset_t *opt_rr;
    knot_rrset_t *tsig_rr;
    struct {
        uint8_t *pos;
        size_t len;
    } tsig_wire;
    knot_section_t current;
    knot_pktsection_t sections[3];
    size_t rrset_allocd;
    knot_rrinfo_t *rr_info;
    knot_rrset_t *rr;
    knot_mm_t mm;
52
};
53 54 55 56 57 58 59 60 61 62 63 64
typedef struct knot_pkt knot_pkt_t;
typedef struct {
    void *root;
    map_alloc_f malloc;
    map_free_f free;
    void *baton;
} map_t;
typedef struct {
    knot_rrset_t **at;
    size_t len;
    size_t cap;
} rr_array_t;
65 66
struct ranked_rr_array_entry {
    uint32_t qry_uid;
67
    uint8_t rank;
68
    uint8_t revalidation_cnt;
69 70 71 72 73 74 75 76 77 78 79
    _Bool cached;
    _Bool yielded;
    _Bool to_wire;
    knot_rrset_t *rr;
};
typedef struct ranked_rr_array_entry ranked_rr_array_entry_t;
typedef struct {
    ranked_rr_array_entry_t **at;
    size_t len;
    size_t cap;
} ranked_rr_array_t;
80 81 82 83 84 85 86
struct kr_zonecut {
    knot_dname_t *name;
    knot_rrset_t *key;
    knot_rrset_t *trust_anchor;
    struct kr_zonecut *parent;
    map_t nsset;
    knot_mm_t *pool;
87
};
88 89 90 91 92 93 94 95 96 97
typedef struct {
    struct kr_query **at;
    size_t len;
    size_t cap;
} kr_qarray_t;
struct kr_rplan {
    kr_qarray_t pending;
    kr_qarray_t resolved;
    struct kr_request *request;
    knot_mm_t *pool;
98
    uint32_t next_uid;
99
};
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
struct kr_request {
    struct kr_context *ctx;
    knot_pkt_t *answer;
    struct kr_query *current_query;
    struct {
        const knot_rrset_t *key;
        const struct sockaddr *addr;
        const struct sockaddr *dst_addr;
        const knot_pkt_t *packet;
        const knot_rrset_t *opt;
    } qsource;
    struct {
        unsigned int rtt;
        const struct sockaddr *addr;
    } upstream;
    uint32_t options;
    int state;
117 118
    ranked_rr_array_t answ_selected;
    ranked_rr_array_t auth_selected;
119
    rr_array_t additional;
120 121
    _Bool answ_validated;
    _Bool auth_validated;
122 123 124
    struct kr_rplan rplan;
    int has_tls;
    knot_mm_t pool;
125
};
126 127 128 129 130 131
struct knot_rrset {
    knot_dname_t *_owner;
    uint16_t type;
    uint16_t rclass;
    knot_rdataset_t rrs;
    void *additional;
132
};
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
struct kr_query {
    struct kr_query *parent;
    knot_dname_t *sname;
    uint16_t stype;
    uint16_t sclass;
    uint16_t id;
    uint32_t flags;
    uint32_t secret;
    uint16_t fails;
    uint16_t reorder;
    struct timeval timestamp;
    struct kr_zonecut zone_cut;
	char _stub[];
};
struct kr_context {
    uint32_t options;
    knot_rrset_t *opt_rr;
    map_t trust_anchors;
    map_t negative_anchors;
    struct kr_zonecut root_hints;
	char _stub[];
};
155
struct query_flag {static const int NO_MINIMIZE = 1; static const int NO_THROTTLE = 2; static const int NO_IPV6 = 4; static const int NO_IPV4 = 8; static const int TCP = 16; static const int RESOLVED = 32; static const int AWAIT_IPV4 = 64; static const int AWAIT_IPV6 = 128; static const int AWAIT_CUT = 256; static const int SAFEMODE = 512; static const int CACHED = 1024; static const int NO_CACHE = 2048; static const int EXPIRING = 4096; static const int ALLOW_LOCAL = 8192; static const int DNSSEC_WANT = 16384; static const int DNSSEC_BOGUS = 32768; static const int DNSSEC_INSECURE = 65536; static const int STUB = 131072; static const int ALWAYS_CUT = 262144; static const int DNSSEC_WEXPAND = 524288; static const int PERMISSIVE = 1048576; static const int STRICT = 2097152; static const int BADCOOKIE_AGAIN = 4194304; static const int CNAME = 8388608; static const int REORDER_RR = 16777216; static const int TRACE = 33554432;};
156 157 158 159 160 161 162
int knot_dname_size(const knot_dname_t *);
knot_dname_t *knot_dname_from_str(uint8_t *, const char *, size_t);
char *knot_dname_to_str(char *, const knot_dname_t *, size_t);
uint16_t knot_rdata_rdlen(const knot_rdata_t *);
uint8_t *knot_rdata_data(const knot_rdata_t *);
knot_rdata_t *knot_rdataset_at(const knot_rdataset_t *, size_t);
uint32_t knot_rrset_ttl(const knot_rrset_t *);
163
int knot_rrset_txt_dump_data(const knot_rrset_t *, const size_t, char *, const size_t, const knot_dump_style_t *);
164 165 166 167 168 169 170 171 172 173 174 175
const knot_dname_t *knot_pkt_qname(const knot_pkt_t *);
uint16_t knot_pkt_qtype(const knot_pkt_t *);
uint16_t knot_pkt_qclass(const knot_pkt_t *);
int knot_pkt_begin(knot_pkt_t *, knot_section_t);
int knot_pkt_put_question(knot_pkt_t *, const knot_dname_t *, uint16_t, uint16_t);
const knot_rrset_t *knot_pkt_rr(const knot_pktsection_t *, uint16_t);
const knot_pktsection_t *knot_pkt_section(const knot_pkt_t *, knot_section_t);
struct kr_rplan *kr_resolve_plan(struct kr_request *);
knot_mm_t *kr_resolve_pool(struct kr_request *);
struct kr_query *kr_rplan_push(struct kr_rplan *, struct kr_query *, const knot_dname_t *, uint16_t, uint16_t);
int kr_rplan_pop(struct kr_rplan *, struct kr_query *);
struct kr_query *kr_rplan_resolved(struct kr_rplan *);
176
int kr_nsrep_set(struct kr_query *, size_t, const struct sockaddr *);
177 178 179 180 181 182 183 184 185 186
unsigned int kr_rand_uint(unsigned int);
int kr_pkt_put(knot_pkt_t *, const knot_dname_t *, uint32_t, uint16_t, uint16_t, const uint8_t *, uint16_t);
int kr_pkt_recycle(knot_pkt_t *);
const char *kr_inaddr(const struct sockaddr *);
int kr_inaddr_family(const struct sockaddr *);
int kr_inaddr_len(const struct sockaddr *);
int kr_straddr_family(const char *);
int kr_straddr_subnet(void *, const char *);
int kr_bitcmp(const char *, const char *, int);
int kr_family_len(int);
187
struct sockaddr *kr_straddr_socket(const char *, int);
188 189 190 191 192 193 194 195 196 197
int kr_rrarray_add(rr_array_t *, const knot_rrset_t *, knot_mm_t *);
knot_rrset_t *kr_ta_get(map_t *, const knot_dname_t *);
int kr_ta_add(map_t *, const knot_dname_t *, uint16_t, uint32_t, const uint8_t *, uint16_t);
int kr_ta_del(map_t *, const knot_dname_t *);
void kr_ta_clear(map_t *);
_Bool kr_dnssec_key_ksk(const uint8_t *);
_Bool kr_dnssec_key_revoked(const uint8_t *);
int kr_dnssec_key_tag(uint16_t, const uint8_t *, size_t);
int kr_dnssec_key_match(const uint8_t *, size_t, const uint8_t *, size_t);
]]