summaryrefslogtreecommitdiff
path: root/src/zcompile/zcompile.h
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2011-11-02 22:44:12 +0100
committerOndřej Surý <ondrej@sury.org>2011-11-02 22:44:12 +0100
commitc8d5977bb546dae9ed59d81556639c49badd8121 (patch)
tree4c86750db26c1c3502b60f2cd78ca9611cfa01d6 /src/zcompile/zcompile.h
downloadknot-upstream/0.8.0_pre1.tar.gz
Imported Upstream version 0.8.0~pre1upstream/0.8.0_pre1
Diffstat (limited to 'src/zcompile/zcompile.h')
-rw-r--r--src/zcompile/zcompile.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/src/zcompile/zcompile.h b/src/zcompile/zcompile.h
new file mode 100644
index 0000000..33dd3ee
--- /dev/null
+++ b/src/zcompile/zcompile.h
@@ -0,0 +1,207 @@
+/*!
+ * \file zoneparser.h
+ *
+ * \author modifications by Jan Kadlec <jan.kadlec@nic.cz>, most of the code
+ * by NLnet Labs.
+ * Copyright (c) 2001-2011, NLnet Labs. All rights reserved.
+ *
+ * \brief Zone compiler.
+ *
+ * \addtogroup zoneparser
+ * @{
+ */
+
+/*
+ * Copyright (c) 2001-2011, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _KNOTD_ZONEPARSER_H_
+#define _KNOTD_ZONEPARSER_H_
+
+#include <stdio.h>
+
+#include "libknot/dname.h"
+#include "libknot/rrset.h"
+#include "libknot/zone/node.h"
+#include "libknot/rdata.h"
+#include "libknot/zone/zone.h"
+#include "libknot/zone/dname-table.h"
+#include "libknot/zone/dname-table.h"
+#include "common/slab/slab.h"
+
+#define MAXRDATALEN 64 /*!< Maximum number of RDATA items. */
+#define MAXLABELLEN 63 /*!< Maximum label length. */
+#define MAXDOMAINLEN 255 /*!< Maximum domain name length */
+#define MAX_RDLENGTH 65535 /*!< Maximum length of RDATA item */
+#define MAXTOKENSLEN 512 /*!< Maximum number of tokens per entry. */
+#define B64BUFSIZE 65535 /*!< Buffer size for b64 conversion. */
+#define ROOT (const uint8_t *)"\001" /*!< Root domain name. */
+
+#define NSEC_WINDOW_COUNT 256 /*!< Number of NSEC windows. */
+#define NSEC_WINDOW_BITS_COUNT 256 /*!< Number of bits in NSEC window. */
+/*! \brief Size of NSEC window in bytes. */
+#define NSEC_WINDOW_BITS_SIZE (NSEC_WINDOW_BITS_COUNT / 8)
+
+/*
+ * RFC 4025 - codes for different types that IPSECKEY can hold.
+ */
+#define IPSECKEY_NOGATEWAY 0
+#define IPSECKEY_IP4 1
+#define IPSECKEY_IP6 2
+#define IPSECKEY_DNAME 3
+
+#define LINEBUFSZ 1024 /*!< Buffer size for one line in zone file. */
+
+struct lex_data {
+ size_t len; /*!< holds the label length */
+ char *str; /*!< holds the data */
+};
+
+#define DEFAULT_TTL 3600
+
+int yylex_destroy(void *scanner);
+int zp_parse(void *scanner);
+void zp_set_in(FILE *f, void *scanner);
+int zp_lex_init(void **scanner);
+int zp_lex_destroy(void *scanner);
+
+/*! \todo Implement ZoneDB. */
+typedef void namedb_type;
+
+/*!
+ * \brief One-purpose linked list holding pointers to RRSets.
+ */
+struct rrset_list {
+ knot_rrset_t *data; /*!< List data. */
+ struct rrset_list *next; /*!< Next node. */
+};
+
+typedef struct rrset_list rrset_list_t;
+
+/*!
+ * \brief Main zoneparser structure.
+ */
+struct zparser {
+ const char *filename; /*!< File with zone. */
+ uint32_t default_ttl; /*!< Default TTL. */
+ uint16_t default_class; /*!< Default class. */
+ knot_zone_t *current_zone; /*!< Current zone. */
+ knot_node_t *origin; /*!< Origin node. */
+ knot_dname_t *prev_dname; /*!< Previous dname. */
+ knot_dname_t *origin_from_config; /*!< Zone origin from config. */
+ knot_node_t *default_apex; /*!< Zone default apex. */
+
+ knot_node_t *last_node; /*!< Last processed node. */
+
+ char *dname_str; /*!< Temporary dname. */
+
+ int error_occurred; /*!< Error occured flag */
+ unsigned int errors; /*!< Number of errors. */
+ unsigned int line; /*!< Current line */
+
+ knot_rrset_t *current_rrset; /*!< Current RRSet. */
+ knot_rdata_item_t *temporary_items; /*!< Temporary rdata items. */
+
+ /*!
+ * \brief list of RRSIGs that were not inside their nodes in zone file
+ */
+ rrset_list_t *rrsig_orphans;
+ unsigned long rrsig_orphan_count; /*!< RRSIG orphan count */
+
+ knot_dname_t *root_domain; /*!< Root domain name. */
+ slab_cache_t *parser_slab; /*!< Slab for parser. */
+ rrset_list_t *node_rrsigs; /*!< List of RRSIGs in current node. */
+
+ int rdata_count; /*!< Count of parsed rdata. */
+};
+
+typedef struct zparser zparser_type;
+
+extern zparser_type *parser;
+
+extern void zc_error_prev_line(const char *fmt, ...);
+
+/* used in zonec.lex */
+
+void zc_error_prev_line(const char *fmt, ...);
+void zc_warning_prev_line(const char *fmt, ...);
+
+/*!
+ * \brief Does all the processing of RR - saves to zone, assigns RRSIGs etc.
+ */
+int process_rr();
+
+/*!
+ * \brief Parses and creates zone from given file.
+ *
+ * \param name Origin domain name string.
+ * \param zonefile File containing the zone.
+ * \param outfile File to save dump of the zone to.
+ * \param semantic_checks Enables or disables sematic checks.
+ *
+ * \retval 0 on success.
+ * \retval -1 on error.
+ */
+int zone_read(const char *name, const char *zonefile, const char *outfile,
+ int semantic_checks);
+
+/*!
+ * \brief Creates zparser instance.
+ *
+ *
+ * \return Created zparser instance.
+ */
+zparser_type *zparser_create();
+
+/*!
+ * \brief Inits zoneparser structure.
+ *
+ * \param filename Name of file with zone.
+ * \param ttl Default TTL.
+ * \param rclass Default class.
+ * \param origin Zone origin.
+ */
+void zparser_init(const char *filename, uint32_t ttl, uint16_t rclass,
+ knot_node_t *origin, knot_dname_t *owner_from_config);
+
+/*!
+ * \brief Frees zoneparser structure.
+ *
+ */
+void zparser_free();
+
+int save_dnames_in_table(knot_dname_table_t *table,
+ knot_rrset_t *rrset);
+
+#endif /* _KNOTD_ZONEPARSER_H_ */
+
+/*! @} */