0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-11-09 12:48:43 +00:00
bird/proto/static/static.h
Ondrej Zajicek 81a20ca5d8 Static: Add syntax for static MPLS labels
Instead of just using route attributes, static routes with
static MPLS labels can be defined just by e.g.:

  route 10.1.1.0/24 mpls 100 via 10.1.2.1 mpls 200;
2023-10-04 13:12:05 +02:00

75 lines
2.8 KiB
C

/*
* BIRD -- Static Route Generator
*
* (c) 1998--2000 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_
#include "nest/route.h"
#include "nest/bfd.h"
#include "lib/buffer.h"
struct static_config {
struct proto_config c;
list routes; /* List of static routes (struct static_route) */
int check_link; /* Whether iface link state is used */
struct rtable_config *igp_table_ip4; /* Table for recursive IPv4 next hop lookups */
struct rtable_config *igp_table_ip6; /* Table for recursive IPv6 next hop lookups */
};
struct static_proto {
struct proto p;
struct event *event; /* Event for announcing updated routes */
BUFFER_(struct static_route *) marked; /* Routes marked for reannouncement */
int marked_all; /* All routes are marked */
rtable *igp_table_ip4; /* Table for recursive IPv4 next hop lookups */
rtable *igp_table_ip6; /* Table for recursive IPv6 next hop lookups */
};
struct static_route {
node n;
net_addr *net; /* Network we route */
ip_addr via; /* Destination router */
struct iface *iface; /* Destination iface, for link-local vias or device routes */
struct neighbor *neigh; /* Associated neighbor entry */
struct static_route *chain; /* Next for the same neighbor */
struct static_route *mp_head; /* First nexthop of this route */
struct static_route *mp_next; /* Nexthops for multipath routes */
struct f_line *cmds; /* List of commands for setting attributes */
uint index; /* Distinguish different routes with same net */
byte dest; /* Destination type (RTD_*) */
byte state; /* State of route announcement (SRS_*) */
byte active; /* Next hop is active (nbr/iface/BFD available) */
byte onlink; /* Gateway is onlink regardless of IP ranges */
byte weight; /* Multipath next hop weight */
byte use_bfd; /* Configured to use BFD */
uint mpls_label; /* Local MPLS label, -1 if unused */
struct bfd_request *bfd_req; /* BFD request, if BFD is used */
mpls_label_stack *mls; /* MPLS label stack; may be NULL */
};
/*
* Note that data fields neigh, chain, state, active and bfd_req are runtime
* data, not real configuration data. Must be handled carefully.
*
* Regular (i.e. dest == RTD_UNICAST) routes use static_route structure for
* additional next hops (fields mp_head, mp_next). Note that 'state' is for
* whole route, while 'active' is for each next hop. Also note that fields
* mp_head, mp_next, active are zero for other kinds of routes.
*/
#define RTDX_RECURSIVE 0x7f /* Phony dest value for recursive routes */
#define SRS_DOWN 0 /* Route is not announced */
#define SRS_CLEAN 1 /* Route is active and announced */
#define SRS_DIRTY 2 /* Route changed since announcement */
void static_show(struct proto *);
#endif