mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-10-31 04:57:25 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			343 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			11 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 returning HWSIM_ATTR_RADIO_ID from HWSIM_CMD_CREATE_RADIO
 | |
| 
 | |
|   The HWSIM_CMD_CREATE_RADIO command should return HWSIM_CMD_CREATE_RADIO
 | |
|   on success so that the radio id for the created wiphy can be mapped by
 | |
|   test tools or when having to destroy that radio again.
 | |
| 
 | |
|   Priority: High
 | |
|   Complexity: C1
 | |
| 
 | |
| - Add support for client tracking of HWSIM_CMD_CREATE_RADIO
 | |
| 
 | |
|   When using HWSIM_CMD_CREATE_RADIO command the newly created radio is
 | |
|   not bound to the owner of the netlink socket.  This means that the radio
 | |
|   stays around even after the client quits.  For testing tools it would
 | |
|   be beneficial if the newly created radio could be bound to the lifetime
 | |
|   of the netlink socket.
 | |
| 
 | |
|   Create a new HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE (netlink flag attribute)
 | |
|   that can be given to HWSIM_CMD_CREATE_RADIO to indicate this behavior.
 | |
| 
 | |
|   Priority: High
 | |
|   Complexity: C1
 | |
| 
 | |
| - Rename HWSIM_CMD_CREATE_RADIO into HWSIM_CMD_NEW_RADIO
 | |
| 
 | |
|   Using the name HWSIM_CMD_NEW_RADIO is more fitting on how other pieces
 | |
|   of the wireless system work.
 | |
| 
 | |
|   Rename the HWSIM_CMD_CREATE_RADIO entry in the enum and provde a define
 | |
|   for source level comaptiblity.
 | |
| 
 | |
|   Priority: Medium
 | |
|   Complexity: C1
 | |
| 
 | |
| - Rename HWSIM_CMD_DESTROY_RADIO into HWSIM_CMD_DEL_RADIO
 | |
| 
 | |
|   Using the name HWSIM_CMD_DEL_RADIO is more fitting on how other pieces
 | |
|   of the wireless system work.
 | |
| 
 | |
|   Rename the HWSIM_CMD_DESTROY_RADIO entry in the enum and provde a define
 | |
|   for source level comaptiblity.
 | |
| 
 | |
|   Priority: Medium
 | |
|   Complexity: C1
 | |
| 
 | |
| - Provide multicast events for HWSIM_CMD_NEW_RADIO and HWSIM_CMD_DEL_RADIO
 | |
| 
 | |
|   When adding new radios via HWSIM_CMD_NEW_RADIO then listeners on the
 | |
|   multicast group "config" should be informed.  Same as when an existing
 | |
|   radio gets removed via HWSIM_CMD_DEL_RADIO, send event to "config"
 | |
|   multicast group.
 | |
| 
 | |
|   The multicast group "config" does not exist at the moment and needs
 | |
|   be introduced as well.
 | |
| 
 | |
|   Priority: Medium
 | |
|   Complexity: C1
 | |
| 
 | |
| - Add support for HWSIM_CMD_GET_RADIO command
 | |
| 
 | |
|   Currently it is not possible to list the existing radio created by
 | |
|   mac80211_hwsim.  Use the command to dump a list of radios where each
 | |
|   radio at minimum containts the HWSIM_ATTR_RADIO_ID.
 | |
| 
 | |
|   For the result HWSIM_CMD_NEW_RADIO (previously HWSIM_CMD_CREATE_RADIO)
 | |
|   should be used.
 | |
| 
 | |
|   The dump version should not require any attributes and list all radios
 | |
|   while otherwise the HWSIM_ATTR_RADIO_ID is required to provide details
 | |
|   of a specific radio.
 | |
| 
 | |
|   Priority: Medium
 | |
|   Complexity: C1
 | |
| 
 | |
| - 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
 | |
| ==================
 | |
| 
 | |
| - Fix missing NL80211_CMD_NEW_WIPHY and NL80211_CMD_DEL_WIPHY events
 | |
| 
 | |
|   When new wiphy devices are added or removed ensure that the appropiate
 | |
|   events are send to the "config" multicast group.
 | |
| 
 | |
|   Priority: High
 | |
|   Complexity: C1
 | |
| 
 | |
| - Fix missing NL80211_CMD_NEW_INTERFACE and NL80211_CMD_DEL_INTERFACE events
 | |
| 
 | |
|   When new network interfaces added or removed ensure that the appropiate
 | |
|   events are send to the "config" multicast group.
 | |
| 
 | |
|   Priority: High
 | |
|   Complexity: C1
 | |
| 
 | |
| - Bind NL80211_CMD_START_SCHED_SCAN to netlink socket
 | |
| 
 | |
|   When issuing the NL80211_CMD_START_SCHED_SCAN it should be bound to the
 | |
|   executing netlink client socket.  If the application closes that netlink
 | |
|   socket the scheduled scan operation should be canceled.
 | |
| 
 | |
|   Priority: Medium
 | |
|   Complexity: C2
 | |
| 
 | |
| - 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
 | |
| 
 | |
| - 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 option 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.
 | |
| 
 | |
|   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
 | |
| 
 | |
| - 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
 | |
| 
 | |
| 
 | |
| 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
 | |
| ===============
 | |
| 
 | |
| - Parsing and building of 802.11 management frames
 | |
| 
 | |
|   Multiple frames types are send around via nl80211 interface.  These
 | |
|   frames need to be parsed and build via generic infrastructure.
 | |
| 
 | |
|   Priority: High
 | |
|   Complexity: C4
 | |
| 
 | |
| - 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
 | |
| 
 | |
| - 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
 | 
