mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-02 18:56:53 +00:00

Zebra: Redistribute routes from non-main kernel table to main. This can be the basis for many interesting features such as variations of redistribute ARP, using zebra as the RIB in the presence of multiple routing protocol stacks etc. The code only supports IPv4 for now, but the infrastructure is in place for IPv6. Usage: There is a new route type introduced by this model: TABLE. Routes imported from alternate kernel tables will have their protocol type set to TABLE. Routes from alternate kernel tables MUST be first imported into the main table via "ip import-table <table id>". They can then be redistributed via a routing protocol via the "redistribute table" command. Each imported table can an optional administrative distance specified. In Zebra, a route with a lower distance is chosen over routes with a higher distance. So, distance is how the user can choose to prioritize routes from a particular table over routes from other tables or routes learnt another way in zebra. Route maps for imported tables are specified via "ip protocol" command in zebra. Route maps for redistributed routes within a routing protocol are subject to the route map options supported by the protocol. The "match source-protocol" option in route maps can match against "table" to filter routes learnt from alternate kernel routing tables. Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
75 lines
2.3 KiB
C
75 lines
2.3 KiB
C
#include <zebra.h>
|
|
#include "zebra/rib.h"
|
|
#include "zebra/zserv.h"
|
|
|
|
#include "zebra/redistribute.h"
|
|
|
|
void zebra_redistribute_add (int a, struct zserv *b, int c)
|
|
{ return; }
|
|
#ifdef HAVE_SYS_WEAK_ALIAS_PRAGMA
|
|
#pragma weak zebra_redistribute_delete = zebra_redistribute_add
|
|
#pragma weak zebra_redistribute_default_add = zebra_redistribute_add
|
|
#pragma weak zebra_redistribute_default_delete = zebra_redistribute_add
|
|
#else
|
|
void zebra_redistribute_delete (int a, struct zserv *b, int c)
|
|
{ return; }
|
|
void zebra_redistribute_default_add (int a, struct zserv *b, int c)
|
|
{ return; }
|
|
void zebra_redistribute_default_delete (int a, struct zserv *b, int c)
|
|
{ return; }
|
|
#endif
|
|
|
|
void redistribute_add (struct prefix *a, struct rib *b)
|
|
{ return; }
|
|
#ifdef HAVE_SYS_WEAK_ALIAS_PRAGMA
|
|
#pragma weak redistribute_delete = redistribute_add
|
|
#else
|
|
void redistribute_delete (struct prefix *a, struct rib *b)
|
|
{ return; }
|
|
#endif
|
|
|
|
void zebra_interface_up_update (struct interface *a)
|
|
{ return; }
|
|
#ifdef HAVE_SYS_WEAK_ALIAS_PRAGMA
|
|
#pragma weak zebra_interface_down_update = zebra_interface_up_update
|
|
#pragma weak zebra_interface_add_update = zebra_interface_up_update
|
|
#pragma weak zebra_interface_delete_update = zebra_interface_up_update
|
|
#else
|
|
void zebra_interface_down_update (struct interface *a)
|
|
{ return; }
|
|
void zebra_interface_add_update (struct interface *a)
|
|
{ return; }
|
|
void zebra_interface_delete_update (struct interface *a)
|
|
{ return; }
|
|
#endif
|
|
|
|
void zebra_interface_address_add_update (struct interface *a,
|
|
struct connected *b)
|
|
{ return; }
|
|
#ifdef HAVE_SYS_WEAK_ALIAS_PRAGMA
|
|
#pragma weak zebra_interface_address_delete_update = zebra_interface_address_add_update
|
|
#else
|
|
void zebra_interface_address_delete_update (struct interface *a,
|
|
struct connected *b)
|
|
{ return; }
|
|
#endif
|
|
void zebra_interface_bfd_update (struct interface *a, struct prefix *b)
|
|
{ return; }
|
|
|
|
|
|
int zebra_import_table (afi_t afi, u_int32_t table_id, u_int32_t metric,
|
|
int add)
|
|
{ return 0; }
|
|
|
|
int zebra_add_import_table_entry (struct route_node *rn, struct rib *rib)
|
|
{ return 0; }
|
|
|
|
int zebra_del_import_table_entry (struct route_node *rn, struct rib *rib)
|
|
{ return 0; }
|
|
|
|
int is_zebra_import_table_enabled(afi_t afi, u_int32_t table_id)
|
|
{ return 0; }
|
|
|
|
int zebra_import_table_config(struct vty *vty)
|
|
{ return 0; }
|