wiki:MeshApp
Last modified 4 years ago Last modified on 07/31/2013 12:08:40 PM

MeshApp

The project was abandoned because of bad ad-hoc support in Android. Additionally, running a routing daemon constantly consumes energy. See Serval project for a similar project.

MeshApp started as a Google Summer of Code project in 2010 and is aiming at having a simple to use application for mobile phones/devices to join existing or create temporary mesh networks. It will allow completely autonomous, independent and infrastructure-less wireless networks made with devices at hand.

An open-source, cross-platform application for ad-hoc wireless mesh networking on mobile devices.

MeshApp gives users the ability to connect to existing community based ad-hoc wireless mesh networks on their mobile device, or to create their own temporary ad-hoc networks and connect to others around them.

The core functionality of MeshApp is provided by guilib – where all input from the user is processed and all output from the routing protocol running underneath MeshApp is parsed and formatted for display by the actual platform-specific native user interface.

Presently, MeshApp is designed to run on top of olsrd (an ad-hoc routing protocol daemon) and work natively with rooted Android mobile devices and the Nokia N900.

MeshApp is designed to be easily ported to additional platforms and to support a variety of different routing protocols (like Babel and B.A.T.M.A.N.). We hope to include support for other platforms and routing protocols in the near future.

If you wish to help out or would like to learn more about this project, feel free to join.

Overview

We can split MeshApp into three separate parts according to the Model-View-Controller paradigm.

  1. Model – Routing Protocol Daemon
    1. nameservice plugin:
      • Flood location data with lat/lon commands.
      • Collect location data of other nodes with latlon-file command.
      • Retrieve location data remotely by adding a telnet command to nameservice in master branch of olsrd.
    2. txtinfo plugin:
      • Passes formatted data to GUI library.
    3. Collect more data:
      • If the network provides GeoRSS use additional data from it.
      • There is a simple way to do this network independently: use SSID as a base, append for example /feeds/nodes and check if it exists. As you can use internal DNS this can always resolve to something.
    4. Share/publish data about a node:
      • Using 'nameservice' plugin for supported ones.
      • Using nodewatcher? mechanism.
      • Possible data:
        • Unique identifier for each user.
        • Current (real-time) location.
        • Device Info/Status.
  2. Controller – MeshApp GUI Library
    1. Ad-Hoc Mode:
      1. Connect to an existing ad-hoc network.
        • Enter ad-hoc mode and connect to the desired network automatically.
        • Detect the network's configuration and set up the wireless interface on the device accordingly.
        • Launch the routing protocol.
        • Begin transmitting/receiving data over the network.
      2. Create a temporary ad-hoc network.
        • Automatically setup temporary network according to preferences in config file.
        • Optionally merge disjoint temporary networks together by issuing a common BSSID.
    2. Data Parsing/Collection:
      • Common parsing/collecting of data from plugins, preparing data into useful formats.
    3. GUI Logic:
      • We register callbacks with the library from platform specific GUI libraries. All GUI logic is here.
  3. View – Platform GUI
    1. Wizards:
      1. First Time Setup Wizard:
        • Tutorial of features and uses.
        • Privacy and sharing settings.
      2. Temporary Ad-Hoc Setup Wizard:
        • Set SSID.
        • Send invites through SMS.
    2. Windows:
      1. Connection Window:
        • Select mode of operation (connect to mesh, setup temp mesh, run in background).
        • Display basic information about available networks.
      2. Node Data Window:
        • Display mesh node data in a table.
        • Update on change in network topology or when user prompts refresh.
        • Display best link quality/routing metric (ETX in OLSR) a device has to peering nodes. Or a list of them, sorted by ETX, where the first one is enlarged.
      3. Network Topology Window:
        • Display known topology of the mesh network.
        • Display best link quality/routing metric (ETX in OLSR) a device has to peering nodes, overlayed on a map so that can go to location with better ETX.
      4. Preferences Window:
        • Customize MeshApp preferences.
        • View/Edit privacy and sharing options.
        • Customize config file for routing protocol.
        • Version/Licensing info.
        • Report a bug.
        • Optionally provide performance data of routing protocol so improvements to routing protocols can be made. It would be interesting to have such statistical data on how well such temporary meshes performed.
    3. Supported Devices
      • Android 1.5+ devices
      • Nokia N900

Milestones

Milestone: MeshApp 0.1

Completed 7 years ago (08/04/2010 09:28:42 AM)

  • Set up environment for development workflow.
  • Start and stop olsrd through a basic GUI.
  • Generate a simple, working olsrd.conf file.

Milestone: MeshApp – Future

Completed 4 years ago (09/26/2013 05:50:52 AM)

  • Official support for MeshApp on Android by Google!
  • Additional support for routing protocols other than OLSR.
  • Other GUI interfaces for MeshApp (console, web, Windows native, Mac OS X native).
  • Include a "friends list" so that MeshApp can remember certain nodes that the user regularly interact. Keep track of friends on the network.
  • Improve "expert features" to include useful tools for deploying, debugging and repairing nodes on an active mesh network.

