Add support to export and redistribute IPv6 routes to and from quagga
[olsrd.git] / lib / quagga / src / quagga.h
1 /*
2  * OLSRd Quagga plugin
3  *
4  * Copyright (C) 2006-2008 Immo 'FaUl' Wehrenberg <immo@chaostreff-dortmund.de>
5  * Copyright (C) 2007-2010 Vasilis Tsiligiannis <acinonyxs@yahoo.gr>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation or - at your option - under
10  * the terms of the GNU General Public Licence version 2 but can be
11  * linked to any BSD-Licenced Software with public available sourcecode
12  *
13  */
14
15 /* -------------------------------------------------------------------------
16  * File               : quagga.h
17  * Description        : header file for quagga.c
18  * ------------------------------------------------------------------------- */
19
20 #include "routing_table.h" /* rt_entry */
21 #include "olsr_types.h" /* olsr_ip_addr */
22
23 #include <stdint.h>
24 #include <stdlib.h>
25
26 #define HAVE_SOCKLEN_T
27
28 /* Zebra version */
29 #ifndef ZEBRA_HEADER_MARKER
30 #define ZEBRA_HEADER_MARKER 255
31 #endif
32
33 #ifndef ZSERV_VERSION
34 #define ZSERV_VERSION 1
35 #endif
36
37 /* Zebra socket */
38 #ifndef ZEBRA_SOCKPATH
39 #define ZEBRA_SOCKPATH "/var/run/quagga/zserv.api"
40 #endif
41
42 /* Zebra packet size */
43 #define ZEBRA_MAX_PACKET_SIZ            4096
44
45 /* Zebra message types */
46 #define ZEBRA_IPV4_ROUTE_ADD            7
47 #define ZEBRA_IPV4_ROUTE_DELETE         8
48 #define ZEBRA_IPV6_ROUTE_ADD            9
49 #define ZEBRA_IPV6_ROUTE_DELETE         10
50 #define ZEBRA_REDISTRIBUTE_ADD          11
51 #define ZEBRA_REDISTRIBUTE_DELETE       12
52 #define ZEBRA_MESSAGE_MAX               23
53
54 /* Zebra route types */
55 #define ZEBRA_ROUTE_OLSR                11
56 #define ZEBRA_ROUTE_MAX                 13
57
58 /* Zebra flags */
59 #define ZEBRA_FLAG_SELECTED             0x10
60
61 /* Zebra nexthop flags */
62 #define ZEBRA_NEXTHOP_IFINDEX           1
63 #define ZEBRA_NEXTHOP_IPV4              3
64 #define ZEBRA_NEXTHOP_IPV6              6
65
66 /* Zebra message flags */
67 #define ZAPI_MESSAGE_NEXTHOP            0x01
68 #define ZAPI_MESSAGE_IFINDEX            0x02
69 #define ZAPI_MESSAGE_DISTANCE           0x04
70 #define ZAPI_MESSAGE_METRIC             0x08
71
72 /* Buffer size */
73 #define BUFSIZE 1024
74
75 /* Quagga plugin flags */
76 #define STATUS_CONNECTED 1
77 #define OPTION_EXPORT 1
78
79 struct zebra_route {
80   unsigned char type;
81   unsigned char flags;
82   unsigned char message;
83   unsigned char prefixlen;
84   union olsr_ip_addr prefix;
85   unsigned char nexthop_num;
86   union olsr_ip_addr *nexthop;
87   unsigned char ifindex_num;
88   uint32_t *ifindex;
89   uint32_t metric;
90   uint8_t distance;
91 };
92
93 void init_zebra(void);
94 void zebra_cleanup(void);
95 void zebra_parse(void*);
96 int zebra_redistribute(unsigned char);
97 int zebra_add_route(const struct rt_entry *);
98 int zebra_del_route(const struct rt_entry *);
99 void zebra_olsr_localpref(void);
100 void zebra_olsr_distance(unsigned char);
101 void zebra_export_routes(unsigned char);
102 void zebra_sockpath(char *);
103 void zebra_port(unsigned int);
104 void zebra_version(char);
105
106 /*
107  * Local Variables:
108  * c-basic-offset: 2
109  * indent-tabs-mode: nil
110  * End:
111  */