Upcoming Technologies Stephen Dawson-Haggerty Wireless and Embedded Systems Lab, UC Berkeley
“Work in Progress” Proceeding in working groups –IEEE –Zigbee –6lowpan/IPv6 Overall theme: leverage emerging standards
IEEE PHY/MAC specification MAC under development by working group –CSMA-CA –GTS –Slotted CSMA-CA Application interface in flux More reading: –tos/lib/mac/tkn154 –
ZigBee Network protocol and application stack built on IEEE Goal: standards-complaint Zigbee-pro stack built on stack –Cluster-tree, mesh routing –Security –Application profiles: i.e. HVAC, Sensing
IPv6 IPv6 a good fit for sensor networks –What about large header size? 6loWPAN Ideas about many important issues –Management –Configuration –Security TEP138, draft-tavakoli-hydro-01, “IP is Dead, Long Live IP For Sensor Networks”
IPv6 BLIP: IPv6 for TinyOS –Current progress: being integrated into core Useful basic feature set –Mesh routing –TCP/UDP Lots of tools, libraries for building apps –Shell, network reprogramming, RPC, …
An IP Network “sensor network” ≈ “IP subnet” “TOS_NODE_ID” ≈ “IP address” “base station” ≈ “edge router” “application gateway” no longer exists internet backhaul links edge routers node routers
Addressing 128-bit address space Lots of IPv6 RFCs deal with this: RFC2461, RFC4862 Address typeExampleTinyOS usage Link-local unicastfe80::beefL2 Mapped Link-local multicastff02::1Radio local broadcast Global unicast2001::64Routable address Network ID/64Interface ID/64
Useful Interfaces interface UDP { command error_t bind(uint16_t port); command error_t sendto(struct sockaddr_in6 *dest, void *payload, uint16_t len); event void recvfrom(struct sockaddr_in6 *src, void *payload, uint16_t len, struct ip_metadata *meta); } interface ICMPPing { command error_t ping(struct in6_addr *target, uint16_t period, uint16_t n); event void pingReply(struct in6_addr *source, struct icmp_stats *stats); event void pingDone(uint16_t ping_rcv, uint16_t ping_n); } UDPSocketC ICMPResponderC
Address Structures A lot like linux: ip.h struct sockaddr_in6 { uint16_t sin6_port; struct in6_addr sin6_addr; };
Example App: Sense & Send event Timer.fired() { call Read.read(); } Read.readDone(error_t result, uint16_t val) { struct sockaddr_in6 dest; nx_struct report r; r.reading = val; inet_pton6(“2001::64”, &dest.sin6_addr); dest.sin6_port = htons(REPORT_PORT); call UDP.sendto(dest, &r, sizeof(r)); } Configuration MyAppC{ } implementation { components MyAppP, new UdpSocketC(); MyAppP.UDP -> UdpSocketC;... }
Conclusions Exciting developments expected in 2009! Project links: – : –Zigbee: –BLIP: