wimove-oss / wimoved Goto Github PK
View Code? Open in Web Editor NEWWiMoVE Access Point Daemon
Home Page: https://wimove-oss.github.io/docs/
License: MIT License
WiMoVE Access Point Daemon
Home Page: https://wimove-oss.github.io/docs/
License: MIT License
Right now, we are using hostapd's EAPOL-4WAY-HS-COMPLETED
to add the VLAN interface to the bridge.
Using AP-STA-CONNECTED is correct as well and works with Fast Transition.
We should therefore use AP-STA-CONNECTED
for these purposes.
Right now, we link prometheus-cpp
statically for our OpenWRT builds. It would be better to provide prometheus-cpp
in a different package and link dynamically to it. I don't know if we can achieve this or how we can achieve it.
Additionally, we should think about making this functionality optional at compile time to save on disk space.
Currently, we have three different classes, Vxlan
, Bridge
and Link
that all serve the same purpose: freeing the internal rtnl_link *
when destroyed.
We could use one class, Link
instead that receives a rtnl_link *
as a constructor argument and takes care of freeing the link on destruction.
This would also have the advantage of making the Netlink code more readable since all libnl calls except the frees are visible.
We could also use this pattern for the LinkCache
.
In some rare cases, it might happen that something goes wrong when connecting a station to a VXLAN interface. In such a case, we want the station to be disassociated from the AP by hostapd so we can get a clean start and the station can attempt to reconnect again.
Currently, we are still using the Gaffa name in all source code. We need to swap this to WiMoVE.
When we do not receive a message from HostAPD for some time, we send a PING command and expect a PONG.
However, sometimes there are other events that are sent to us before the PONG so that we let the daemon crash even though it shouldn't.
Do proper error handling, i.e. ignore events when VLAN ID outside of correct range
For easier deployment, we should add a configuration option called min_vni
with default value 1
that specified the minimal ID used for VXLAN interface creation.
For some more project information we need the following:
Currently, the naming of Socket
and Socket80211
does not make the differences between these classes clear. We could rename Socket
to something that differentiates itself from Socket80211
.
Our APs have two radios: One for 2.4GHz and one for 5GHz.
We want these APs to be able to send out their network on both frequencies and work with wimoved.
When testing with ubsan
, we get the following error:
src/MacAddress.cpp:22:29: runtime error: shift exponent 32 is too large for 32-bit type 'int'
We should eliminate the undefined behavior in MacAddress::number
.
Currently, we have a configuration option that allows us to set the hostapd sockets to connect to.
However, for easier basic setup, it would be nice to have the option to automatically detect all sockets and load them as configuration.
An implementation suggestion:
hapd_sockdir
directoryglobal
While starting wimoved in OpenWRT 22.03, the following issue is seen. Could you provide some assistance?
wimoved[3265]: [ERROR] 2023-06-07 13:47:43,012 main.cpp:33 - An Exception was thrown that was not caught.
wimoved[3265]: [FATAL] 2023-06-07 13:47:43,013 main.cpp:37 - 14CivetException: null context when constructing CivetServer. Possible problem binding to port.
[WARNING] 2023-06-07 13:47:43,013 main.cpp:37 - Aborting application. Reason: Fatal log at [wimoved/src/main.cpp:37]
Aborted
This issue is reproducible with version v0.0.2 Latest and Development Build: v0.0.3+beta2023-04-26_12.56. Additionally, I reproduced the error in the Linksys models 1200ac and the 1900ac.
Right now, we are only testing manually. With each new feature, the possibility of bugs increases. We should therefore look at possible testing frameworks, pick one and add them to our pipeline.
In separate issues, we can then write tests that test behavior of different subsystems.
The hostapd
event parsing code is delicate since there is no specified protocol, only the hostapd implementation. We should document our assumptions of the message format as tests and verify automally that the code parses the events correctly.
Additionally, we could introduce fuzz testing against our code to check its resistance against invalid input.
The MAX_VNI setting is non-inclusive even though we expect it to be. Thus, there is an off-by-one error in the VNI calculation.
For now, the issue can be solved by simply increasing MAX_VNI by one.
Right now, one job does all those three actions and takes really long. To get feedback faster, run those jobs in parallel.
Currently, the package version is hardcoded to PKG_RELEASE:=1
for our OpenWRT packages.
We should change this version based on the git tag for a release or the commit number for a commit.
Right now, the scripts directory is quite confusing, and the scripts are pretty unorganized. We should rework the scripts and change the directory structure to make adaptions to the packaging easier.
It would be nice if we could generate binaries automatically when we release. These binaries should also be clearly labeled with a commit hash to indicate the exact version that was built.
Right now, we have structured logging with easylogging++, but our usage is inconsistent. We should do the following:
mac=00:00:00:00:00:00 vni=5 iface=vxlan5
For example, we could do: cleanup: deleting interface iface=vxlan5
During testing, we discovered that when using wpa_cli
to forcefully roam from one AP to another, zebra gets stuck in a state that prevents the station from receiving packets. The bridge of the station's VXLAN has learned the MAC address on both ports, although zebra reported that it removed the route. Reconnecting the station or roaming again fixes the issue. We opened an issue in the frr repository. There you find more details and the logs generated by the access points.
When the configuration parser is given a config file that contains a line without =
, it sets the value of the line's contents to itself. For example, take the following configuration file:
hapd_sockdir
This is equivalent to hapd_sockdir=hapd_sockdir
. I would expect this to throw an error since the configuration file is malformed.
While fixing this parsing bug, we should make sure that we don't rely on any undefined behavior, especially not using previous iterators after calling erase()
.
Some days ago on a weekend I observed that the RAM usage on one of the APs increased caused by wimoved.
Today, I also observed that the RAM use on one AP rose to 90% only to then drop back to 20% after I connected. When looking into the logs I found that wimoved had crashed.
Before that, it seems however that the loop worked as expected.
As a first step, we might want to check whether we leak memory somewhere causing these issues. It likely will not be very easy to recreate this scenario.
Right now, we are using a macro IPC_SOCKET_GROUP
to set the correct access rights for the socket that wimoved
opens. This should be configurable at runtime with an option like hapd_socket_group
.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.