summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2012-09-29 21:55:38 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2012-09-29 21:55:38 +0200
commitae4505db19ae5c13b2c9367fc0fe586df515025b (patch)
tree1c3e122ca89daed1345f7f9f84575006ff75d9e5
parent1a8f3c7cef8e1fbd812cf1c29b5cf8c0ac641bee (diff)
downloadffd-ae4505db19ae5c13b2c9367fc0fe586df515025b.tar
ffd-ae4505db19ae5c13b2c9367fc0fe586df515025b.zip
Add cost computation
-rw-r--r--ffd/ffd.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/ffd/ffd.c b/ffd/ffd.c
index 807a59a..b1668b0 100644
--- a/ffd/ffd.c
+++ b/ffd/ffd.c
@@ -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) {