if (len > sizeof(radv_t) + sizeof(pfx_t) &&
beacon->type == ICMP_EXT_TYPE_BEACON) {
+ printfUART("beacon seqno: %i my seqno: %i\n", beacon->seqno, nd_seqno);
+
if (beacon->seqno > nd_seqno || (nd_seqno > 0 && beacon->seqno == 0)) {
call IPRouting.reset();
+ nd_seqno = beacon->seqno;
}
- nd_seqno = beacon->seqno;
- call IPRouting.reportAdvertisement(meta->sender, r->hlim,
- meta->lqi, beacon->metric);
+ if (beacon->seqno == nd_seqno) {
+ call IPRouting.reportAdvertisement(meta->sender, r->hlim,
+ meta->lqi, beacon->metric);
+ // push out the seqno update
+ call Advertisement.stop();
+ call ICMP.sendAdvertisements();
+
+ if (pfx->type != ICMP_EXT_TYPE_PREFIX) return;
+ call IPAddress.setPrefix((uint8_t *)pfx->prefix);
+ }
dbg("ICMPResponder", " * beacon cost: 0x%x\n", cost);
dbg("ICMPResponder", " * no beacon cost\n");
}
- if (pfx->type != ICMP_EXT_TYPE_PREFIX) return;
-
- call IPAddress.setPrefix((uint8_t *)pfx->prefix);
// TODO : get short address here...
}
q->type = ICMP_EXT_TYPE_BEACON;
q->length = sizeof(rqual_t) >> 3;;
q->metric = call IPRouting.getQuality();
+ q->seqno = nd_seqno;
call IPAddress.getLLAddr(&ipmsg->hdr.ip6_src);
ip_memclr((uint8_t *)&ipmsg->hdr.ip6_dst, 16);
packed_lowmsg_t lowmsg;
printfUART("p1: %p p2: %p\n", msg_payload, call Packet.getPayload(msg, 0));
- printfUART("l1: %i l2: %i\n", len, call Packet.payloadLength(msg));
-
// set up the ip message structaddFragment
lowmsg.data = msg_payload;
lowmsg.len = len;
traffic_interval += (call Random.rand16()) % (TGEN_BASE_TIME);
if (call TrafficGenTimer.isRunning())
call TrafficGenTimer.stop();
+ traffic_sent = FALSE;
call TrafficGenTimer.startOneShot(traffic_interval);
}
command void IPRouting.reset() {
int i;
- printfUART("ROUTING RESET\n");
for (i = 0; i < N_NEIGH; i++) {
neigh_table[i].flags = 0;