[GSoC’21] RetroShare Mobile

About Me :

Hi there !👋

I am Avinash Kumar an undergraduate student of Indian Institute of Technology, BHU. As coming from the Tech-Field, I am using lot of open source software in day to day life. That always fascinate me towards open source and always wanted to be the part of open source community. Finally, I got a chance to work with great open source community.

About Retroshare :

RetroShare provides a decentralized, encrypted connection with maximum security between nodes where they can chat, share files, mail, etc. Retroshare uses GXS (Generic eXchange System) that provides Asynchronous distribution, authentication, privacy, security of generic data.

About Retroshare Mobile Project :

RetroShare Mobile is the android app which provides features of RetroShare using retroshare json api. RetroShare Mobile depends upon the retroshare_service app that creates a local environment inside app and provides all the retroshare json api. This project was initiated in GSoC’19 and added some features of RetroShare at that time. Techstack : flutter.

GOALS :

As I mentioned above this app was made in GSoC’19, there are lot of improvements is needed inside the app like :

  • Upgrading app with new version of flutter
  • Bundling of retroshare_service app inside the Retroshare Mobile using QT dependencies.
  • Adding Methode channel which helps to start, stop and restart the retroshare_service apk.
  • Solving bugs.
  • Working on state management tool.
  • Adding forums and circle feature of RetroShare.

The first week of GSoC :

I am working according to the timeline that i proposed in my proposal. I have integrated retroshare service apk inside the Retroshare Mobile using Qt android dependencies and also added Methode channel code that will help to start, restart and stop the retroshare_services from the flutter. Currently, I am working on upgrading the app with newer version of flutter and solving bugs that are available on the app.

PR link : https://github.com/RetroShare/retroshare-mobile/pulls

RetroShare Mobile Repository link : https://github.com/RetroShare/retroshare-mobile

It has been quite a learning experience and I am looking forward to achieving more amazing things this summer with Freifunk! 🎉

[GSOC’21] Radio Ressource Management with IEEE 802.11v

The goal of this project is to create a light-weight user-space daemon to enables IEEE 802.11v client handovers between OpenWrt APs.

About me

My name is Valerius Begau and I´m in my second year studying Bachelor of Internet-Technology and Applications at the University of Applied Sciences Nordhausen (Germany). I’m a big fan of open source because I think it’s a quicker and more efficient way to solve a problem. I am very happy to be part of the GSoC 2021 and hope to work together well.

Freifunk Client Steering (ff_steer)

Current Access network lack fast client handovers and roaming. Lately the client handover daemon “usteer” was released and focuses on none-standard client handovers by disassociating client and manage an intra AP communication to enable roaming. More recently the DAWN project uses a decentralized WiFi controller approach to disconnect clients based on RSSI measurements and statistics. Apart from this the IEEE 802.11v amendment is very promising. It allows a better handover of 802.11v enabled clients between APs. Instead of disassociating, the client can be guided to the next AP using a BSS TMR frames.

The procedure

  1. distribute the neighbor hearing map between relevant WiFi APs within a L2 domain
  2. manage client roaming with a new OpenWrt UBUS based interface
  3. validate and evaluate ff_steer with experiments

Freifunk Digital Twin – GSoC 2021

Hey fellas! ✌️
My name is Paul and this summer im going to work on the Freifunk-GSoC Project: Freifunk Digital Twin – test on your virtual mesh before going productive.

About me

My name is Paul Schreiber and i´m in my third year studying Bachelor of Internet-Technology an Applications at the University of Applied Sciences Nordhausen (Germany). I´ve been using Open Source content since the first day of my studies and i really appreciate that there are so many people who love to share their code and applications to all the others. I always wanted to give something back to the community but i never had time to do so. Now i´m lucky to participate at the GSoC 2021 and spend my summer on Open Source work.

Why this Project?

I´ve grown up in an rural area in Thuringia and we always struggled to get a proper, affordable internet connection. The wired (DSL) connection was always slow and the 4G alternative was pricey and the data volume is limited. Luckily though, there are non-profit organizations who provide fast and affordable internet access to all of it´s members.
So when i heard about this project, i wanted to contribute to the Freifunk community as well as the Evernet community.

Evernet

Evernet is a community based rural mesh network based on Freifunk principles organizes as a cooperative since 2008. Across five villages based in Thuringia/Germany, the Evernet community network consists of 110 participating households that run an OpenWrt based Freifunk mesh IEEE 802.11n,ac node on their rooftops and several OpenWrt based access points within the house as access network. The Evernet core network is build on a dedicated backbone infrastructure (5GHz, 24GHz & 60GHz P2P links) between mesh nodes to increase the overall performance.

