Wireless Network Interface Daemon for Low-Power Wireless SoCs
wpantundis a user-space network interface driver/daemon that provides a native IPv6 network interface to a low-power wireless Network Co-Processor (or NCP). It was written and developed by Nest Labs to make supporting Thread connectivity on Unix-like operating systems more straightforward.
wpantundis designed to marshall all access to the NCP, ensuring that it always remains in a consistent and well-defined state.
This is not an official Google product.
wpanctl) for managing and configuring the NCP.
The architecture and design of
wpantundhas been motivated by the following design goals (in no specific order):
wpantundto gracefully co-exist on a single machine
Note that Windows is not currently supported, but patches are welcome.
The following NCP plugins are provided:
src/ncp-spinel: Supports NCPs that communicate using the Spinel NCP Protocol, used by NCPs running OpenThread
src/ncp-dummy: A dummy NCP plug-in implementation meant to be the starting point for implementing new NCP plug-ins
wpantundis open-source software released under the Apache License, Version 2.0. See the file
LICENSEfor more information.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
wpantundis conceptually similar in purpose to the point-to-point daemon (
pppd, commonly used on Unix platforms to provide network connectivity via a dial-up modems) except that instead of communicating with a dial-up modem,
wpantundis communicating with an NCP.
wpantundcommunicates with the NCP via an abstraction of a asynchronous stream socket, which could be any of the following:
Unlike a dial-up modem, NCPs often have a rich management interface for performing operations, such as forming a network, joining a network, scanning for nearby networks, etc. To perform these operations,
wpantundincludes a command line utility called
wpanctl. Applications that need to directly configure the network interface can also communicate directly with
wpantundusing its DBus API.
To expose a native IPv6 network interface to the host operating system,
tundriver on Linux. On Linux, the default name for the interface is
The behavior of
wpantundis determined by its configuration parameters, which may be specified in a configuration file (typically
/etc/wpantund.conf) or at the command line. A typical configuration file might look like that shown below. For a more thorough explanation of available configuration parameters, see the included example.
# Try to name the network interface `wpan0`. # If not possible, a different name will be used. Config:TUN:InterfaceName "wpan0"
The pathname of the socket used to communicate
with the NCP.
The name of the driver plugin to use. The chosen
plugin must support the NCP you are trying to use.
Drop root privileges after opening all sockets
Use a CCA Threshold of -70db
When up and running, you can use
wpanctlto check the status of the interface and perform various management operations. For example, to check the general status of an interface:
$ sudo wpanctl status wpan0 => [ "NCP:State" => "offline" "Daemon:Enabled" => true "NCP:Version" => "OPENTHREAD/g1651a47; May 23 2016 17:23:24" "Daemon:Version" => "0.07.00 (May 23 2016 12:58:54)" "Config:NCP:DriverName" => "spinel" "NCP:HardwareAddress" => [F1D92A82C8D8FE43] ]
Here we see that the NCP is in the
offlinestate along with a few additional bits of information such as the version of the NCP and its hardware address. From here we can easily form a new network:
$ sudo wpanctl form "wpantund-testnet" Forming WPAN "wpantund-testnet" as node type router Successfully formed! $
Now if we check the status, we will see more information:
$ sudo wpanctl status wpan0 => [ "NCP:State" => "associated" "Daemon:Enabled" => true "NCP:Version" => "OPENTHREAD/g1651a47; May 23 2016 17:23:24" "Daemon:Version" => "0.07.00 (May 23 2016 12:58:54)" "Config:NCP:DriverName" => "spinel" "NCP:HardwareAddress" => [F1D92A82C8D8FE43] "NCP:Channel" => 23 "Network:NodeType" => "leader" "Network:Name" => "wpantund-testnet" "Network:XPANID" => 0x09717AEF221F66FB "Network:PANID" => 0xBFCD "IPv6:LinkLocalAddress" => "fe80::f3d9:2a82:c8d8:fe43" "IPv6:MeshLocalAddress" => "fd09:717a:ef22::9a5d:5d1e:5527:5fc8" "IPv6:MeshLocalPrefix" => "fd09:717a:ef22::/64" ] $ ifconfig wpan0 wpan0: flags=8051 mtu 1280 inet6 fe80::f3d9:2a82:c8d8:fe43%wpan0 prefixlen 10 scopeid 0x15 inet6 fd09:717a:ef22::9a5d:5d1e:5527:5fc8 prefixlen 64
If compiled with
wpanctlsupports an convenient interactive console. All commands support online help: type
helpto get a list of supported commands, or add
-hto a command to get help with that specific command.
For simulation example Codelab please see: https://openthread.io/guides#try_openthread
Submit bugs and feature requests to issue tracker. We use the following mailing lists for discussion and announcements:
wpantundUser Discussion Group
wpantundDeveloper Discussion Group
The following people have significantly contributed to the design and development of
If you would like to contribute to this project, please read CONTRIBUTING.md first.