Patent Description:
A mesh network, see en. org/wiki/Mesh_Network is a local network in which the infrastructure (i.e. bridges, switches and other infrastructure devices) connect directly, dynamically and non-hierarchically to other nodes and cooperate with one another to efficiently route data from/to clients. This lack of dependency on one node allows for every node to participate in the relay of information. Mesh networks dynamically self-organize and self-configure, which can reduce installation overhead. The ability to self-configure enables dynamic distribution of workloads, particularly in the event that a few nodes should fail. This in turn contributes to fault-tolerance and reduced maintenance costs. See, <NPL>.

A mobile mesh network is a mesh network in which the nodes can be mobile. A mobile mesh network is also referred to as a mobile ad hoc network (MANET). In such a network, the protocol does not presume persistence of the routing architecture, and therefore multihop routes require a mechanism for route discovery for communication of a message from a message-generating source node to a destination node. Such a procedure, often referred to as "routing" in the MANET/Mesh literature, is typically done by choosing a set of relaying nodes from the source to the destination, which could be the set of all nodes or a subset thereof, depending upon the solution.

A typical mesh network protocol strategy is to broadcast packets, which are then responded to by neighboring nodes. This, however, imposes particular inefficiencies. Even where these inefficiencies were sought to be minimized, packet transmission is typically nevertheless included in the protocol. See, <NPL>), which explicitly mentions that it exchanges short messages to build routes.

Ad hoc networks or mesh network protocols have been studied. These protocols permit peer-to-peer communications between devices over a variety of frequency bands, and a range of capabilities. In a multihop network, communications are passed from one node to another in series between the source and destination. Because of various risks, as the number of hops grows, the reliability of a communication successfully reaching its destination tends to decrease, such that hop counts of more than <NUM> or <NUM> in a mobility permissive network are rarely considered feasible. A typical mesh network protocol maintains a routing table at each node, which is then used to control the communication. This routing table may be established proactively or reactively. In proactive routing, the network state information is pushed to the various nodes, often appended to other communications, such that when a communication is to be established, the nodes rely on the then-current routing information to control the communication. This paradigm suffers from the possibility of stale or incorrect routing information or overly burdensome administrative overhead, or both. Reactive routing seeks to determine the network state at the time of, and for the purpose of, a single set of communications, and therefore may require significant communications possibly far exceeding the amount of data to be communicated in order to establish a link. Because the network state is requested at the time of communication, there is less opportunity to piggyback the administrative information on other communications. There are also various hybrid ad hoc network routing protocols, which seek to compromise between these two strategies, and other paradigms as well.

<NPL>, discusses various ad hoc networking protocols. Wired networks used two main algorithms; the link-state algorithm and the distance vector algorithm. In link-state routing, each node maintains an up-to-date view of the network by periodically broadcasting the link-state costs of its neighboring nodes to all other nodes using a flooding strategy. When each node receives an update packet, it updates its view of the network and the link-state information by applying a shortest-path algorithm to choose the next hop node for each destination. In distance-vector routing, for every destination x, each node i maintains a set of distances Dxij, where j ranges over the neighbors of node i. Node i selects a neighbor, k, to be the next hop for x if Dxik=minj{Dxij}. This allows each node to select the shortest path to each destination. The distance-vector information is updated at each node by a periodical dissemination of the current estimate of the shortest distance to every node [<NUM>].

The traditional link-state and distance-vector algorithm do not scale in large MANETs. This is because periodic or frequent route updates in large networks may consume significant part of the available bandwidth, increase channel contention and may require each node to frequently recharge their power supply. Where the network changes rapidly, or bandwidth is low, the routing information may prove inaccurate or stale.

To overcome the problems associated with the link-state and distance-vector algorithms a number of routing protocols have been proposed for MANETs. These protocols can be classified into three different groups: global/proactive, on-demand/reactive, and hybrid. In proactive routing protocols, the routes to all the destination (or parts of the network) are determined at the start up (before a need for communication), and maintained by using a periodic route update process.

