8e7f48fc6b36494394542bd0f403f6477675f97e
[olsrd.git] / src / lq_plugin.h
1 #ifndef LQPLUGIN_H_
2 #define LQPLUGIN_H_
3
4 #include "tc_set.h"
5 #include "link_set.h"
6 #include "lq_route.h"
7 #include "lq_packet.h"
8 #include "packet.h"
9
10 #define LINK_COST_BROKEN 65535
11 #define ROUTE_COST_BROKEN (0xffffffff)
12 #define ZERO_ROUTE_COST 0
13
14 struct lq_handler {
15   olsr_linkcost (*calc_hello_cost)(const void *lq);
16   olsr_linkcost (*calc_tc_cost)(const void *lq);
17   
18   olsr_bool (*is_relevant_costchange)(olsr_linkcost c1, olsr_linkcost c2);
19   
20   olsr_linkcost (*packet_loss_handler)(void *lq, olsr_bool lost);
21   
22   void (*memorize_foreign_hello)(void *local, void *foreign);
23   void (*copy_link_lq_into_tc)(void *target, void *source);
24   void (*clear_hello)(void *target);
25   void (*clear_tc)(void *target);
26   
27   int (*serialize_hello_lq)(unsigned char *buff, void *lq);
28   int (*serialize_tc_lq)(unsigned char *buff, void *lq);
29   void (*deserialize_hello_lq)(const olsr_u8_t **curr, void *lq);
30   void (*deserialize_tc_lq)(const olsr_u8_t **curr, void *lq);
31   
32   char *(*print_hello_lq)(void *ptr);
33   char *(*print_tc_lq)(void *ptr);
34   char *(*print_cost)(olsr_linkcost cost);
35   
36   size_t hello_lq_size;
37   size_t tc_lq_size;
38 };
39
40 void set_lq_handler(struct lq_handler *handler, char *name);
41
42 olsr_linkcost olsr_calc_tc_cost(const struct tc_edge_entry *);
43 olsr_bool olsr_is_relevant_costchange(olsr_linkcost c1, olsr_linkcost c2);
44
45 int olsr_serialize_hello_lq_pair(unsigned char *buff, struct lq_hello_neighbor *neigh);
46 void olsr_deserialize_hello_lq_pair(const olsr_u8_t **curr, struct hello_neighbor *neigh);
47 int olsr_serialize_tc_lq_pair(unsigned char *buff, struct tc_mpr_addr *neigh);
48 void olsr_deserialize_tc_lq_pair(const olsr_u8_t **curr, struct tc_edge_entry *edge);
49
50 void olsr_update_packet_loss_worker(struct link_entry *entry, olsr_bool lost);
51 void olsr_memorize_foreign_hello_lq(struct link_entry *local, struct hello_neighbor *foreign);
52
53 char *get_link_entry_text(struct link_entry *entry);
54 char *get_tc_edge_entry_text(struct tc_edge_entry *entry);
55 const char *get_linkcost_text(olsr_linkcost cost, olsr_bool route);
56
57 void olsr_copy_hello_lq(struct lq_hello_neighbor *target, struct link_entry *source);
58 void olsr_copylq_link_entry_2_tc_mpr_addr(struct tc_mpr_addr *target, struct link_entry *source);
59 void olsr_copylq_link_entry_2_tc_edge_entry(struct tc_edge_entry *target, struct link_entry *source);
60 void olsr_clear_tc_lq(struct tc_mpr_addr *target);
61
62 struct hello_neighbor *olsr_malloc_hello_neighbor(const char *id);
63 struct tc_mpr_addr *olsr_malloc_tc_mpr_addr(const char *id);
64 struct lq_hello_neighbor *olsr_malloc_lq_hello_neighbor(const char *id);
65 struct link_entry *olsr_malloc_link_entry(const char *id);
66 struct tc_edge_entry *olsr_malloc_tc_edge_entry(const char *id);
67
68 #endif /*LQPLUGIN_H_*/