我在用户空间中有一个包含数千个“节点”的程序。这些节点中的每一个都具有MAC地址,并且可以生成和使用消息。我想授予每个节点一个IPv6地址,并将消息转换为UDP有效负载。
通过“翻译”我的意思是节点可以注册以将消息发送到目标IP地址,然后当它产生消息时我想将其转换为UDP有效负载以使用节点的IP地址发送到该目的地作为源地址。当收到UDP数据包并将节点的IP地址作为目标地址时,我想将其转换为节点可以使用的消息。
这类似于6lowpan所做的(它为802.15.4节点提供了IPv6转换层),但我想在用户空间中进行此操作。 6lowpan在内核中实现。
我可以这样做的一种方法是打开tun
设备,这将允许我发送原始IPv6数据包。但这意味着我需要在我的程序中复制IPv6和UDP堆栈。例如,我的程序将负责处理ICMP消息,实现重复地址检测,UDP校验和等。
有更简单的方法吗?我想做的是从每个节点的内核请求一个全局可寻址的IPv6地址,然后使用典型的套接字方法发送和接收UDP。
我想定位linux,但我也可以使用BSD。