]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Added skeleton of static route protocol.
authorMartin Mares <mj@ucw.cz>
Sun, 6 Dec 1998 18:21:23 +0000 (18:21 +0000)
committerMartin Mares <mj@ucw.cz>
Sun, 6 Dec 1998 18:21:23 +0000 (18:21 +0000)
Makefile
TODO
bird.conf
nest/protocol.h
proto/static/Makefile [new file with mode: 0644]
proto/static/config.Y [new file with mode: 0644]
proto/static/static.c [new file with mode: 0644]
proto/static/static.h [new file with mode: 0644]

index c7dd7025e1252bfccb3b6d7266a111b382618b99..b0fee6217a6dcc4ef3d624ba0b414d12ed4a9386 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ OPT=-O2
 DEBUG=-g#gdb
 CFLAGS=$(OPT) $(DEBUG) -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses
 
-PROTOCOLS=rip
+PROTOCOLS=rip static
 LIBDIRS=sysdep/linux sysdep/unix lib
 BASEDIRS=nest $(addprefix proto/,$(PROTOCOLS))
 STDDIRS=$(BASEDIRS) $(OBJDIR)/conf
diff --git a/TODO b/TODO
index 5dc5948b5a75544c4d28e5c0d93a8d377bee44a7..105058234c5da0964ef28b67c4340ecd750ee92f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -16,6 +16,8 @@ Core
 - default preferences of protocols: prefer BGP over OSPF/RIP external routes?
 - secondary addresses -> subinterfaces
 - check if all protocols set proper packet priorities and TTL's.
+- better default protocol names
+- config: comments at end of line -> explicit ';' needed?
 
 - filter: logging of dropped routes (?)
 - limitation of memory consumption: per-process and total (?)
index 80c4f5127ceeaabf1c45546108f48f1a175a60d0..30c0ea2754d248f99321007eb46014f6ed625fcc 100644 (file)
--- a/bird.conf
+++ b/bird.conf
@@ -23,3 +23,7 @@ protocol kernel {
        learn;                  # Learn all routes from the kernel
        scan time 10;           # Scan kernel tables every 10 seconds
 }
+
+protocol static {
+       disabled
+}
index 59db428716f688aa4b100900fd75a095289cb7f0..f516f0f212dc233a9c9b3e2f6e84d92a26190c69 100644 (file)
@@ -47,6 +47,7 @@ extern list protocol_list;
 
 extern struct protocol proto_device;
 extern struct protocol proto_rip;
+extern struct protocol proto_static;
 
 /*
  *     Routing Protocol Instance
diff --git a/proto/static/Makefile b/proto/static/Makefile
new file mode 100644 (file)
index 0000000..7771c2f
--- /dev/null
@@ -0,0 +1,4 @@
+THISDIR=proto/static
+OBJS=static.o
+
+include ../../Rules
diff --git a/proto/static/config.Y b/proto/static/config.Y
new file mode 100644 (file)
index 0000000..a9eaa87
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *     BIRD -- Static Protocol Configuration
+ *
+ *     (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ *     Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+CF_HDR
+
+#include "proto/static/static.h"
+
+CF_DECLS
+
+CF_KEYWORDS(STATIC)
+
+CF_GRAMMAR
+
+CF_ADDTO(proto, static_proto '}')
+
+static_proto_start: proto_start STATIC {
+     this_proto = proto_new(&proto_static, sizeof(struct static_proto));
+     static_init_instance((struct static_proto *) this_proto);
+  }
+ ;
+
+static_proto:
+   static_proto_start proto_name '{'
+ | static_proto proto_item ';'
+ ;
+
+CF_CODE
+
+CF_END
diff --git a/proto/static/static.c b/proto/static/static.c
new file mode 100644 (file)
index 0000000..679ee6e
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ *     BIRD -- Static Route Generator
+ *
+ *     (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ *     Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#define LOCAL_DEBUG
+
+#include "nest/bird.h"
+#include "nest/iface.h"
+#include "nest/protocol.h"
+#include "nest/route.h"
+#include "conf/conf.h"
+
+#include "static.h"
+
+#define GET_DATA struct static_proto *p = (struct static_proto *) P
+
+static void
+static_start(struct proto *P)
+{
+  DBG("Static: take off!\n");
+}
+
+static void
+static_neigh_notify(struct neighbor *n)
+{
+  DBG("Static: neighbor notify got, don't know why.\n");
+}
+
+static void
+static_dump(struct proto *P)
+{
+  DBG("Static: no dumps available in demo version.\n");
+}
+
+void
+static_init_instance(struct static_proto *P)
+{
+  struct proto *p = &P->p;
+
+  p->preference = DEF_PREF_STATIC;
+  p->start = static_start;
+  p->neigh_notify = static_neigh_notify;
+  p->dump = static_dump;
+  /* FIXME: Should shutdown remove all routes? */
+}
+
+static void
+static_init(struct protocol *p)
+{
+}
+
+static void
+static_preconfig(struct protocol *x)
+{
+}
+
+static void
+static_postconfig(struct protocol *p)
+{
+}
+
+struct protocol proto_static = {
+  { NULL, NULL },
+  "Static",
+  0,
+  static_init,
+  static_preconfig,
+  static_postconfig
+};
diff --git a/proto/static/static.h b/proto/static/static.h
new file mode 100644 (file)
index 0000000..df18c13
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *     BIRD -- Static Route Generator
+ *
+ *     (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ *     Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_STATIC_H_
+#define _BIRD_STATIC_H_
+
+struct static_proto {
+  struct proto p;
+  list routes;
+};
+
+void static_init_instance(struct static_proto *);
+
+struct static_route {
+  node n;
+  u32 net;                             /* Network we route */
+  int masklen;                         /* Mask length */
+  int dest;                            /* Destination type (RTD_*) */
+  u32 via;                             /* Destination router */
+  struct neighbor *neigh;
+  /* FIXME: Device routes, maybe via device patterns? */
+  /* FIXME: More route attributes, probably via filter syntax */
+};
+
+#endif