In reactive protocols, routes are determined when they are required by the source using a route discovery process. Hybrid routing protocols combine the basic properties of the first two classes of protocols into one. That is, they are both reactive and proactive in nature. Each group has a number of different routing strategies, which employ a flat or a hierarchical routing structure.

Two distinct types of ubiquitous wireless data communication networks have developed: cellular telephone networks having a maximum range of about <NUM>-<NUM> miles line of sight or <NUM> miles in hilly terrain, and short-range local-area computer networks (wireless local-area networks or WLANs) having a maximum range of about <NUM>-<NUM> miles (~<NUM>-<NUM> feet IEEE-<NUM>. 11n, <NUM>) outdoors line of sight. IEEE <NUM>. 11ah is a wireless networking protocol published in <NUM> (Wi-Fi HaLow) as an amendment of the IEEE <NUM>-<NUM> wireless networking standard. It uses <NUM> license exempt bands to provide extended range Wi-Fi networks, compared to conventional Wi-Fi networks operating in the <NUM> and <NUM> bands. It also benefits from lower energy consumption, allowing the creation of large groups of stations or sensors that cooperate to share signals, supporting the concept of the Internet of Things (IoT). org/wiki/IEEE_802.11ah. A benefit of <NUM>. 11ah is extended range, making it useful for rural communications and offloading cell phone tower traffic. The other purpose of the protocol is to allow low rate <NUM> wireless stations to be used in the sub-gigahertz spectrum. The protocol is one of the IEEE <NUM> technologies which is the most different from the LAN model, especially concerning medium contention. A prominent aspect of <NUM>. 11ah is the behavior of stations that are grouped to minimize contention on the air media, use relay to extend their reach, employ predefined wake/doze periods, are still able to send data at high speed under some negotiated conditions and use sectored antennas. It uses the <NUM>. 11a/g specification that is down sampled to provide <NUM> channels, each of them able to provide <NUM> kbit/s throughput. It can cover a one-kilometer radius. It aims at providing connectivity to thousands of devices under an access point. The protocol supports machine to machine (M2M) markets, like smart metering.

The cellular infrastructure for wireless telephony involves long-distance communication between mobile phones and central base-stations, where the base stations are typically linked to cell sites, connecting to the public switched telephone network and the Internet. The radio band for these long-range wireless networks is typically a regulated, licensed band, and the network is managed to combine both broad bandwidth (~<NUM>-<NUM>) and many simultaneous users. This is contrasted with a short-range wireless computer network, which may link multiple users to a central router or hub, which router may itself have a wired connection to the Internet. A key example is WiFi, which is managed according to the IEEE-<NUM>. I Ix communications standards, with an aggregate data rate theoretically over I gigabit per second (<NUM>. 11ac) and a range that is typically much less than <NUM>. Other known standard examples are known by the terms Bluetooth and ZigBee. The radio band for a WLAN is typically an unlicensed band, such as one of the ISM bands (industrial, scientific, and medical), or more recently, a whitespace band formerly occupied by terrestrial analog television (WSLAN). One implication of such an unlicensed band is the unpredictable presence of significant interference due to other classes of users, which tends to limit either the range, or the bandwidth, or both. For such local area networks, a short range (low power and high modulation rates) becomes advantageous for high rates of spatial band reuse and acceptable levels of interference.

A flooding-based protocol is disclosed in <CIT>.

Document <CIT> relates to passive routing in a mesh network.

In a wireless mesh network, it is often required to unicast a packet from a source of the packet to a specified destination, over multiple hops. An example application is for <NUM>:<NUM> private chatting (texting). Another use is for accessing a server or an Internet gateway to the wireless mesh network. While there have been a number of inventions and academic papers on this basic problem of routing (see supra), prior work, including works referenced above, utilize control packets to first discover routes, either proactively, or reactively (on-demand), or in a hybrid scheme. Control packets include "link-state advertisements/updates", "route request/response", etc. See, en. org/wiki/List_of_ad_hoc_routing_protocols.

The present technology provides a zero-control-packet mesh routing protocol, called VINE™, The lack of requirement for control packets means better scalability, longer battery life, and less vulnerability to control attacks.

