Commit a1bf6440 authored by Martin Mareš's avatar Martin Mareš

Added skeleton of static route protocol.

parent 980ffedb
......@@ -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
......
......@@ -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 (?)
......
......@@ -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
}
......@@ -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
......
THISDIR=proto/static
OBJS=static.o
include ../../Rules
/*
* 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
/*
* 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
};
/*
* 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment