In December 2013, The Serval Project commenced a second round of work for the OpenITP (Internet Tools Project) to release software images for the Serval Mesh Extender device and the Serval Mesh app for Android by the end of March 2014.
From the grant proposal:
Specifically, we [The Serval Project are requesting OpenITP's support in completing work unit 3, that together with an existing grant under consideration by the NLnet Foundation, and existing work that are have [sic] currently resourced, will allow us to complete stages 1 and 2, and thus release an easy to use and effective Mesh Extender software image, and an integrated version of the Serval Mesh Android application. This will allow the general public to form their own mesh telephony networks over interesting distances using our open-source software.
The work was completed in November 2014, six months later than the contracted date of April 30, 2014. The delay was due to staff absences, more-than-expected technical hitches in the Mesh Extender firmware installation process, and demands of other tasks such as preparation of grant submissions to sustain the Project financially and completion of the following contracts:
During December 2014 and January 2015, four pairs of tested and functional Mesh Extender units were prepared to ship to the “Bleeding Edge” supporters of the Speak Freely crowdfunding campaign.
The following work items were performed to satisfy the contract:
The following supplemental work items demonstrate fulfilment:
<BOOKMARK:W1>
The Mesh Extender firmware is an OpenWRT image, so during February and March 2014, formal OpenWRT build and release support was added to Serval DNA:
<BOOKMARK:W2>
The “Peer List” screen (activity) of the Serval Mesh app for Android was unresponsive and sometimes failed to update, which made it difficult for users to spot the presence of Mesh Extender access points.
From January to March 2014, we changed the “Peer List” activity's back-end interface with Serval DNA. Instead of synchronous (blocking) calls through the JNI interface, a new, asynchronous Java API was developed for MDP network client processes, and the connect activity was altered to send and receive Distributed Numbering Architechure (DNA) queries and replies without blocking.
We used this opportunity to improve the software architecture by adding a Java API layer to the Serval DNA component itself so that other applications can easily embed it and communicate with it, independently of the Serval Mesh application. This had the immediate advantage of bringing the new Java API code under the scope of the Serval DNA testing framework. New test cases were written to specify the semantics and contracts of the new Java API and to prevent regressions. The existing Java code in the Serval Mesh application for communicating with Serval DNA was replaced by the new Java API, which effectively increased the test coverage of the Serval Mesh app for Android.
<BOOKMARK:W3>
The “Connect” screen (activity) of the Serval Mesh app for Android was designed for experts, and was not very usable.
In order to make it easy for users to connect to Mesh Extenders, we redesigned and simplified the “Connect” activity:
During February and March 2014, we improved the “Connect” activity:
Pressing the “Ad Hoc Mesh” label the first time initiates the process of probing for Ad Hoc capability, and pops up the HERE BE DRAGONS! warning. If the user chooses to Test, then the Serval Mesh application will attempt to use Super-User privilege to re-install the system Wi-Fi driver, which will pop up a dialog asking if the user will grant Super User privilege to Serval Mesh. By relegating these scary warnings and pop-ups behind the “Ad Hoc Mesh” button, we were able to remove them from the app's first-time start wizard, which was a significant obstacle to adoption.
The new “Connect” screen is much simpler than its predecessor, yet still requires more usability work. Users still need to know that they have to connect to mesh.servalproject.org in order to connect to a Mesh Extender. However, the design of the new “Connect” screen was directed towards eventually adding an extra row labelled “Mesh Extender”, which would be greyed out (unavailable) unless one or more Mesh Extender access points were within range. Checking the “Mesh Extender” option would automatically enable Wi-Fi and associate to the mesh.servalproject.org access point. We did not implement this because there are usability and implementation issues yet to be resolved, such as:
<BOOKMARK:W4>
The Serval Mesh Version 0.92 encapsulated the improvements made in W2 and W3, as well as many bug fixes, performance and stability improvements. The Release Notes list all the changes and known issues, and acknowledge the funding support of OpenITP.
The 0.92 release process lasted eight months from March to October 2014:
<BOOKMARK:W5>
From July to November 2014, scripts and documentation for installing the Mesh Extender firmware on an TP-LINK MR2030 from scratch were developed and committed to the new Mesh Extender Builder GitHub repository. This work was complicated by several technical issues:
The repository's README.md contains instructions for creating a USB flash drive containing the Mesh Extender software image:
The generic OpenWRT image builder does not build Serval DNA. Instead, the pre-built servald executable binary is contained in the repository. The make_image script could be improved to compile Serval DNA from source during STEP 1, but limited time and budget did not permit further refinement.
After STEP 3 the Mesh Extender unit will reboot, and will be running the new firmware kernel. The following steps install all the staged files to the Mesh Extender.
The user may then remove the USB flash drive from the workstation, insert it in the Mesh Extender unit, and power it up. The Mesh Extender will automatically upgrade itself from the contents of the USB flash drive then reboot. The Mesh Extender unit is now fully functional.
The presence of the NOROOT file in its corresponding USB flash partition prevents the Mesh Extender from accepting logins via SSH, for security reasons. Anybody with physical access to the unit can re-enable SSH logins by extracting the USB flash drive, inserting it in a workstation, removing the NOROOT file, re-inserting it in the Mesh Extender unit, and powering up the unit. The unit will re-create the NOROOT file and accept SSH logins until its next reboot, so enabling SSH logins by this method is not permanent.
The user may repeat STEP 3, STEP 4 and STEP 5 as often as desired to flash new Mesh Extender units from the same firmware image and create new USB flash drives for them.
<BOOKMARK:W6>
The Speak Freely crowdfunding campaign, which ran from July to September 2013, raised 13,465 USD for Mesh Extender development, which included donations from four “True Believer” supporters who are now credited in the Serval Mesh app, and from four “Bleeding Edge” supporters, to each of whom we will give a pair of working Mesh Extender MR3020 prototype units. As a bonus for late delivery, we will also give them each a pair of Huawei IDEOS X1 u8180 phones with Serval Mesh Version 0.92 pre-installed and tested in conjunction with the pair of Mesh Extender units.
During December 2014 and January 2015, we assembled and tested four pairs of Mesh Extender prototype units. This was complicated by technical difficulties such as defective RFD-900 radio modules, serial cable solder joint failures caused by repeated extraction and insertion into the 3D-printed case, and defective Sandisk USB flash drive units. Once these issues were overcome, the units performed correctly. The units and phones were shipped in January 2015.
<BOOKMARK:W7>
The Mesh Extender is still very much in prototype stage, and we are now focussed on getting as many as possible into the hands of early adopters. The Serval Project Developers group is our primary means for receiving feedback and providing technical support.
The following message threads reveal the presence of a few Mesh Extender early adopters: