diff options
-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) { |