The basic idea behind the VINE™ protocol is to use data packets themselves to build the routing state, referred to hereafter as gradient state (as the collection of node states forms a "gradient" toward the destination), which is then used for forwarding other data packets. Specifically, the gradient state indicates, for each destination, the number of hops to that destination via each of its neighbors. Every data packet contains information, such as its source and number of hops, sending neighbor, etc. A node receiving the packet uses that information to create a gradient state for those nodes. Packets are forwarded if there is gradient state for the destination that is fresh enough, and the gradient hops to the destination through some neighbor is less than or equal to the current node's hops to the destination. Thus, packets are forwarded along non-increasing gradients (like "water flowing downhill"), until the destination is reached. If there is no such gradient state, or if the time to live ("TTL") of the packet becomes zero, the packet is broadcast.

The present technology is particularly appropriate for a wireless mesh network in which the bandwidth is highly constrained, so that the use of routing control packets would be prohibitively expensive, according to the constraints of the network.

The VINE™ protocol supports the delivery of a private packet to the destination specified in the packet header.

The basic idea behind the VINE™ protocol is to use data packets themselves to build the routing state (or information), referred to hereafter as gradient state (as the collection of node states forms a "gradient" toward the destination) which is then used for forwarding other data packets. Specifically, the gradient state indicates, for each destination, the best information available about the destination; e.g., the number of hops to that destination via each of its neighbors.

Every data packet contains information, such as its source, the number of hops travelled from the source, sending neighbor, previous sender, etc., using which a node receiving the packet creates gradient state for those nodes. Only data packets are used to create gradient state, and there is no requirement for generation of explicit control packets. The gradient state contains a timestamp that indicates how fresh the information is. State that is older than a configured period is purged.

As is known, it is also possible to include control packets of various types to supplement or enhance the VINE™ protocol, and there is no reason that VINE™ could not or should not exploit routing information gained through alternate means. However, according to the various aspects of the VINE™ protocol, no explicit control packets are required, and each phase of operation can proceed without generation of any such packets.

The gradient state is used to decide, possibly in a distributed manner, whether one or more relay nodes are required, and if so, that set of relay nodes, for the packet. When there is no gradient state for a destination, a packet is relayed by all neighbors. Over time, as traffic flows, an increasingly richer sink tree toward each node is created, abstractly resembling the growth of a "vine" in a grove.

Packets are forwarded if there is gradient state for the destination that is fresh enough (according to a freshness metric, which may be static, dynamically determined, adaptive, geographically dependent, mobility or reliability dependent, etc.), and the gradient hops to the destination through some neighbor is less than or equal to the current node's hops to the destination. Thus, packets are forwarded along non-increasing gradients (like "water flowing downhill"), until the destination is reached.

If there is no such gradient state, the packet is broadcast. With broadcast, there is no specific target neighbor (alternatively, all neighbors are intended receivers). Each receiving neighbor processes the packet as mentioned above.

A packet is never sent back to the neighbor it came from. Every packet contains a sequence number, which is used to ensure that the sequence of broadcasts terminates.

While the lack of control packets means that many packets are flooded, VINE™ engenders a natural balance - packets are only flooded when there is no state, and when there is little state there is generally little data traffic (otherwise there would have been more state) and therefore flooding tends to be affordable; on the other hand, as data traffic increases, the number of nodes with gradient state increases and packets are routed without flooding. Indeed, under such circumstances, if control packets were used, they would need to be flooded as well.

Thus, initially, and after a period of inactivity, the first packet from any node is flooded. Subsequent packets progressively utilize the gradient state set up by previous packets, which increases with the diversity of source-destination pairs in the traffic. Each node independently decides whether to broadcast the packet, that is, have all of its neighbors relay or not.

A packet may alternate between "flooding" and "routing". For example, communication of a packet may start by finding gradient state, and then being forwarded to a neighbor and so on, until it arrives at a node without a gradient state, at which point it may be broadcast. Conversely, a packet may find no gradient state and start being "flooded", and then encounter a node with a gradient state and follow the state "downhill" to the destination. Multiple nodes that have received the broadcast may do this.

