On Wed, 2007-02-14 at 09:50, Steve McKown wrote: > Hi, > > I have a current wireless star network: ARM gateway connected to a Xbow mote > running BaseStation and several wireless motes that send unicast packets to > the gateway/BaseStation. The wireless motes request acks and will initiate a > resend of any message whose ack is not seen in sendDone(). The gateway uses > the c-sdk to retrieve messages from the BaseStation, processes them and > stores the results in a local embedded database. The gateway allows query of > the RDBMS and presentation of its contents via a simple HTTP-base app it also > runs. > > This setup works great until the receive rate of wireless messages exceeds > the > rate at which the gateway can insert them into the database. I tested this > scenario by using only 1 wireless node and having it send messages to the > gateway as fast as it can (still with ack/resend logic). In this test, the > gateway will frequently show a bad_crc message from the c-sdk. At the same > time, the gateway loses visibility to dozens of messages, based on message > sequence #s. > > Here's what I think I need to do to extend BaseStation to get better message > delivery reliability. Any comments or pointers to related information would > be helpful. > > 1. BaseStation should elect to send acks for received messages based upon the > filled state of the appropriate message queue (readioQueue, uartQueue) in > addition to the crc check. > > 2. BaseStation should use a back-off/resend strategy for any message sent > over > uart or radio for which an ack is not received in a timely fashion. > > Am I on the right track? Is BaseStation a good place to start?
To do this fully and completely, you need end-to-end acknowledgments. What matters is whether the database has inserted the record or not. BMAC acknowledgments are only link-layer acks; it may be that the base station has received the packet fully and successfully over the radio, but doesn't have space in its queue because the serial link is slower, or it may be that the packet is not correctly sent over the serial link (as you describe). End-to-end acks will get you reliability. If you also want high bandwidth, there are lots of techniques for managing when you send ACKs, how you time data transmissions, etc. You basically want to control the rate at which source send packets so that they do not overwhelm the base station. There's a HUGE literature on network rate control and flow control. Phil _______________________________________________ Tinyos-help mailing list [email protected] https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