Motivation

The Evernet – Freifunk mesh is driven by a strong technical networking team. It is focused on a constant maintained network infrastructure and OpenWrt software state following current trunk. The maxim to keep the mesh as fast as radio technologies evolves does involve a cyclic upgrade and update process. Currently this includes just a smoke test with a set of targets placed on a desktop. They follow the pace of OpenWrt trunk development with the goal and commitment to help finding and fixing kernel/driver/config issues and bugs. Especially those that appear on their Freifunk mesh routers while transmitting real WiFi user traffic do lack efficient tools for testing and troubleshooting before going productive with a new Freifunk OpenWrt image.

Goal

Transform the real topology with all of it´s devices and routes into a virtual (digital) twin with which you can perform test and firmware upgrades to ensure full functionality before testing in productive environment.

What we have done so far

We discussed and developed a structure for the project with several milestones to achieve. After that, i gathered information about related work and evaluated whether they are relevant/suitable for this project. I´ve also set up a test environment, tested OpenWrt with Qemu and several management tools.

What´s coming next?

  • determine a management tool for 100+ VM´s and OpenWrt Devices
  • figure out how to fetch and prepare topology information from routing daemons

See you next time with new advances about the project! 😊

Thank you for reading.
Paul ✍️

[GSOC’21] JSON Schema WEBUI Generator

Prologue

Hello there, Major objective of this project is to update the JSON schema of the API generator tool and other tools to the latest version (2020-12 not perfectly sure) and integrate the schema with a WebUI generator framework to generate HTML forms.

Prior

Currently, JSON Forms is being used to generate the forms from a JSON Schema of version draft 3 for the API and other tools.

Here is the form(API Generator) generated by the JSON Forms, Which currently uses JSON Schema of version draft 3 to generate the forms.

This API generator simply generates a JSON file for the API.

This also has several other fields, which contains specified data about the community.

Discrepancy

As the JSON schema versions have been updated to 2020 – 12, but the current schema of the API and other tools is still at version draft 3. Updating the schema to the latest version is no such big deal. but there is an inconsistency with the JSON Forms as it only supports up to the draft version 3 of JSON Schema.

Viable Way-out

In order to update the schema to the latest version, I have to find a WEBUI generator framework or tool that generates HTML forms from the latest version of the JSON schema.

But Unfortunately, there is no tool or framework that generates forms from the latest schema version 2020-12.
As it is officially mentioned here. Then I had to limit myself to the previous versions, so my mentor Andi suggested choosing draft 7 as our base version for our tests and implementations.
Then I had to choose a framework that supports version draft 7 and above so that we can update the schema to higher versions in the future by considering the support and compatibility of the WEBUI generator.

Frameworks

I have chosen several frameworks based on the version support and compatibility of the frameworks to integrate the schema and test out the results.

UI Schema for React

The first framework I want to try out is UI Schema for React. because the official documentation of the JSON schema states that, this framework supports the most recent version of schema draft(2019-09) but with limitations.

Apart from this, it has this pretty decent documentation here.

React JSON Schema Forms (mozilla)

Next, I have this, while testing on the playground demo, This doesn’t support $ref. But yet I want to give it a try. Its documentation is here. It seems this has some limitations.

Restspace Schema Form (MIT)

This is something cool, This doesn’t depend on the versions of the schema but this depends on the features of the schema. All the supported features are here. As I see It supports everything, which might be in our schema, and I could not able to find good documentation for this framework yet.

JSONForms (jsonforms.io) (EclipseSource)

This supports version draft 7 of the JSON schema. It has documentation here. I see this is an extension to the current JSON Forms used by the API and other tools.

Targets

  • Developing the Schema to the latest version (taking draft 7 as base version).
  • Choosing a Frameworks (mostly UI Schema for React).
  • Integrating the updated schema with the framework to generate the forms.
  • Examining the forms (validating input data and functionality of the forms).
  • Try using a higher version of schema, and test out all the functionality.
  • Finding and resolving the bugs.
  • Updating all the tools (using the schema).
  • Final testing for all the tools using new generator and updated schema and resolving bugs if any.

~ Shiva Shankar Genji aka sh15h4nk

OpenWrt Device Page – GSoC 2021

Greetings everyone! 🎉

I am Aditi. And this summer I will be working on the project “OpenWrt Device Pages”. In this blog post I’d like to talk a little about me, my project and my first week!

About me