The gradient state expires, e.g., after a configured period, and therefore packets that were routed at some point in time may not be at a later point.

The VINE™ method for forwarding packets is referred to as Sender Controlled Relaying (SCR), to emphasize the fact that it is the sender that chooses the next-hop relayer. In SCR, the sender of a packet specifies in the network layer (NL) header the target node that should relay, if applicable.

The Gradient Establishment module is described in detail below, followed by a description of SCR.

Every data packet that is received by the node, whether or not it is a duplicate, is passed to the Gradient Establishment (GE) module for processing. (Note that freshness if packets is material, and therefore identical packets received at different times convey some useful distinct information). The GE module maintains the following data structure for every known destination:.

This information provides information to define "As of timestamp I can get to destination via neighbor subject to cost".

The cost semantics are similar to that in the header. In a preferred embodiment, the number of hops may be used as the cost, and in the discussion below, "hops" and "cost" are used interchangeably. The timestamp is used to age out entries that were created more than a configured time prior.

It is understood, however, that any useful cost function may be used to control the gradient. For example, in a power-constrained, variable power transmit system, the power required to reach a destination may be used as the cost. In other embodiments, an economic system is implemented, so that the cost represents actual or virtual currency units. See, <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>; <CIT>;<CIT>;<CIT>; <CIT>; <CIT>; <CIT>; <CIT>;<CIT>;<CIT>; and <CIT>. In still further systems, congestion, communication reliability, communication latency, interference with other communications, security, privacy or other factors may be key, or a part of, the cost function.

A list of entries may be maintained, that is sorted based on the cost. For a given destination and neighbor pair, only one entry is preferably maintained, namely the lowest cost entry. Of course, sorting and filtering the list is not required, and therefore a node may maintain additional information beyond that minimally required.

There is potentially a Gradient State Entry (GSE) for every combination of neighbor and destination. However, in order to limit firmware memory consumption, only a configured maximum number of entries per destination are maintained. Based on simulations, maintaining three entries is sufficient in most cases.

Upon receiving a packet, the GE module inspects the NL header and creates the following entries as long as they are not duplicates, and as long as the entry is not superseded by an existing entry on account of the cost (note that only the least cost entry is maintained for each neighbor). The fields below are from the NL header, except "Now", which refers to the current time at the node.

When a packet is flooded through the network, as is the case when there is no state or expired state, a node typically learns the state for all of its I-hop and <NUM>-hop neighbors. For some operational contexts, this may represent a large fraction of total nodes. Further, for every packet from a distant source, we have state that allows routing along a path to the source.

An example of Gradient Establishment during a Full Flood is illustrated in Figs. IA-IC, which shows that a packet is sourced at E, intended for F. Initially there is no state at any node, so the packet is essentially flooded (see below). The relevant header fields senderCostFromSrc (srcH), previous-sender (prevS) and sender (Sendr) are shown corresponding to the transmission. The source field is always E and not shown.

During this flood, the state is created as illustrated by the tables beneath each of Figs. IA, IB and IC, shows the state created after the transmission of the respective packets per the respective network diagram. Only the state corresponding to nodes B, D and F are shown. For each of these, the hops to the destination is updated based on the received packet.

Each entry in the table shows the number of hops at that node (column) to the destination (row) along with the neighbor through which the specified hops is achievable. Thus, for example, the entry in the last table for F (column), for destination E (row) is <NUM>-C. This means that F infers that it can reach E in <NUM> hops via node C. The entries are updated according to the algorithm (steps <NUM>-<NUM>) above.

The SCR module coordinates with peer SCR modules and local GE modules to deliver packets of type private or end-to-end ack to their end destinations. SCR uses the gradient state set up by the GE module to retrieve the "best" next-hop relay neighbor and have the packet be relayed by that neighbor. When there is no state, all nodes relay. SCR uses "eavesdropping", or Implicit Acknowledgements (IA). After transmitting, a node checks, for any packet it expects to be relayed by a specific neighbor, if it was relayed by that neighbor within a timeout period, and if not, retransmits the packet a specified number of times.

