// the packet.
uint8_t addLinkEstHeaderAndFooter(message_t *msg, uint8_t len) {
uint8_t newlen;
- linkest_header_t *hdr;
- linkest_footer_t *footer;
+ linkest_header_t * ONE hdr;
+ linkest_footer_t * ONE footer;
uint8_t i, j, k;
uint8_t maxEntries, newPrevSentIdx;
dbg("LI", "newlen1 = %d\n", len);
j = 0;
newPrevSentIdx = 0;
for (i = 0; i < NEIGHBOR_TABLE_SIZE && j < maxEntries; i++) {
+ uint8_t neighborCount;
+ neighbor_stat_entry_t * COUNT(neighborCount) neighborLists;
+ if(maxEntries <= NEIGHBOR_TABLE_SIZE)
+ neighborCount = maxEntries;
+ else
+ neighborCount = NEIGHBOR_TABLE_SIZE;
+
+ neighborLists = TCAST(neighbor_stat_entry_t * COUNT(neighborCount), footer->neighborList);
k = (prevSentIdx + i + 1) % NEIGHBOR_TABLE_SIZE;
if ((NeighborTable[k].flags & VALID_ENTRY) &&
(NeighborTable[k].flags & MATURE_ENTRY)) {
- footer->neighborList[j].ll_addr = NeighborTable[k].ll_addr;
- footer->neighborList[j].inquality = NeighborTable[k].inquality;
+ neighborLists[j].ll_addr = NeighborTable[k].ll_addr;
+ neighborLists[j].inquality = NeighborTable[k].inquality;
newPrevSentIdx = k;
- dbg("LI", "Loaded on footer: %d %d %d\n", j, footer->neighborList[j].ll_addr,
- footer->neighborList[j].inquality);
+ dbg("LI", "Loaded on footer: %d %d %d\n", j, neighborLists[j].ll_addr,
+ neighborLists[j].inquality);
j++;
}
}
// called when link estimator generator packet or
// packets from upper layer that are wired to pass through
// link estimator is received
- void processReceivedMessage(message_t* msg, void* payload, uint8_t len) {
+ void processReceivedMessage(message_t* ONE msg, void* COUNT_NOK(len) payload, uint8_t len) {
uint8_t nidx;
uint8_t num_entries;
}
// get the link estimation footer (neighbor entries) in the packet
- linkest_footer_t* getFooter(message_t* m, uint8_t len) {
+ linkest_footer_t* getFooter(message_t* ONE m, uint8_t len) {
// To get a footer at offset "len", the payload must be len + sizeof large.
- return (linkest_footer_t*)(len + (uint8_t *)call Packet.getPayload(m,len + sizeof(linkest_footer_t)));
+ return (linkest_footer_t* ONE)(len + (uint8_t *)call Packet.getPayload(m,len + sizeof(linkest_footer_t)));
}
// add the link estimation header (seq no) and link estimation
// footer (neighbor entries) in the packet. Call just before sending
// the packet.
- uint8_t addLinkEstHeaderAndFooter(message_t *msg, uint8_t len) {
+ uint8_t addLinkEstHeaderAndFooter(message_t * ONE msg, uint8_t len) {
uint8_t newlen;
linkest_header_t *hdr;
linkest_footer_t *footer;
j = 0;
newPrevSentIdx = 0;
for (i = 0; i < NEIGHBOR_TABLE_SIZE && j < maxEntries; i++) {
+ uint8_t neighborCount;
+ neighbor_stat_entry_t * COUNT(neighborCount) neighborLists;
+ if(maxEntries <= NEIGHBOR_TABLE_SIZE)
+ neighborCount = maxEntries;
+ else
+ neighborCount = NEIGHBOR_TABLE_SIZE;
+
+ neighborLists = TCAST(neighbor_stat_entry_t * COUNT(neighborCount), footer->neighborList);
+
k = (prevSentIdx + i + 1) % NEIGHBOR_TABLE_SIZE;
if ((NeighborTable[k].flags & VALID_ENTRY) &&
(NeighborTable[k].flags & MATURE_ENTRY)) {
- footer->neighborList[j].ll_addr = NeighborTable[k].ll_addr;
- footer->neighborList[j].inquality = NeighborTable[k].inquality;
+ neighborLists[j].ll_addr = NeighborTable[k].ll_addr;
+ neighborLists[j].inquality = NeighborTable[k].inquality;
newPrevSentIdx = k;
- dbg("LI", "Loaded on footer: %d %d %d\n", j, footer->neighborList[j].ll_addr,
- footer->neighborList[j].inquality);
+ dbg("LI", "Loaded on footer: %d %d %d\n", j, neighborLists[j].ll_addr,
+ neighborLists[j].inquality);
j++;
}
}
// called when link estimator generator packet or
// packets from upper layer that are wired to pass through
// link estimator is received
- void processReceivedMessage(message_t* msg, void* payload, uint8_t len) {
+ void processReceivedMessage(message_t* ONE msg, void* COUNT_NOK(len) payload, uint8_t len) {
uint8_t nidx;
uint8_t num_entries;
if (call SubAMPacket.destination(msg) == AM_BROADCAST_ADDR) {
linkest_header_t* hdr = getHeader(msg);
- linkest_footer_t* footer;
+ linkest_footer_t* ONE footer;
am_addr_t ll_addr;
ll_addr = call SubAMPacket.source(msg);
if ((nidx != INVALID_RVAL) && (num_entries > 0)) {
uint8_t payloadLen = call SubPacket.payloadLength(msg);
- void* subPayload = call SubPacket.getPayload(msg, payloadLen);
+ void* COUNT_NOK(payloadLen) subPayload = call SubPacket.getPayload(msg, payloadLen);
void* payloadEnd = subPayload + payloadLen;
dbg("LI", "Number of footer entries: %d\n", num_entries);
- footer = (linkest_footer_t*) (payloadEnd - (num_entries*sizeof(linkest_footer_t)));
+ footer = TCAST(linkest_footer_t* COUNT(num_entries), (payloadEnd - (num_entries*sizeof(linkest_footer_t))));
{
uint8_t i;
am_addr_t my_ll_addr;
+ neighbor_stat_entry_t * COUNT(num_entries) neighborLists;
my_ll_addr = call SubAMPacket.address();
+ neighborLists = TCAST(neighbor_stat_entry_t * COUNT(num_entries), footer->neighborList);
for (i = 0; i < num_entries; i++) {
- dbg("LI", "%d %d %d\n", i, footer->neighborList[i].ll_addr,
- footer->neighborList[i].inquality);
- if (footer->neighborList[i].ll_addr == my_ll_addr) {
- updateReverseQuality(ll_addr, footer->neighborList[i].inquality);
+ dbg("LI", "%d %d %d\n", i, neighborLists[i].ll_addr,
+ neighborLists[i].inquality);
+ if (neighborLists[i].ll_addr == my_ll_addr) {
+ updateReverseQuality(ll_addr, neighborLists[i].inquality);
}
}
}