Hey!!👋
I am Aditi Singh, a Computer Science student from India. I have been studying programming since past 3 years.
After a little exploration, finally, out of so many appealing domains, I found the one for me – Web Development.
I’ve been working on web development for past 6 months. In January, I heard about open source from a college senior. The idea of writing hundreds of lines of code which can be used by thousands of people piqued my interest. The best part being people did it just for their love of coding and contributing to something bigger than themselves. So after a little bit of struggling with my impostor syndrome for a while, I gathered up the courage to start contributing to open source.

Open Source can be a little overwhelming to begin with but then it turned out to be an absolutely amazing experience. Never ever before I’ve had such a supportive and encouraging environment.
Later in March I found out about GSoC, and through GSoC came across – Freifunk. After surfing through hundreds of projects OpenWrt device page was that one idea that sounded fascinating to me and was closely related to my domain.

About OpenWrt

The OpenWrt Project is a Linux operating system targeting embedded devices. Instead of trying to create a single, static firmware, OpenWrt provides a fully writable file-system with package management. It allows you to customise the device through the use of packages to suit any application. Hence, freeing it’s users from application selection and configuration provided by the vendor For developers, OpenWrt is the framework to build an application without having to build a complete firmware around it; for users this means the ability for full customisation, to use the device in ways never envisioned.

About OpenWrt Device Page Project

The main aim of OpenWrt Device Page Project is to create an overview of OpenWrt supported devices to simplify user choice of acquiring new devices. The goal is to evaluate the user needs and plan new device pages based on the user requirements to make it convenient for users to select right devices. Since, OpenWrt has a lot of data it becomes overwhelming for new users to find suitable devices that caters to their needs. So,to simplify the project can be broken down into two major sub-tasks:

  1. Creation of input form from a JSON Schema to simplify the process of adding device metadata to the github repository.
  2. After creation of input form, the second step is to render the device pages with search masks, allowing users to search specifically for devices with certain features like USB port, WiFi6 etc.

The first week of GSoC

After the community bonding period, we have been working on creating atomic tasks for the project along with the mentors with weekly milestones. The first task is to create a pretty input form to store device metadata into a github repository.
We have a basic input form ready from the JSON Schema implemented using React JSON Schema form. The RJSF community has been helpful in providing assistance to desired functionality. Upcoming major tasks include, modifying the input form to allow auto-fill and info button functionalities.

Apart from this I had to get an overview of Jekyll/Hugo functionality, understanding how YAML works to help with the project later on!

It has been quite a learning experience and I am looking forward to achieving more amazing things this summer with Freifunk! 🎉

Android native app for network selection capability in LibreMesh routers – Overview

Hello! I’m Tomás Assenza. I work on the “Android native app for network selection capability in LibreMesh routers” project with the Altermundi association. I’ll talk about what Libremesh is and why we want to make an app for network selection.

Introduction

LibreMesh is an operating system that works on some Tp-Link routers and LibreRouters, and It’s a practical solution to provide networks to social organizations. These social organizations usually give access to the web to users that only had mobile data networks before. The most practical object that they generally use is a smartphone to connect to the LibreMesh routers.

The issue

Android usually does a “network switch” between Wi-Fi and mobile data considering if the first one provides or not the Internet. The problem with this feature is that if the users have an internet problem, they would not have the possibility to access some LibreMesh internal address to know the trouble and report it to the organization.

We have the idea to solve this problem through an application with the capability To select from which network it sends and receives data from, making possible the connection between the smartphone and the router even when there isn’t an Internet connection.

Who am I? What are my motivations for the project?

I’m a System Engineering student at the Santa Fe Regional of the National Technological University (Universidad Tecnológica Nacional – Facultad Regional Santa Fe). I work as a young teacher of the subject “Algorithms and Data Structures” and in two R+D projects, one about making software tools for programmers with visual disabilities and the other one about developing online simulators for the subject of ‘Chemistry’ by helping the students to experience chemical experiments even during the Covid-19 pandemic.

I always liked to learn how digital communications worked, but they also seemed far away from my profession and career. Considering this, I thought that the GSoC was an opportunity to learn new concepts and help communities with open-source software.

First meeting and objectives for this week

During the last week, we did a meeting to establish objectives for this week. These are:

  • Install the Android Studio IDE.
  • Make an application that can show the local address of the device.
  • Make an application that can show if the device is connected or not to the LibreMesh network (simulating through a ping to a random address).

And the results are:

Github Project

Next objectives:

  • Change the ping-based detection.
  • Define a strategy to connect to the router in case that the app detects that the device is or not connected to the LibreMesh network.
  • Define the scope of the app

LibreMesh Pirania UI – An Overview