The SCR module may receive the packet from the Transport Layer (TL) if the packet was originated at this node, or from the MAC layer if the packet was originated at a different node. In the description below, C denotes the current node.

Upon receiving a packet of type private or E2E Ack from the TL, the SCR module appends an NL header with the version field to current version, sender as C, previousSender as NULL, senderHopsFromSource as <NUM>, and TTL as the configured maximum hops a packet is allowed to travel. The targetReceiver field is set. The isFullFlood and senderHopsToDestination are unused in SCR. It then sends the packet to the MAC Layer and sets an Implicit Acknowledgment (IA) timer.

Upon receiving a packet of type private or E2E Ack from the MAC Layer (ML), the SCR module first processes the packet for IA. It then checks if the destination of the packet is C. If so, it delivers the packet to the TL and terminates processing this packet. Otherwise, it checks if the targetReceiver field is C which implies that this node was chosen for relaying.

If so, then it proceeds to re-transmit the packet provided the TTL is at least I and the packet has not been transmitted previously. As in ECHO (see, <CIT>), the seqNum field can be used to determine whether the packet was previously received and re-transmitted. The SCR module modifies the NL header setting the sender as C, copies the sender field from the header into the previousSender field, updates the senderCostFromSource (as discussed above, in this embodiment, cost=hops, so it increments the field), and decrements the TTL. Finally, it sets the targetReceiver field. It then sends the packet to the MAC Layer and sets an IA timer.

<FIG> shows a flow chart for the initial packet sending in SCR (not retransmission).

There are many heuristics possible for choosing the target receiver. According to a preferred embodiment, the target receiver is chosen as follows. Let the destination ID be D. For each destination, we maintain a few Gradient State Entries (GSEs) per neighbor. The neighbor is picked such that the cost field is the lowest among all entries for the destination, with ties broken randomly, provided the timestamp field of the entry is not less than the current time minus a configured parameter GSE_EXPIRY_PERIOD.

In case of retransmissions, SCR attempts to choose the target neighbor that is different from those for previous retransmissions, if one exists, provided that target neighbor has the same or less cost to the destination. If such a fresh target neighbor is not available, previously chosen target neighbor is returned. Note that in some implementations, a failed transmission is an indicator of higher cost, and therefore the cost for use of that same path increased for future use. Thus, the cost may be used to provide implicit control over communication route preferences, and need not be based solely on hop count or objective or unbiased criteria.

If there is no entry for D, or if the entry is not fresh enough, SCR transmits the packet with the targetReceiver field set to NULL, indicating that any node that receives the packet should forward it provided it hasn't already done so.

SCR uses overheard packets from the target receiver as an implicit acknowledgement of delivery. After transmitting a packet that has a non-NULL target receiver, SCR sets an IA-Timer for the packet and stores the packet for retransmission, unless the target receiver is the final destination in which case no timer is set.

All received packets from the target receiver are processed to check if the packet identifier matches that of a stored packet. If so, the packet is deleted from the store, and the IA-timer is cancelled. Further, if an End-to-End Acknowledgement for the data packet is received, then the IA-timer is cancelled as well, since this implies that the data packet has been delivered. The network layer (NL) may process/inspect a Transport Layer (TL) header to accomplish this. This cross-layer inspection may violate layer distinctions, however, it helps improve performance, and such layer boundaries are heuristics and not prohibitions.

If no IA is obtained, then the IA-timer will trigger an interrupt, upon which the packet is retransmitted as long as the total number of retransmissions of the packet does not exceed a configured parameter SCR_MAX_XMTS. The Gradient State Table is consulted afresh to update the targetReceiver field so that any most up to date gradient information can be utilized.

If the number of transmissions has exceeded SCR_MAX_XMTS, then a flood is initiated on the packet. Specifically, the packet is sent with the targetReceiver field set to NULL, indicating that any node that receives the packet should forward it provided it hasn't already done so.

