The AP periodically asks all clients in the environment with what signal
strength they see the other APs. Instead of the RSSI, which can only be
collected if the client scans, the 802.11k values are much more
up-to-date.
In the future it will no longer be necessary to exchange all
probe request frames with all APs, which will significantly reduce the
message overhead and complexity.
Right now there is the issue that clients react very strangely to
becaon requests or they do not react at all.
The client will hopefully report back the RCPI or the RSNI.
Theoretically the values can be converted into each other and so
compared, but this did not work well in self-experiments. Therefore, we
compare the values like the rssi.
We introduce
- rcpi: value that is added to the AP score if rcpi is above rcpi_val
- rcpi_val: threshold that indicates a good rcpi value
(between 0 and 255)
- low_rcpi: value that is added to the AP score if rcpi is under
low_rcpi_val (use a negative value)
- low_rcpi_val: threshold that indicates a bad rcpi value
(between 0 and 255)
- rsni: value that is added to the AP score if rsni is above rsni_val
- rsni_val: threshold that indicates a good rsni value
(between 0 and 255)
- low_rsni: value that is added to the AP score if rsni is under
low_rsni_val (use a negative value)
- low_rsni_val: threshold that indicates a bad rsni value
(between 0 and 255)
I have to find out values for each parameter myself. So please take a
look at the dawn-hearingmap and if you have a good setting, you can send
it to me.
The rrm_nr_get_own call returns an array. We need the 3rd value. We do
not need to call blobmsg_data before blobmsg_get_string to extract the
value. Additionally this causes strange behavior where an offset in the
string is accessed.
The datastorage-refactoring changes an already existing entry instead
of inserting and deleting it. However, it was forgotten to adopt
some information from the new probe entry.
The ht_capabilities and vht_capabilities are now synced correctly.
RCPI and RSNI is now correctly synced.
A new config option allows to add a server ip
option server_ip '10.0.0.2'
However, this server does not send anything back. Therefore it is not
possible to change the node configuration. This will probably be added
soon. The main goal of this commit is to allow monitoring of all nodes
in a network with DAWN, e.g. clients, channel utilization, ...
Also a network option (3) has been added which allows to use TCP but
not to announce your daemon in the broadcast domain. This allows you to
create a monitor-only node that holds only the local information and
forwards it to the central server.
A monitor-only node could be configured like
option server_ip '10.0.0.1'
option tcp_port '1026'
option network_option '3'
Another possible config is
option server_ip '10.0.0.1'
option tcp_port '1026'
option network_option '3'
Here, the node shares information with a central server, which can be
located outside the broadcast domain. Nevertheless, it also shares
information within its broadcast domain and can therefore perform
client steering.
It can happen that the callback is executed but there are 0 bytes to read. If this happens we leave the while-loop.
Ian Clowes:
- fix
Nick:
- commit message
If not all of the message was in the stream after the header was read,
the next bytes remain in the buffer and only the header is removed from
the stream. The next time the callback is called, something that is not
a header will be interpreted as a header, resulting in arbitrary memory
allocations.
Ian Clowes:
- code
Nick:
- commit message
- fix processing of messages
general: fixed whitespace and typos
memory audit: on by default in build
memory audit: enhanced audit info
ubus: refactor denied_req expiry to assist datastorage testing
datastorage: fixed performance bug in handling of linked list entry expiry
datastorage: fixed SEGV in skip list handling
test_storage: added linked list memory allocation stress tests
memory auditing: refined auditing code and use in main code
hearing map: fixed bug causing it not be be built correctly
datastorage: fixed memory leak from linked list handling
datastorage: convert to linked lists and optimise use of pointers
datastorage: AP, client, probe, auth entry and MAC list converted to
linked list
datastorage: functions adjusted to take pointers as parameters
datastorage: optimised sort and search functions added
mac_utils: struct dawn_mac added and comparisons adjusted
general: adjust code to call new datastorage functions
test_storage: large scale 100 AP, 3000 client, 70k probe added
[fix commit]
Signed-off-by: Nick Hainke <vincent@systemli.org>
datastorage (bug fix): deleting expired array item would fail to test next item
test_storage: extended to cover all required datastorage entry points
test_storage: added ability to read script file
test_storage: added new and revised test scripts
TESTING.md: added to describe testing approach
general: added various TODO notes on things to come back to
general: revised #includes to make each "self-compiling"
general: revised #includes to minimise usage across source files
general: moved declarations and defintions to simplify and rationalise code
datastorage: refactor to support scalability testing
datastorage: made independent of time() calls to support testing
datastorage: fixed redundant use of both SORT_NUM and SORT_LENGTH defines
datastorage: fake kicking to test clients move between access points
msghandler: new module to reduce compile time interdependencies
mshhandler: (issue #100?) fixed SEGV memcpy() in dump_client() using strncpy()
ubus: merged uface into ubus
mac_utils: new module for MAC address utilites
test_header: added target to help #include rationalisation
Tested-by: Nick Hainke <vincent@systemli.org>
in luci-app-dawn, if eval_probe_req is not ticked, eval_probe_req would be -1.
however, in c language, !(-1) is false.
Since only zero in if statement is false, non-zero number is true.
The OpenWrt config needs to have CONFIG_SRC_TREE_OVERRIDE enabled in
order to build from the version checked out in the linked source-tree.
This was forgotten when adding the CI and therefore the CI was always
building the version from the packages feed.
This adds a GitHub actions workflow for building DAWN from this
repository using the OpenWrt SDK.
The resulting package is archived as an artifact available to download.
DAWN currently tries to update it's list of TCP socket endpoints using
mDNS when it is configured to use UDP.
Only update the TCP socket list when DAWN is configured to use TCP
sockets.
Fix a identation mismatch along the way.