mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-26 18:59:22 +01:00
1d76163fb1
All frames need their own unit-test.
413 lines
13 KiB
Plaintext
413 lines
13 KiB
Plaintext
Background
|
|
==========
|
|
|
|
- Priority scale: High, Medium and Low
|
|
|
|
- Complexity scale: C1, C2, C4 and C8. The complexity scale is exponential,
|
|
with complexity 1 being the lowest complexity. Complexity is a function
|
|
of both task 'complexity' and task 'scope'.
|
|
|
|
The general rule of thumb is that a complexity 1 task should take 1-2 weeks
|
|
for a person very familiar with the codebase. Higher complexity tasks
|
|
require more time and have higher uncertainty.
|
|
|
|
Higher complexity tasks should be refined into several lower complexity tasks
|
|
once the task is better understood.
|
|
|
|
|
|
mac80211_hwsim
|
|
==============
|
|
|
|
- Add support for HWSIM_CMD_SET_RADIO command
|
|
|
|
To allow modifying an existing radio, add the HWSIM_CMD_SET_RADIO. The
|
|
first possible feature should be to emulate the hardware RFKILL switch.
|
|
|
|
It might be required to add a HWSIM_ATTR_RADIO_HW_RFKILL attribute flag
|
|
to the HWSIM_CMD_NEW_RADIO to enable virtual radios with a hardware
|
|
level RFKILL switch.
|
|
|
|
Priority: Medium
|
|
Complexity: C1
|
|
|
|
- Allow configuration of MAC address or list of MAC addresses
|
|
|
|
The radios are auto-generating a fake MAC address. It would be useful
|
|
to allow specifying a MAC address to be used. In certain cases it might
|
|
be also useful to provide a list of MAC addresses so that for example
|
|
with secondary interfaces these can be used.
|
|
|
|
Priority: Low
|
|
Complexity: C2
|
|
|
|
- Move mac80211_hwsim.h header file to UAPI includes
|
|
|
|
The mac80211_hwsim.h is the public API description of this netlink
|
|
interface and thus it should be provided via UAPI includes.
|
|
|
|
For this work work the mac80211_hwsim.h header needs to be modified
|
|
so that it also compiles from userspace. At the moment it throws
|
|
errors. And it needs to become part of the UAPI headers of the
|
|
Linux kernel.
|
|
|
|
In addition it should provide HWSIM_GENL_NAME that provides the
|
|
generic netlink "MAC82011_HWSIM" family string.
|
|
|
|
Priority: Low
|
|
Complexity: C1
|
|
|
|
- Provide kernel option to allow defining the number of initial radios
|
|
|
|
By default the mac80211_hwsim modules creates 2 radios by default unless
|
|
it is overwritten with the radios=x module parameter.
|
|
|
|
To allow loading the mac80211_hwsim by default and even with accidental
|
|
loading of the module, it would be good to provide a kernel configuration
|
|
option that allows changing the default value here.
|
|
|
|
For our testing we want to load mac80211_hwsim without any radios. Maybe
|
|
this should be the default for the new kernel option.
|
|
|
|
If the default of initial radios can be changed to zero, then it is also
|
|
possible to add MODULE_ALIAS_GENL_FAMILY to support auto-loading of
|
|
the mac80211_hwsim kernel module.
|
|
|
|
Priority: Low
|
|
Complexity: C1
|
|
|
|
- New configuration options for radios
|
|
|
|
At the moment the radios created are all equal and feature rich. However
|
|
for testing we want to create radios with different emulated hardware
|
|
capabilities. Provide new attributes or flags that allow enabling or
|
|
disabling certain mac80211 features.
|
|
|
|
For example AP mode, P2P mode, number of interface combinations, TDLS
|
|
support, number of Scan SSIDs, supported ciphers and so on.
|
|
|
|
Priority: Low
|
|
Complexity: C2
|
|
|
|
|
|
cfg80211 / nl80211
|
|
==================
|
|
|
|
- Disconnect from network / station when client crashes
|
|
|
|
When associating or connecting to a network, it should be possible to
|
|
bind this transaction to a specific netlink client. So that in case
|
|
this client terminates without, any connection will be also terminated.
|
|
|
|
This should affect NL80211_CMD_ASSOCIATE and NL80211_CMD_CONNECT. It
|
|
seems that this is not needed for NL80211_CMD_AUTHENTICATE since that
|
|
command will eventually time out, but it might be a good idea to even
|
|
support it there.
|
|
|
|
Maybe a new attribute similar to NL80211_ATTR_IFACE_SOCKET_OWNER should
|
|
be used for this behavior.
|
|
|
|
Priority: High
|
|
Complexity: C4
|
|
|
|
- Add missing support for NL80211_CMD_GET_INTERFACE filtering
|
|
|
|
The NL80211_CMD_GET_INTERFACE command description indicates that you
|
|
can filter results based NL80211_ATTR_WIPHY. This feature has never
|
|
been implemented.
|
|
|
|
Either remove that feature from the description since it does not exist
|
|
or actually implemented the filtering on wiphy. Johannes indicated that
|
|
fixing the description might be the better approach. If the feature is
|
|
easy to add, then it should be added. However if filtering on wiphy is
|
|
a rather complicated task, then better just update the description to
|
|
match the reality.
|
|
|
|
Priority: Low
|
|
Complexity: C2
|
|
|
|
|
|
Wireless monitor
|
|
================
|
|
|
|
- Add support for Information Element (IE) decoding
|
|
|
|
Several netlink attributes provide binary blobs representing IEs. Add
|
|
support for decoding them inline using the src/ie.c infrastructure.
|
|
|
|
Priority: Medium
|
|
Complexity: C1
|
|
Owner: Patrik Flykt <patrik.flykt@linux.intel.com>
|
|
|
|
- Add support for PACKET_RECV_OUTPUT socket option of AF_PACKET
|
|
|
|
Instead of having to switch every interface manually into promiscuous
|
|
mode, it would be useful to set PACKET_RECV_OUTPUT to receive also
|
|
the traffic that leaves the system.
|
|
|
|
This would make tracing PAE / EAPoL traffic easy and provides better
|
|
sniffing capabilities.
|
|
|
|
Unfortunately, PACKET_RECV_OUTPUT logic is not implemented at all in
|
|
the kernel. So, first implement it in the kernel, and then use it in
|
|
nlmon.c as a set_sockopt option.
|
|
|
|
Priority: Low
|
|
Complexity: C8
|
|
|
|
- Subscribe to all nl80211 multicast groups at startup
|
|
|
|
It seems the nlmon packets are limited to actual subscribed mutlicast
|
|
groups. To get a complete picture of all the nl80211 commands and
|
|
events, it is required that iwmon adds membership to all multicast
|
|
groups that the nl80211 lists.
|
|
|
|
This means that the netlink socket used for resolving nl80211 family
|
|
name needs to be kept open and actively processed since it will also
|
|
receive these multicast events. However the event itself can be dropped
|
|
since the one from nlmon with the proper kernel level timestamps should
|
|
be taken into account.
|
|
|
|
An alternative is to fix the netlink_deliver_tap() function in the
|
|
kernel netlink layer to not be affected by the broadcast filtering.
|
|
|
|
Priority: Medium
|
|
Complexity: C1
|
|
|
|
- Add support for receiving kernel side timestamps
|
|
|
|
When packets are received from nlmon, they should be marked with an
|
|
appropiate timestamp. Enable SO_TIMESTAMP socket option.
|
|
|
|
Priority: Medium
|
|
Complexity: C1
|
|
|
|
- Colorize the command, response and event packets
|
|
|
|
Use terminal colors to separate command, response and event packets
|
|
with different colors.
|
|
|
|
Priority: Medium
|
|
Complexity: C1
|
|
|
|
- Add support for writing PCAP files
|
|
|
|
The new -w <file> option should allow for writing PCAP files with the
|
|
Linux SLL link type.
|
|
|
|
When creating PCAP files using tcpdump a lot of extra information from
|
|
all netlink sockets are written. This write support should only write
|
|
the information related to nl80211. However parts from the generic
|
|
netlink control channel from resolving the nl80211 family name must
|
|
be included as well.
|
|
|
|
It might be also beneficial to include RTNL messages related to the
|
|
wireless network interfaces. Currently these are all filtered out.
|
|
|
|
Priority: Medium
|
|
Complexity: C2
|
|
|
|
- Track RTNL messages for wireless network interface
|
|
|
|
The RTNL messages indicate operation state changes and with are also
|
|
relevant for a complete picture of the userspace kernel communication.
|
|
|
|
However the complicated part is to identify which network interfaces
|
|
are wireless related and which are not. Obviously the non-wireless
|
|
network interfaces need to be filtered out.
|
|
|
|
Priority: Medium
|
|
Complexity: C2
|
|
Owner: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
|
|
|
|
- Handle netlink core control messages correctly
|
|
|
|
The core control netlink messages for NLMSG_ERROR and NLMSG_DONE are
|
|
not decoded properly. Add detailed decoding and also decode all the
|
|
flags that are related to the core control messages.
|
|
|
|
Priority: High
|
|
Complexity: C1
|
|
Owner: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
|
|
|
|
- Decode netlink REKEY_DATA attribute
|
|
|
|
According to nl80211, NL80211_ATTR_REKEY_DATA is a 'nested attribute
|
|
containing the information necessary for GTK rekeying in the device'. The
|
|
data seems to contain TK, GTK and Replay Counter attributes. However, the
|
|
format of the 'nesting' is not specified.
|
|
|
|
Priority: High
|
|
Complexity: C1
|
|
|
|
|
|
Wireless simulator
|
|
==================
|
|
|
|
- Add support for builtin wireless access point emulator
|
|
|
|
When creating a pair of mac80211_hwsim radios, allow one to operate as
|
|
access point. The hwsim utility will emulate the access point on the
|
|
second interface for as long as it is running. Which means that from
|
|
the first interface it is possible to scan and connect to this access
|
|
point using standard wireless tools (including iwd and iwctl).
|
|
|
|
Code for the AP mode can be shared from iwd feature for access point
|
|
operation once that has been implemented.
|
|
|
|
Priority: Medium
|
|
Complexity: C8
|
|
|
|
|
|
Wireless daemon
|
|
===============
|
|
|
|
- Building 802.11 authentications management frames
|
|
|
|
The other way round, provide a core API to encode an authentication
|
|
or deauthentication frame from a generic structure representing the
|
|
MPDU.
|
|
|
|
Priority: High
|
|
Complexity: C2
|
|
Owner: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
|
|
|
|
- Handle the relevant logic of the authentication management frames
|
|
|
|
When an authentication management frame is received, such frame needs
|
|
to be understood and handled properly.
|
|
|
|
Priority: High
|
|
Complexity: C2
|
|
|
|
- Add support for 4-way handshake authentication and key generation
|
|
|
|
The 4-way handshake key generation for pre-shared keys (PSK) should be
|
|
a standalone feature (independent from EAP).
|
|
|
|
It is also important to have extensive unit test support for 4-way
|
|
handshake messages and key generation itself.
|
|
|
|
Priority: High
|
|
Complexity: C4
|
|
Owner: Denis Kenzior <denkenz@gmail.com>
|
|
|
|
- Add support for EAP based authentication and key generation
|
|
|
|
Provide full EAP support for enterprise wireless. However it should be
|
|
possible to build wireless daemon without EAP support.
|
|
|
|
It is also intended that this EAP code can be utilized as shared library
|
|
and be beneficial for systemd-networkd for wired authentication.
|
|
|
|
Priority: Low
|
|
Complexity: C8
|
|
|
|
- Create a document to doc describing general architecture and relation
|
|
between different objects.
|
|
|
|
Current understanding is that diffrent relation between elements
|
|
looks probably like this:
|
|
Manager->Wiphy->NetDevice->AvailableNetwork
|
|
|
|
Wiphy is the actual physical device, NetDevice is the network interface
|
|
and AvailableNetwork is {SSID, security} combo. Each network can have
|
|
a list of BSSs.
|
|
Consider also multi-wifi device scenarios. If user has multiple USB
|
|
WiFi dongles and switches between those cards, all previously configured
|
|
networks should still be available.
|
|
|
|
Priority: High
|
|
Complexity: C2
|
|
|
|
- Centralize scanning logic and handling into scan.c.
|
|
|
|
There can be passive, active, listening (P2P) scanning to handle.
|
|
We need to handle background scan for roaming. Also scheduled scan
|
|
might need to be simulated when hw does not support it.
|
|
All scanning operations should be cancellable.
|
|
|
|
Priority: High
|
|
Complexity: C4
|
|
|
|
- Implement agent support in iwd.
|
|
|
|
If something needs to be asked from user, like passphrase etc.
|
|
a DBus agent interface can be registered by the user.
|
|
This is similar as what is implemented in ConnMan and BlueZ.
|
|
|
|
Priority: Medium
|
|
Complexity: C2
|
|
|
|
- Implement ARC4 cipher in iwd
|
|
|
|
ARC4 is used to encrypt EAPoL frames that are exchanged during WPA
|
|
authentication.
|
|
|
|
Priority: High
|
|
Complexity: C1
|
|
Owner: Denis Kenzior <denkenz@gmail.com>
|
|
|
|
- Implement AES cipher in iwd
|
|
|
|
AES is used to encrypt EAPoL frames that are exchanged during WPA2
|
|
authentication.
|
|
|
|
Priority: High
|
|
Complexity: C1
|
|
Owner: Denis Kenzior <denkenz@gmail.com>
|
|
|
|
- Coalesce BSS and security parameters into Network object
|
|
|
|
Coalesce all the BSS with the same SSID and security parameters into one
|
|
Network object in wiphy.c
|
|
|
|
Priority: High
|
|
Complexity: C2
|
|
Owner: Jukka Rissanen <jukka.rissanen@linux.intel.com>
|
|
|
|
- Add utility to create netlink REKEY_DATA attributes
|
|
|
|
The REKEY_DATA needs to be uploaded to the driver so that if re-keying is
|
|
triggered by the AP, the TK is updated properly. Additionally, helper
|
|
function to send NL80211_CMD_SET_REKEY_OFFLOAD command is required.
|
|
|
|
Priority: High
|
|
Complexity: C1
|
|
|
|
- React to NL80211_CMD_SET_REKEY_OFFLOAD events
|
|
|
|
This command can be sent to userspace whenever a re-key transaction has
|
|
occurred. The information contains the Replay Counter. The Replay Counter
|
|
used by iwd needs to be updated with the new value.
|
|
|
|
Priority: Medium
|
|
Complexity: C1
|
|
|
|
- Add utilities to set Transient Key into the driver
|
|
|
|
Once the 4-Way handshake is complete and the TK is generated, it must be sent
|
|
to the kernel so that normal traffic can be encrypted and decrypted
|
|
appropriately. This seems to be accomplished by NL80211_CMD_NEW_KEY
|
|
and NL80211_CMD_SET_KEY commands.
|
|
|
|
Priority: High
|
|
Complexity: C1
|
|
|
|
- Add unit test for each of the mpdu management frame type
|
|
|
|
Currently, only authentication and deauthentication frames have
|
|
proper unit test. Update unit/test-mpdu.c to handle other frames as
|
|
well.
|
|
|
|
Priority: Medium
|
|
Complexity: C1
|
|
|
|
Client
|
|
======
|
|
|
|
- Remove kdbus left-overs, and implement the client properly with ell
|
|
library.
|
|
|
|
Priority: Low
|
|
Complexity: C1
|