Therefore, by implicitly monitoring headers of packets that include constructive data communication payloads, a reactive routing protocol can reliably operate without requiring communication of any explicit control packets.

In some cases, out of band communications may be used to populate a routing table. For example, in a MANET employing nodes that have unreliable or interrupted cellular connectivity (or another type of communication network) and an alternate physical layer communication link, the routing information for the alternate physical layer communication link may be distributed to other nodes, and received from other nodes, when the cellular connectivity is available, so that when this connectivity becomes unavailable, reasonably fresh network state information is available without flooding of the alternate physical layer communication link.

<FIG> depicts an example of an apparatus <NUM>, in accordance with some example embodiments. This is similar to Fig. <NUM> of <CIT>. The apparatus <NUM> may comprise a node. Moreover, the nodes may comprise a user equipment, such as an internet of things device (for example, a machine, a sensor, an actuator, and/or the like), a smart phone, a cell phone, a wearable radio device (for example, an Internet of things [IoT] fitness sensor or other type of IoT device), and/or any other radio based device.

In some example embodiments, apparatus <NUM> may also include a radio communication link to a cellular network, or other wireless network. The apparatus <NUM> may include at least one antenna <NUM> in communication with a transmitter <NUM> and a receiver <NUM>. Alternatively transmit and receive antennas may be separate.

The apparatus <NUM> may also include a processor <NUM> configured to provide signals to and from the transmitter and receiver, respectively, and to control the functioning of the apparatus. Processor <NUM> may be configured to control the functioning of the transmitter and receiver by effecting control signaling via electrical leads to the transmitter and receiver. Likewise, processor <NUM> may be configured to control other elements of apparatus <NUM> by effecting control signaling via electrical leads connecting processor <NUM> to the other elements, such as a display or a memory. The processor <NUM> may, for example, be embodied in a variety of ways including circuitry, at least one processing core, one or more microprocessors with accompanying digital signal processor(s), one or more processor(s) without an accompanying digital signal processor, one or more coprocessors, one or more multi-core processors, one or more controllers, processing circuitry, one or more computers, various other processing elements including integrated circuits (for example, an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), and/or the like), or some combination thereof. Apparatus <NUM> may include a location processor and/or an interface to obtain location information, such as positioning and/or navigation information. Accordingly, although illustrated in as a single processor, in some example embodiments the processor <NUM> may comprise a plurality of processors or processing cores.

Signals sent and received by the processor <NUM> may include signaling information in accordance with a mesh network protocol, as discussed above, may employ number of different wireline or wireless networking techniques.

The apparatus <NUM> may also be capable of operating with one or more air interface standards, communication protocols, modulation types, access types, and/or the like, though these may require separate radios and/or a software defined radio implementation to permit these alternate uses. The preferred implementation is a <NUM> radio operating in the <NUM> ISM band, and complying with F. regulations for unlicensed use. The data carrier over the radio may include TCP/IP packets, UDP packets, or other standard higher level protocols.

It is understood that the processor <NUM> may include circuitry for implementing audio/video and logic functions of apparatus <NUM>. For example, the processor <NUM> may comprise a digital signal processor device, a microprocessor device, an analog-to-digital converter, a digital-to-analog converter, and/or the like. Control and signal processing functions of the apparatus <NUM> may be allocated between these devices according to their respective capabilities. The processor <NUM> may additionally comprise an internal voice coder (VC) 20a, an internal data modem (DM) 20b, and/or the like. Further, the processor <NUM> may include functionality to operate one or more software programs, which may be stored in memory. In general, processor <NUM> and stored software instructions may be configured to cause apparatus <NUM> to perform actions. For example, processor <NUM> may be capable of operating a connectivity program, such as, a web browser. The connectivity program may allow the apparatus <NUM> to transmit and receive web content, such as location-based content, according to a protocol, such as, wireless application protocol, wireless access point, hypertext transfer protocol, HTTP, and/or the like.