About me

Hello there! I am Angie Ortiz Giraldo, one of the students selected for Google Summer of Code 2021, I’m very happy for have this opportunity and share this overview about my GSoC project. In this project I will be working with LibreMesh organization, a sub-organization of Freifunk in this GSoC. I am interested in software development and Community Networks environment. In this field, I have worked in different projects about Community Networks in Colombia that have implemented LibreMesh for their networks. For this reason, I am interested in improve and expand LibreMesh functionalities in some way.

About LibreMesh

LibreMesh is a modular framework for creating OpenWrt-based firmware for wireless mesh nodes. Several communities around the world use LibreMesh as the foundation of their local mesh firmwares. The project includes the development of several tools. The firmware is the main piece and allow simple deployment of auto-configurable multi-radio mesh networks. If you want to know more about LibreMesh you can go to the project website.

My GSoC Project

The main idea of this project seeks to improve the implementation of the administration interface of the Pirania captive portal which is implemented in LibreMesh, a plugin used in different Community Networks. I propose to divide the project in three important pillars: Solution design, Coding and Documentation. Every stage will have different task to do, and some deliverables.

Deliverables

  • Develop an UI proposal for the Pirania captive portal.
  • Plugin for the LimeApp that implements the UI with the required functionalities.
  • Coding tests for the functionalities implemented.
  • Write blog posts about different project stages.
  • Write documentation about features, and how to add plugins to Lime-App.

And more!

To sum up, this in a first approach about the project, but I hope to share some advances soon 🙂

Thanks for reading,

Angie.

[GSoC’21] Irdest Android Client – Overview

Hello everyone, I am Ayush Shrivastava, one of the students selected for Google Summer of Code 2021 for Irdest sub-organization under the umbrella organization freifunk. If you’re wondering which topic/project the blog is focused on, then you may give it a look here!

Irdest

Well, if you don’t know, then let me first introduce what Irdest(irde.st) is and what it does/supports. So, Irdest is a software suite that allows users to create an internet-independent, decentralized, wireless, adhoc mesh network. It removes all the dependencies of the user from a specific single service and enables users to create a mesh of their own. In this network mesh, users can communicate to each other via messaging(both, individual and Room) and placing voice calls. Irdest network mesh service also allows users to share files between them without relying on the internet. And also when a user enters the Irdest mesh network(note that user needs not connected to the internet i.e., without having an IP address, it can be a P2P connection over Wi-Fi or Bluetooth), their IP address is completely hidden thereby maintaining privacy andreducing possible breaches that may occur. In the irdest network mesh, as soon as a user enters the network, they are assigned an ID, which is a unique cryptographic key that helps identifying the users. All the messages/calls/file transfers made in Irdest network mesh are completely end to end encrypted, again a positive sign from security & Privacy perspective. Currently, Irdest is supported for Linux & Android devices. For android, it is pretty much in incubation state and there are a bunch of points & directions where we can improve. This summer, I aim to implement some features on android client from the irdest upstream.

WARNING: This blog has a tons of mentions of FFI, you may get overwhelmed by the term, so it stands for Foreign Function Interface.

Current Progress & FFI Overview

So this was what Irdest is all about and a higher level overview of how things really work in it. As mentioned previously, the android client is pretty much in its incubation state, so we wish to implement it in a clean & modern way. So, since we want to make use of features supported by Irdest(in upstream) on the android application, therefore we need to maintain/create a binding or kind of a link between core Irdest code that makes all this internet independent network mesh possible & application codebase(to call those methods from). The point is that the core Irdest code that supports these functionalities is written natively in Rust, and we we want to utilize this pre-written library on android, without writing it again(in Kotlin)for android. So to make it possible, we’re going to write an FFI Layer(I’ll write in detail about FFI in some other post, but for the time being it is sufficient to know that by FFI we can call functions written in a specific language(mostly native languages like C++, C, Rust) from some other languages). This FFI layer currently exists in the module, but it is a bit old-fashioned, so in the initial phase of my coding period I plan and propose to rewrite this layer with best possible modern day FFI practices and following some standard references. The most crucial part of this project is this FFI layer, because it is the fundamental building block for the android project, once it is set and ready, then we’ll be able to use the functions and services provided in the native Irdest library written in Rust and extend our further development process via writing the application.

FFI Implementation – A Blueprint

