Home | History | Annotate | Line # | Download | only in dist
edns.h revision 1.1.1.1.4.2
      1  1.1.1.1.4.2  pgoyette /*
      2  1.1.1.1.4.2  pgoyette  * edns.h -- EDNS definitions (RFC 2671).
      3  1.1.1.1.4.2  pgoyette  *
      4  1.1.1.1.4.2  pgoyette  * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
      5  1.1.1.1.4.2  pgoyette  *
      6  1.1.1.1.4.2  pgoyette  * See LICENSE for the license.
      7  1.1.1.1.4.2  pgoyette  *
      8  1.1.1.1.4.2  pgoyette  */
      9  1.1.1.1.4.2  pgoyette 
     10  1.1.1.1.4.2  pgoyette #ifndef _EDNS_H_
     11  1.1.1.1.4.2  pgoyette #define _EDNS_H_
     12  1.1.1.1.4.2  pgoyette 
     13  1.1.1.1.4.2  pgoyette #include "buffer.h"
     14  1.1.1.1.4.2  pgoyette struct nsd;
     15  1.1.1.1.4.2  pgoyette struct query;
     16  1.1.1.1.4.2  pgoyette 
     17  1.1.1.1.4.2  pgoyette #define OPT_LEN 9U                      /* Length of the NSD EDNS response record minus 2 */
     18  1.1.1.1.4.2  pgoyette #define OPT_RDATA 2                     /* holds the rdata length comes after OPT_LEN */
     19  1.1.1.1.4.2  pgoyette #define OPT_HDR 4U                      /* NSID opt header length */
     20  1.1.1.1.4.2  pgoyette #define NSID_CODE       3               /* nsid option code */
     21  1.1.1.1.4.2  pgoyette #define DNSSEC_OK_MASK  0x8000U         /* do bit mask */
     22  1.1.1.1.4.2  pgoyette 
     23  1.1.1.1.4.2  pgoyette struct edns_data
     24  1.1.1.1.4.2  pgoyette {
     25  1.1.1.1.4.2  pgoyette 	char ok[OPT_LEN];
     26  1.1.1.1.4.2  pgoyette 	char error[OPT_LEN];
     27  1.1.1.1.4.2  pgoyette 	char rdata_none[OPT_RDATA];
     28  1.1.1.1.4.2  pgoyette 	char rdata_nsid[OPT_RDATA];
     29  1.1.1.1.4.2  pgoyette 	char nsid[OPT_HDR];
     30  1.1.1.1.4.2  pgoyette };
     31  1.1.1.1.4.2  pgoyette typedef struct edns_data edns_data_type;
     32  1.1.1.1.4.2  pgoyette 
     33  1.1.1.1.4.2  pgoyette enum edns_status
     34  1.1.1.1.4.2  pgoyette {
     35  1.1.1.1.4.2  pgoyette 	EDNS_NOT_PRESENT,
     36  1.1.1.1.4.2  pgoyette 	EDNS_OK,
     37  1.1.1.1.4.2  pgoyette 	/* EDNS states may be extended in the future */
     38  1.1.1.1.4.2  pgoyette 	EDNS_ERROR
     39  1.1.1.1.4.2  pgoyette };
     40  1.1.1.1.4.2  pgoyette typedef enum edns_status edns_status_type;
     41  1.1.1.1.4.2  pgoyette 
     42  1.1.1.1.4.2  pgoyette struct edns_record
     43  1.1.1.1.4.2  pgoyette {
     44  1.1.1.1.4.2  pgoyette 	edns_status_type status;
     45  1.1.1.1.4.2  pgoyette 	size_t           position;
     46  1.1.1.1.4.2  pgoyette 	size_t           maxlen;
     47  1.1.1.1.4.2  pgoyette 	size_t		 opt_reserved_space;
     48  1.1.1.1.4.2  pgoyette 	int              dnssec_ok;
     49  1.1.1.1.4.2  pgoyette 	int              nsid;
     50  1.1.1.1.4.2  pgoyette };
     51  1.1.1.1.4.2  pgoyette typedef struct edns_record edns_record_type;
     52  1.1.1.1.4.2  pgoyette 
     53  1.1.1.1.4.2  pgoyette void edns_init_data(edns_data_type *data, uint16_t max_length);
     54  1.1.1.1.4.2  pgoyette void edns_init_record(edns_record_type *data);
     55  1.1.1.1.4.2  pgoyette int edns_parse_record(edns_record_type *data, buffer_type *packet,
     56  1.1.1.1.4.2  pgoyette 	struct query* q, struct nsd* nsd);
     57  1.1.1.1.4.2  pgoyette 
     58  1.1.1.1.4.2  pgoyette /*
     59  1.1.1.1.4.2  pgoyette  * The amount of space to reserve in the response for the EDNS data
     60  1.1.1.1.4.2  pgoyette  * (if required).
     61  1.1.1.1.4.2  pgoyette  */
     62  1.1.1.1.4.2  pgoyette size_t edns_reserved_space(edns_record_type *data);
     63  1.1.1.1.4.2  pgoyette 
     64  1.1.1.1.4.2  pgoyette void edns_init_nsid(edns_data_type *data, uint16_t nsid_len);
     65  1.1.1.1.4.2  pgoyette 
     66  1.1.1.1.4.2  pgoyette #endif /* _EDNS_H_ */
     67