Add cost computation
This commit is contained in:
parent
1a8f3c7cef
commit
ae4505db19
1 changed files with 16 additions and 3 deletions
19
ffd/ffd.c
19
ffd/ffd.c
|
@ -47,7 +47,7 @@
|
||||||
|
|
||||||
static const eth_addr_t ffd_addr = {{0x03, 0x00, 0x00, 0x00, 0x0f, 0xfd}};
|
static const eth_addr_t ffd_addr = {{0x03, 0x00, 0x00, 0x00, 0x0f, 0xfd}};
|
||||||
|
|
||||||
#define HELLO_INTERVAL 1000
|
#define HELLO_INTERVAL 400
|
||||||
#define IHU_INTERVAL (3*HELLO_INTERVAL)
|
#define IHU_INTERVAL (3*HELLO_INTERVAL)
|
||||||
#define PACKET_MAX 1000
|
#define PACKET_MAX 1000
|
||||||
|
|
||||||
|
@ -199,6 +199,19 @@ static uint16_t get_neigh_rxcost(const ffd_neigh_t *neigh) {
|
||||||
return (0x1000/received);
|
return (0x1000/received);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint16_t get_neigh_cost(const ffd_neigh_t *neigh) {
|
||||||
|
uint16_t txcost = neigh->txcost;
|
||||||
|
if (txcost < 256)
|
||||||
|
txcost = 256;
|
||||||
|
|
||||||
|
uint32_t cost = (txcost * get_neigh_rxcost(neigh)) >> 8;
|
||||||
|
|
||||||
|
if (cost > 0xffff)
|
||||||
|
return 0xffff;
|
||||||
|
else
|
||||||
|
return cost;
|
||||||
|
}
|
||||||
|
|
||||||
static void update_netifs() {
|
static void update_netifs() {
|
||||||
ffd_iface_t *iface, **cur;
|
ffd_iface_t *iface, **cur;
|
||||||
|
|
||||||
|
@ -339,7 +352,7 @@ static void handle_tlv_hello(const ffd_tlv_hello_t *tlv_hello, size_t len, const
|
||||||
neigh->last_seqno = seqno;
|
neigh->last_seqno = seqno;
|
||||||
neigh->last_hello = now;
|
neigh->last_hello = now;
|
||||||
|
|
||||||
fprintf(stderr, "debug: accepted hello, log %04x, rxcost is %u now.\n", neigh->hello_log, get_neigh_rxcost(neigh));
|
fprintf(stderr, "debug: accepted hello, log %04x, rxcost is %u, cost is %u now.\n", neigh->hello_log, get_neigh_rxcost(neigh), get_neigh_cost(neigh));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_tlv_ihu(const ffd_tlv_ihu_t *tlv_ihu, size_t len, const eth_addr_t *addr, ffd_iface_t *iface) {
|
static void handle_tlv_ihu(const ffd_tlv_ihu_t *tlv_ihu, size_t len, const eth_addr_t *addr, ffd_iface_t *iface) {
|
||||||
|
@ -365,7 +378,7 @@ static void handle_tlv_ihu(const ffd_tlv_ihu_t *tlv_ihu, size_t len, const eth_a
|
||||||
neigh->last_ihu = now;
|
neigh->last_ihu = now;
|
||||||
neigh->txcost = ntohs(tlv_ihu->rxcost);
|
neigh->txcost = ntohs(tlv_ihu->rxcost);
|
||||||
|
|
||||||
fprintf(stderr, "debug: accepted IHU, txcost is %u now.\n", neigh->txcost);
|
fprintf(stderr, "debug: accepted IHU, txcost is %u, cost is %u now.\n", neigh->txcost, get_neigh_cost(neigh));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_tlv(ffd_tlv_type_t type, const void *data, size_t len, void *arg) {
|
static void handle_tlv(ffd_tlv_type_t type, const void *data, size_t len, void *arg) {
|
||||||
|
|
Reference in a new issue