indent the lq_plugin
[olsrd.git] / src / lq_plugin.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without 
8  * modification, are permitted provided that the following conditions 
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright 
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright 
14  *   notice, this list of conditions and the following disclaimer in 
15  *   the documentation and/or other materials provided with the 
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its 
18  *   contributors may be used to endorse or promote products derived 
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  */
41
42 #ifndef LQPLUGIN_H_
43 #define LQPLUGIN_H_
44
45 #include "tc_set.h"
46 #include "link_set.h"
47 #include "olsr_spf.h"
48 #include "lq_packet.h"
49 #include "packet.h"
50
51 #define LINK_COST_BROKEN (1<<22)
52 #define ROUTE_COST_BROKEN (0xffffffff)
53 #define ZERO_ROUTE_COST 0
54
55 struct lqtextbuffer {
56   char buf[16];
57 };
58
59 struct lq_handler {
60   olsr_linkcost(*calc_hello_cost) (const void *lq);
61   olsr_linkcost(*calc_tc_cost) (const void *lq);
62
63   olsr_bool(*is_relevant_costchange) (olsr_linkcost c1, olsr_linkcost c2);
64
65   olsr_linkcost(*packet_loss_handler) (struct link_entry * entry, void *lq,
66                                        olsr_bool lost);
67
68   void (*memorize_foreign_hello) (void *local, void *foreign);
69   void (*copy_link_lq_into_tc) (void *target, void *source);
70   void (*clear_hello) (void *target);
71   void (*clear_tc) (void *target);
72
73   int (*serialize_hello_lq) (unsigned char *buff, void *lq);
74   int (*serialize_tc_lq) (unsigned char *buff, void *lq);
75   void (*deserialize_hello_lq) (const olsr_u8_t ** curr, void *lq);
76   void (*deserialize_tc_lq) (const olsr_u8_t ** curr, void *lq);
77
78   const char *(*print_hello_lq) (void *ptr, struct lqtextbuffer * buffer);
79   const char *(*print_tc_lq) (void *ptr, struct lqtextbuffer * buffer);
80   const char *(*print_cost) (olsr_linkcost cost, struct lqtextbuffer * buffer);
81
82   size_t hello_lq_size;
83   size_t tc_lq_size;
84 };
85
86 void set_lq_handler(struct lq_handler *handler, const char *name);
87
88 olsr_linkcost olsr_calc_tc_cost(const struct tc_edge_entry *);
89 olsr_bool olsr_is_relevant_costchange(olsr_linkcost c1, olsr_linkcost c2);
90
91 int olsr_serialize_hello_lq_pair(unsigned char *buff,
92                                  struct lq_hello_neighbor *neigh);
93 void olsr_deserialize_hello_lq_pair(const olsr_u8_t ** curr,
94                                     struct hello_neighbor *neigh);
95 int olsr_serialize_tc_lq_pair(unsigned char *buff, struct tc_mpr_addr *neigh);
96 void olsr_deserialize_tc_lq_pair(const olsr_u8_t ** curr,
97                                  struct tc_edge_entry *edge);
98
99 void olsr_update_packet_loss_worker(struct link_entry *entry, olsr_bool lost);
100 void olsr_memorize_foreign_hello_lq(struct link_entry *local,
101                                     struct hello_neighbor *foreign);
102
103 const char *get_link_entry_text(struct link_entry *entry,
104                                 struct lqtextbuffer *buffer);
105 const char *get_tc_edge_entry_text(struct tc_edge_entry *entry,
106                                    struct lqtextbuffer *buffer);
107 const char *get_linkcost_text(olsr_linkcost cost, olsr_bool route,
108                               struct lqtextbuffer *buffer);
109
110 void olsr_copy_hello_lq(struct lq_hello_neighbor *target,
111                         struct link_entry *source);
112 void olsr_copylq_link_entry_2_tc_mpr_addr(struct tc_mpr_addr *target,
113                                           struct link_entry *source);
114 void olsr_copylq_link_entry_2_tc_edge_entry(struct tc_edge_entry *target,
115                                             struct link_entry *source);
116 void olsr_clear_tc_lq(struct tc_mpr_addr *target);
117
118 struct hello_neighbor *olsr_malloc_hello_neighbor(const char *id);
119 struct tc_mpr_addr *olsr_malloc_tc_mpr_addr(const char *id);
120 struct lq_hello_neighbor *olsr_malloc_lq_hello_neighbor(const char *id);
121 struct link_entry *olsr_malloc_link_entry(const char *id);
122 struct tc_edge_entry *olsr_malloc_tc_edge_entry(const char *id);
123
124 /* Externals. */
125 extern struct lq_handler *active_lq_handler;
126
127 #endif /*LQPLUGIN_H_ */
128
129 /*
130  * Local Variables:
131  * c-basic-offset: 2
132  * End:
133  */