Apparatus <NUM> may also comprise a user interface including, for example, an earphone or speaker <NUM>, a ringer <NUM>, a microphone <NUM>, a display <NUM>, a user input interface, and/or the like, which may be operationally coupled to the processor <NUM>. The display <NUM> may, as noted above, include a touch sensitive display, where a user may touch and/or gesture to make selections, enter values, and/or the like. The processor <NUM> may also include user interface circuitry configured to control at least some functions of one or more elements of the user interface, such as, the speaker <NUM>, the ringer <NUM>, the microphone <NUM>, the display <NUM>, and/or the like. The processor <NUM> and/or user interface circuitry comprising the processor <NUM> may be configured to control one or more functions of one or more elements of the user interface through computer program instructions, for example, software and/or firmware, stored on a memory accessible to the processor <NUM>, for example, volatile memory <NUM>, non-volatile memory <NUM>, and/or the like. The apparatus <NUM> may include a battery for powering various circuits related to the mobile terminal, for example, a circuit to provide mechanical vibration as a detectable output. The user input interface may comprise devices allowing the apparatus <NUM> to receive data, such as, a keypad <NUM> (which can be a virtual keyboard presented on display <NUM> or an externally coupled keyboard) and/or other input devices. Preferably, the device is a low data rate, non-real time communication device, i.e., unsuitable for real-time voice communications, but this is not a limitation of the technology per se.

The apparatus <NUM> preferably also includes a short-range radio frequency (RF) transceiver and/or interrogator <NUM>, so data may be shared with and/or obtained from electronic devices in accordance with RF techniques. The apparatus <NUM> may include other short-range transceivers, such as an infrared (IR) transceiver <NUM>, a Bluetooth (BT) transceiver <NUM> operating using Bluetooth wireless technology, a wireless universal serial bus (USB) transceiver <NUM>, and/or the like. The Bluetooth transceiver <NUM> may be capable of operating according to low power or ultra-low power Bluetooth technology, for example, Wibree, Bluetooth Low-Energy, and other radio standards, such as Bluetooth <NUM>. In this regard, the apparatus <NUM> and, in particular, the short-range transceiver may be capable of transmitting data to and/or receiving data from electronic devices within a proximity of the apparatus, such as within <NUM> meters. The apparatus <NUM> including the Wi-Fi (e.g., IEEE-<NUM>. 11ac, ad, ax, af, ah, az, ba, a, b, g, i, n, s, <NUM>, <NUM>, etc.) or wireless local area networking modem may also be capable of transmitting and/or receiving data from electronic devices according to various wireless networking techniques, including 6LoWpan, Wi-Fi, Wi-Fi low power, WLAN techniques such as IEEE <NUM> techniques, IEEE <NUM> techniques, IEEE <NUM> techniques, and/or the like.

The apparatus <NUM> may comprise memory, such as, a subscriber identity module (SIM) <NUM> (for use in conjunction with a cellular network), a removable user identity module (R-UIM), and/or the like, which may store information elements related to a mobile subscriber. In addition to the SIM, the apparatus <NUM> may include other removable and/or fixed memory. The apparatus <NUM> may include volatile memory <NUM> and/or non-volatile memory <NUM>. For example, volatile memory <NUM> may include Random Access Memory (RAM) including dynamic and/or static RAM, on-chip or off-chip cache memory, and/or the like. Non-volatile memory <NUM>, which may be embedded and/or removable, may include, for example, read-only memory, flash memory, solid state drive, magnetic storage devices, optical disc drives, ferroelectric RAM, non-volatile random access memory (NVRAM), and/or the like. Like volatile memory <NUM>, non-volatile memory <NUM> may include a cache area for temporary storage of data. At least part of the volatile and/or non-volatile memory may be embedded in processor <NUM>. The memories may store one or more software programs, instructions, pieces of information, data, and/or the like which may be used by the apparatus for performing functions of the nodes disclosed herein. The memories may comprise an identifier, such as an international mobile equipment identification (IMEI) code, capable of uniquely identifying apparatus <NUM>. The functions may include one or more of the operations disclosed herein including with respect to the nodes and/or routers disclosed herein (see for example, <NUM>, <NUM>, <NUM>, and/or <NUM>). In the example embodiment, the processor <NUM> may be configured using computer code stored at memory <NUM> and/or <NUM> to provide the operations, such as detecting, by a router coupling a first mesh network to at least one other mesh network, a mesh packet having a destination node in the at least one other mesh network; receiving, at the router, an internet protocol address of the at least one other router, wherein the internet protocol address is received in response to querying for the destination node; and sending, by the router, the mesh packet encapsulated with the internet protocol address of the at least one other router coupled to the at least one other mesh network including the destination node.