Milestone: MeshApp 1.0

Completed 4 years ago (09/26/2013 05:51:05 AM)

  • Enhanced GUI functionality, usability options and platform appearance.
  • Robust mechanisms for logging application debug information and mesh network connectivity/usage data, which can be optionally shared with application developer.
  • Ability to enable experimental "advanced" features useful for testing custom low-level configuration and troubleshooting node deployment on a live mesh network.
  • Core functionality is stable and ready for release.

Milestone: MeshApp 0.5

Completed 4 years ago (09/26/2013 05:51:14 AM)

  • Basic GuiLib functions and platform views with "native look and feel".
  • Support for connecting to existing ad-hoc mesh networks or creating a temporary network.
  • Robust collection/sharing of mesh network data.

Open questions/problems

Questions/problems which require code changes in other software (besides official support in Android):

  • For network configuration of interfaces it would be great if we could use AHCP. As it requires IPv6 link-local connections it currently does not work on old versions of Android platform. So adding support to AHCP to work also on IPv4-only nodes would be necessary or some other mechanism of automatic network configuration of nodes using MeshApp is necessary. It also has to work in temporary mesh network without existing central server.
  • In master branch of olsrd it would be possible to add telnet command to the nameservice plugin so it would be easier to retrieve data about location of other nodes.
  • Nameservice plugin currently uses only latitude and longitude, but it would be useful to have also precision of those coordinates to better asses location. Android provides different location providers which can provide accuracy.

Expected users and use cases

To better design features we have to think which kind of users will be using MeshApp and what are common things they would like to do with it:

Novice user

Somebody trying to see what is this app for once he/she downloaded it from the market.

  • In general, alternative Internet connectivity, transmit and share data on the mesh itself.
    • Has to know who he/she can transfer and share data with – service discovery in the mesh.
  • Create a temporary mesh network to which others can connect.
    • Share to others his/her Internet connectivity or invite others to share their Internet connectivity (not necessary using the MeshApp, but for example in a classroom you create a temporary mesh network and say to a friend if he/she can connect to it and share his/her Internet connectivity).
    • Allow uplinks over USB.
    • No technical skills required to establish a temporary mesh network – good defaults.
  • Send an invite to others (friends, classmates, coworkers and/or neighbors) through SMS to connect to their temporary mesh network or encourage them to connect to existing open mesh network they are just using.
  • Running MeshApp in the background allowing it to detect open mesh networks and informing the user that he/she can connect to it.
  • Connect to a mesh network without any configuration necessary or even automatically always it finds some open mesh network.
  • View the network topology to understand the idea of what mesh networking is about.
  • If the mesh provides coordinates of nodes (via GeoRSS or OLSR plugin) view the mesh on the map.

We would like that novice user is impressed by the ability to connect to a group of people (coworkers, classmates, friends...) and share data in ad-hoc mode easily. Have broader reach than just normal ad-hoc mode. The user should often use MeshApp to create/join temporary ad-hoc mesh networks for a temporary event like a business meeting or a school project, or like the novice user, to connect to friends when temporarily stuck somewhere without WiFi (gor example, being unable to sit as a group on the bus). It would be great if it would help publish service discovery data so that data and services would be easier shared.

In this way users will understand why a bigger such mesh network is useful. Especially if they connect to it too.

Invited user

User instructed to use this app to connect to the mesh network at hand.

  • Automatically connect to the mesh using just the name of the network or instructed custom settings, transmit data and interact with nodes as desired.

Expert user

Expert user who works on improving the mesh, builds the mesh, uses MeshApp to ease new node deployments, mesh debugging and monitoring network status.

  • Be able to configure advanced OLSR or other MeshApp options.
  • Automatically connect to the mesh using highly customized/experimental settings, switch between different configuration profiles (load different plugins with different parameters) for OLSR/MeshApp on the fly. Able to quickly and easily edit custom configurations for testing purposes.
  • Uses MeshApp to check if the node he/she is currently working on (new node or maintenance) active, connected to the mesh, what are link qualities to peering nodes.
  • Save network topology snapshots to a log file by (1) taking a one-time snapshot or (2) configuring MeshApp to take snapshots of network topology and activity at regular time-intervals or (3) upon nodes entering/leaving the mesh.
    • With this data mesh coverage/heatmap can be later generated.
  • Likely to find the ability to test out experimental OLSR plugin/configurations live on the mesh with a mobile device a time-saving alternative to testing and potentially breaking existing nodes which may not be easily physically accessible.

License

This program is open source, under GNU General Public License.

Any additional content is available under Creative Commons Attribution-ShareAlike license unless specified otherwise.

Developed source code may contain, use, link to and/or distribute also parts under third party copyright with possibly different licensing conditions. Make sure you check and respect also those conditions.

For more information and more precise licensing requirements, see LICENSE file in the source code repository.

See Also