extern struct protocol
proto_device, proto_radv, proto_rip, proto_static,
- proto_ospf, proto_pipe, proto_bgp, proto_bfd;
+ proto_ospf, proto_pipe, proto_bgp, proto_bfd, proto_rpki;
/*
* Routing Protocol Instance
--- /dev/null
+/*
+ * BIRD -- The Resource Public Key Infrastructure (RPKI) to Router Protocol
+ *
+ * (c) 2015 CZ.NIC
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+CF_HDR
+
+#include "proto/rpki/rpki.h"
+
+CF_DEFINES
+
+#define RPKI_CFG ((struct rpki_config *) this_proto)
+
+CF_DECLS
+
+CF_KEYWORDS(RPKI, CACHE, SERVER, SERVERS)
+
+CF_GRAMMAR
+
+CF_ADDTO(proto, rpki_proto)
+
+rpki_proto_start: proto_start RPKI {
+ this_proto = proto_config_new(&proto_rpki, $1);
+ }
+ ;
+
+rpki_proto_item:
+ proto_item
+ | CACHE SERVER ipa expr {
+ RPKI_CFG->remote.ip = $3;
+ RPKI_CFG->remote.port = $4;
+ }
+ ;
+
+rpki_proto_opts:
+ /* empty */
+ | rpki_proto_opts rpki_proto_item ';'
+ ;
+
+rpki_proto:
+ rpki_proto_start proto_name '{' rpki_proto_opts '}'
+
+CF_CODE
+
+CF_END
--- /dev/null
+/*
+ * BIRD -- The Resource Public Key Infrastructure (RPKI) to Router Protocol
+ *
+ * (c) 2015 CZ.NIC
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+/**
+ * DOC: The Resource Public Key Infrastructure (RPKI) to Router Protocol
+ */
+
+#define LOCAL_DEBUG
+
+#include "proto/rpki/rpki.h"
+
+static struct proto *
+rpki_init(struct proto_config *c)
+{
+ struct proto *p = proto_new(c, sizeof(struct rpki_proto));
+
+ log(L_DEBUG "------------- rpki_init -------------");
+
+ /* TODO: Add defaults */
+ return p;
+}
+
+static int
+rpki_start(struct proto *p)
+{
+ struct proto_rpki *rpki = (struct proto_rpki *) p;
+ struct rpki_config *cf = (struct rpki_config *) (p->cf);
+
+ log(L_DEBUG "------------- rpki_start -------------");
+
+ return PS_UP;
+}
+
+static int
+rpki_shutdown(struct proto *p)
+{
+ struct proto_rpki *rp = (struct proto_rpki *) p;
+
+ log(L_DEBUG "------------- rpki_shutdown -------------");
+
+ return PS_DOWN;
+}
+
+static int
+rpki_reconfigure(struct proto *p, struct proto_config *c)
+{
+ struct proto_rpki *rpki = (struct proto_rpki *) p;
+ struct rpki_config *new = (struct rpki_config *) c;
+
+ log(L_DEBUG "------------- rpki_reconfigure -------------");
+
+ return 1;
+}
+
+static void
+rpki_copy_config(struct proto_config *dest, struct proto_config *src)
+{
+ struct rpki_config *d = (struct rpki_config *) dest;
+ struct rpki_config *s = (struct rpki_config *) src;
+
+ log(L_DEBUG "------------- rpki_copy_config -------------");
+}
+
+static void
+rpki_get_status(struct proto *p, byte *buf)
+{
+ struct proto_rpki *rpki = (struct proto_rpki *) p;
+
+ log(L_DEBUG "------------- rpki_get_status -------------");
+}
+
+struct protocol proto_rpki = {
+ .name = "RPKI",
+ .template = "rpki%d",
+// .attr_class = EAP_BGP,
+// .preference = DEF_PREF_BGP,
+ .config_size = sizeof(struct rpki_config),
+ .init = rpki_init,
+ .start = rpki_start,
+ .shutdown = rpki_shutdown,
+// .cleanup = rpki_cleanup,
+ .reconfigure = rpki_reconfigure,
+ .copy_config = rpki_copy_config,
+ .get_status = rpki_get_status,
+// .get_attr = rpki_get_attr,
+// .get_route_info = rpki_get_route_info,
+// .show_proto_info = rpki_show_proto_info
+};