The FFI already is quite notorious for the undefined behavior and on top of it, there is very less official documentation available on Rust-Kotlin FFI so this makes it more tricky & challenging to implement, but for the course of our development process, we’ll be following and taking inspiration from how Mozilla have implemented FFI integration between their existing rust library and their firefox android client. Another instance where they use Rust-Kotlin FFI is their Glean project(a telemetry service). I’ll be taking most of the inspiration by and practices being followed in Glean, as a result of which we’ll be writing FFI bindings on our own. After once we’ve written FFI layer, my next step will be to test it again thoroughly and make sure it works perfectly and does not has any bugs residing.

Further Development:

Once we have a robust FFI layer ready, then I’ll move to core android development process, that’ll entail writing UI for the application, architecting it properly, modularizing the application codebase and following the Modern Android Dev practices. Well this will be a relatively easier job to do in comparison to that of writing FFI layer xD
My next step after this would be implementing the chat service in the application. We’ll focus in its detailing after we’re done with the very first milestone, the ”FFI Layer”. We’ll see the plan of action for chat service in a separate blogpost, after the first coding phase : )

Thanks for reading!
Cheers, Until next time we meet!

~Ayush Shrivastava

OpenWRT PPA @ Google Summer of Code 2021

File:OpenWrt Logo.svg - Wikimedia Commons
Mentor : Benjamin Henrion

Hey everyone , hope everyone is doing fine. I am delighted to have been given this opportunity to work for OpenWRT project under Freifunk.

A little about myself

I am currently a sophomore at Birla Institute of Technology, Mesra. I have always been interested in the technical aspect of the world, as to how from the stroke of a keyboard does one get to build/execute such seemingly daunting tasks with such ease. 

The curiosity led me to the beautiful world of automation and containerisation along with managing these tasks at scale.

Apart from being a tech-nerd, I have always loved to explore the great mysteries of life, watch football, and play Golf among many others.

I am always ready to talk about the above at any time, so feel free to contact me.

Project Overview

OpenWRT is a Linux distribution for off the shelf Wi-Fi routers. People who want to make and distribute their personal packages, often for development purposes, so far have the option to build the whole firmware from zero, but very few people use the OpenWRT SDKs.

The idea behind this project is to provide the user with an interface where they can simply put in their GitHub repo URL, which can be then compiled and built into an executable Docker Image fit for Launch in k3d cluster, and also available locally.

Benefits to Community

This project will be beneficial for users since now they won’t have to build everything from scratch, and now only provide the URL of their source code.

Additionally, it will also try to achieve the following goals :

  • Autonomy: no external person is needed for the platform.
  • Build with many different targets like  brcm2708, ar71xx, x86, sunxi, etc…
  • Rebuilding after every commit can become possible.

And many more …..

Deliverables

  1.  A front-end made using flask and python, where the user just needs to login and enter his/her repo URL.
  2. A backend made up using python and shell scripting for creating Docker Image based on the provided source-code.
  3. A database that stores this build docker image, made using MY-SQL database.
  4. A backend service integrating the above with k3d cluster for hosting docker container made using the container.

Next steps

I would be starting from implementing scripts for setting up the entire environment as well as working on the deployment of the newly created docker image on the local k3d cluster. I will also be in touch with my mentor , regarding the execution cycle and scope for improvement of the project.

Our Google Summer of Code Projects

Google Summer of Code Logo

This year, we were finally accepted back as an organization at the Google Summer of Code. In the meantime, the application and selection phase is over. Google has given us 9 project slots. We didn’t make the decision easy and chose the best ones out of the applications.

Organizations

Freifunk manages projects for different initiatives as an umbrella organization. In this Google Summer of Code we have Retroshare, irdest, OpenWrt, LibreMesh and freifunk itself on board.

Timeline

Currently we are in the community bonding period. During this time, all preparations are made so that the students can do their tasks. Also, they should dive into the communities and get to know people and tools.

Coding officially starts on June 7. All projects must be completed by August 23.

Our Google Summer of Code projects in 2021

TitleOrganizationStudent
OpenWRT PPAOpenWrtNeelaksh Singh
Irdest Android ClientirdestAyush Shrivastava
Android native app for network selection capability in LibreMesh routersLibreMeshTomás Assenza
RetroShare WEBUIRetroShareAvinash
Freifunk Digital Twin – test on your virtual mesh before going productiveOpenWrtpschreiber
OpenWrt Device PageOpenWrtAditi-Singh
Freifunk Radio Ressource Management with IEEE 802.11vOpenWrtValerius_B
Updation of the Json Schema to latest version (2020-12) along with the form generation and validation with the updated schema of the toolsfreifunksh15h4nk
LibreMesh Pirania UILibreMeshAngie Ortiz Giraldo

You can find more details for every projects on our GSoC dashboard.