7 #include "lq_plugin_default.h"
9 olsr_linkcost default_calc_cost(const void *ptr) {
10 const struct default_lq *lq = ptr;
12 float etx = (lq->lq < 0.1 || lq->nlq < 0.1 ? LINK_COST_BROKEN : 1.0/(lq->lq * lq->nlq));
13 olsr_linkcost cost = (olsr_linkcost)(etx * LQ_PLUGIN_LC_MULTIPLIER);
15 if (cost > LINK_COST_BROKEN)
16 return LINK_COST_BROKEN;
22 int default_olsr_serialize_hello_lq_pair(unsigned char *buff, void *ptr) {
23 struct default_lq *lq = ptr;
25 buff[0] = (unsigned char)(lq->lq * 255);
26 buff[1] = (unsigned char)(lq->nlq * 255);
27 buff[2] = (unsigned char)(0);
28 buff[3] = (unsigned char)(0);
33 void default_olsr_deserialize_hello_lq_pair(const olsr_u8_t **curr, void *ptr) {
34 struct default_lq *lq = ptr;
36 pkt_get_lq(curr, &lq->lq);
37 pkt_get_lq(curr, &lq->nlq);
41 olsr_bool default_olsr_is_relevant_costchange(olsr_linkcost c1, olsr_linkcost c2) {
43 return c2 - c1 > LQ_PLUGIN_RELEVANT_COSTCHANGE;
45 return c1 - c2 > LQ_PLUGIN_RELEVANT_COSTCHANGE;
48 int default_olsr_serialize_tc_lq_pair(unsigned char *buff, void *ptr) {
49 struct default_lq *lq = ptr;
51 buff[0] = (unsigned char)(lq->lq * 255);
52 buff[1] = (unsigned char)(lq->nlq * 255);
53 buff[2] = (unsigned char)(0);
54 buff[3] = (unsigned char)(0);
59 void default_olsr_deserialize_tc_lq_pair(const olsr_u8_t **curr, void *ptr) {
60 struct default_lq *lq = ptr;
62 pkt_get_lq(curr, &lq->lq);
63 pkt_get_lq(curr, &lq->nlq);
67 olsr_linkcost default_packet_loss_worker(void *ptr, olsr_bool lost) {
68 struct default_lq *tlq = ptr;
71 // calculate exponental factor for the new link quality, could be directly done in configuration !
72 alpha = 1 / (float)(olsr_cnf->lq_wsize);
74 // exponential moving average
75 tlq->lq *= (1 - alpha);
79 return default_calc_cost(ptr);
82 void default_olsr_memorize_foreign_hello_lq(void *ptrLocal, void *ptrForeign) {
83 struct default_lq *local = ptrLocal;
84 struct default_lq *foreign = ptrForeign;
87 local->nlq = foreign->lq;
94 void default_olsr_copy_link_lq_into_tc(void *target, void *source) {
95 memcpy(target, source, sizeof(struct default_lq));
98 void default_olsr_clear_lq(void *target) {
99 memset(target, 0, sizeof(struct default_lq));
102 char *default_olsr_print_lq(void *ptr) {
103 static char output_buffer[16];
104 struct default_lq *lq = ptr;
106 sprintf(output_buffer, "%2.3f/%2.3f", lq->lq, lq->nlq);
107 return output_buffer;
110 char *default_olsr_print_cost(olsr_linkcost cost) {
111 static char output_buffer[16];
112 sprintf(output_buffer, "%2.3f", ((float)cost)/LQ_PLUGIN_LC_MULTIPLIER);
113 return output_buffer;