diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-09-29 21:55:38 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-09-29 21:55:38 +0200 |
commit | ae4505db19ae5c13b2c9367fc0fe586df515025b (patch) | |
tree | 1c3e122ca89daed1345f7f9f84575006ff75d9e5 | |
parent | 1a8f3c7cef8e1fbd812cf1c29b5cf8c0ac641bee (diff) | |
download | ffd-ae4505db19ae5c13b2c9367fc0fe586df515025b.tar ffd-ae4505db19ae5c13b2c9367fc0fe586df515025b.zip |
Add cost computation
-rw-r--r-- | ffd/ffd.c | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -47,7 +47,7 @@ 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 PACKET_MAX 1000 @@ -199,6 +199,19 @@ static uint16_t get_neigh_rxcost(const ffd_neigh_t *neigh) { 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() { 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_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) { @@ -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->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) { |