Some of the embodiments disclosed herein may be implemented in software, hardware, application logic, or a combination of software, hardware, and application logic. The software, application logic, and/or hardware may reside in memory <NUM>, the control apparatus <NUM>, or electronic components disclosed herein, for example. In some example embodiments, the application logic, software or an instruction set is maintained on any one of various conventional computer-readable media. In the context of this document, a "computer-readable medium" may be any non-transitory media that can contain, store, communicate, propagate or transport the instructions for use by or in connection with an instruction execution system, apparatus, or device, such as a computer or data processor circuitry. A computer-readable medium may comprise a non-transitory computer-readable storage medium that may be any media that can contain or store the instructions for use by or in connection with an instruction execution system, apparatus, or device, such as a computer. Furthermore, some of the embodiments disclosed herein include computer programs configured to cause methods as disclosed with respect to the nodes disclosed herein.

The subject matter described herein may be embodied in systems, apparatus, methods, and/or articles depending on the desired configuration. For example, the systems, apparatus, methods, and/or articles described herein can be implemented using one or more of the following: electronic components such as transistors, inductors, capacitors, resistors, and the like, a processor executing program code, an application-specific integrated circuit (ASIC), a digital signal processor (DSP), an embedded processor, a field programmable gate array (FPGA), and/or combinations thereof. These various example embodiments may include implementations in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device. These computer programs (also known as programs, software, software applications, applications, components, program code, or code) include machine instructions for a programmable processor, and may be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the term "machine-readable medium" refers to any computer program product, computer-readable medium, computer-readable storage medium, apparatus and/or device (for example, magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions. Similarly, systems are also described herein that may include a processor and a memory coupled to the processor. The memory may include one or more programs that cause the processor to perform one or more of the operations described herein.

Although a few variations have been described in detail above, other modifications or additions are possible.

Claim 1:
A mesh network communication protocol for communicating between a plurality of respective mesh network nodes, the protocol using a gradient state, which indicates a number of hops to a destination via each of its neighbors, the protocol comprising:
receiving a data packet from a current sender by a recipient, the data packet defining: an identity of the current sender, an identity of a final destination, and a sequence identifier;
determining whether to rebroadcast by the recipient, if and only if the sequence identifier is not present in a list of prior sequence identifiers, and the identity of the final destination is not the identity of the recipient; and
selectively rebroadcasting the data packet by the recipient in dependence on said determining, modified by a replacement of the identity of the current sender with the identity of the recipient;
CHARACTERIZED IN THAT
the data packet received by the recipient further comprises an identity of a prior sender from which the current sender received the data packet, and a hop count of hops previously traversed by the data packet, and an identity of a target recipient;
a forwarding table is updated marking the current sender as being reachable in one hop, and the prior sender as being reachable in two hops via the current sender as next hop;
the determining whether to rebroadcast is further dependent on whether the identity of the target recipient matches an identity of the recipient; and
the data packet is selectively rebroadcast by the recipient in further dependence on said determining, modified by a replacement of the identity of the prior sender with the identity of the current sender, the identity of the target recipient with an identity of the next hop from the forwarding table if present, and an increment of the hop count,
wherein the data packet contains a time-to-live that is decremented by the recipient and the data packet is not forwarded if the time-to-live is zero;
wherein the protocol further comprises setting a timer for acknowledgement of the selectively rebroadcast data packet, and monitoring subsequent receipt of an overheard data packet having the sequence identifier.