A process for routing data frames from a first node to a second node within a network, the process including: a tree routing sub-process, a source routing sub-process, a temporary routing sub-process and a mesh routing sub-process, wherein the particular sub-process for routing a data frame from the first node to the second node is selected by a processor, the process further comprising the following steps carried out by the processor: if the data frame has a source route header selecting the source routing sub-process, wherein a known route from the first node to the second node is embedded in the source route header of the data frame; if there is an entry for the target address in a temporary routing table, selecting the temporary routing sub-process, wherein entries in the temporary routing table contain a temporary return route to an originator node to which the data frame is sent as a reply; if the second node is a coordinator node, selecting the tree routing sub-process, wherein tree routing uses a neighborhood table to determine a route to the coordinator node; if the second node is not a coordinator node, selecting the mesh routing sub-process, wherein a route table is used to determine a route for the second node based on an address of the second node. a tree routing sub-process, a source routing sub-process, a temporary routing sub-process and a mesh routing sub-process, wherein the particular sub-process for routing a data frame from the first node to the second node is selected by a processor, the process further comprising the following steps carried out by the processor: if the data frame has a source route header selecting the source routing sub-process, wherein a known route from the first node to the second node is embedded in the source route header of the data frame; if there is an entry for the target address in a temporary routing table, selecting the temporary routing sub-process, wherein entries in the temporary routing table contain a temporary return route to an originator node to which the data frame is sent as a reply; if the second node is a coordinator node, selecting the tree routing sub-process, wherein tree routing uses a neighborhood table to determine a route to the coordinator node; if the second node is not a coordinator node, selecting the mesh routing sub-process, wherein a route table is used to determine a route for the second node based on an address of the second node. if the data frame has a source route header selecting the source routing sub-process, wherein a known route from the first node to the second node is embedded in the source route header of the data frame; if there is an entry for the target address in a temporary routing table, selecting the temporary routing sub-process, wherein entries in the temporary routing table contain a temporary return route to an originator node to which the data frame is sent as a reply; if the second node is a coordinator node, selecting the tree routing sub-process, wherein tree routing uses a neighborhood table to determine a route to the coordinator node; if the second node is not a coordinator node, selecting the mesh routing sub-process, wherein a route table is used to determine a route for the second node based on an address of the second node.