blip UDP开发
blip UDP开发流程:
1)IPV6地址
FF02::1 是本地链路范围内的全节点组播组。所有支持 IPv6 的接口将接收和
处理具有此目的地址的数据包。支持 IPv6 的设备发送一个目的地址为 FF02::1 的
数据包,本地链路上支持IPV6的所有节点都会收到。
2)blip UDP开发
interface UDP {
command error_t bind(uint16_t port);
command error_t sendto(struct sockaddr_in6 *dest, void *payload,
uint16_t len);
command error_t sendtov(struct sockaddr_in6 *dest,
struct ip_iovec *iov);
event void recvfrom(struct sockaddr_in6 *src, void *payload,
uint16_t len, struct ip6_metadata *meta);
}
程序中需要使用到接口:
uses interface UDP;
uses interface SplitControl;
// UDP接口在blip中已经实现了,需要接口中的命令 bind来实现端口绑定、sendto来实现报文发送,
// 并在当前的模块中实现接口UDP的事件recvfrom来接收数据
uses interface UDP;
// 在当前模块的Boot接口的booted事件中中调用SplitControl接口的start()事件,用来启动blip协议本身。
// blip协议启动后,在通过SplitControl接口的startDone()事件通知当前的模块,可以在当前模块中的事件startDone调用UPD接口的
// bind命令,实现端口的绑定。还因为blip协议停止时会触发接口SplitControl中事件stopDone(),所以SplitControl中事件
// stopDone也需要实现
// interface SplitControl
// {
// command error_t start();
// event void startDone(error_t error);
// command error_t stop();
// event void stopDone(error_t error);
// }
//
uses interface SplitControl;
components IPStackC;
components new UdpSocketC();
App.Boot -> MainC;
App.SplitControl -> IPStackC; // SplitControl接口绑定
App.UDP -> UdpSocketC; // UDP接口