mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-21 06:33:31 +00:00
b4c4681733
* differentiates request types that where merged formerly per module; e.g. instead of type Superblock_control::Request, there are now types * Superblock_control::Read_vbas * Superblock_control::Write_vbas * Superblock_control::Rekey * Superblock_control::Initialize * ... each holding only the state and functionality that is required for exactly that request * removes all classes of the Tresor module framework and adapts all Tresor- and File-Vault- related libs, apps, and tests accordingly * the former "channel" state is merged into the new request types, meaning, a request manages no longer only the "call" to a functionality but also the execution of that functionality; every request has a lifetime equal to the "call" and an execute method to be driven forward * state that is used by a request but has a longer lifetime (e.g. VFS file handles in Tresor::Crypto) is managed by the top level of the user and handed over via the execute arguments; however, the synchronization of multiple requests on this state is done by the module (e.g. Tresor::Crypto) * requests are now driven explicitly as first argument of the (overloaded) execute method of their module; the module can, however, stall a request by returning false without doing anything (used for synchronization on resources) * introduces Request_helper, Generated_request and Generatable_request in the Tresor namespace in order to avoid the redundancy of sub-request generation and execution * moves access to Client-Data pointers up to Tresor::Virtual_block_device in order to simplify Tresor::Block_io and Tresor::Crypto * removes Tresor::Client_data and introduces pure interface Client_data_interface in order to remove Tresor::Client_data and move management of Client Data to the top level of a Tresor user * introduces pure interface Crypto_files_interface in order to move management of Crypto files to the top level of a Tresor user * moves management of Block-IO and Trust-Anchor files to the top level of a Tresor user * adapts all execute methods, so, that they return the progress state instead of modifying a reference argument * removes Tresor::Request_and Tresor:Request and instead implements scheduling at the top level of the Tresor user * the Tresor Tester uses a list as schedule that holds Command objects; this list ensures, that commands are started in the order of configuration the Command type is a merge of the state of all possible commands that can be configured at the Tresor Tester; the actual Tresor requests (if any) are then allocated on-demand only * the Tresor VFS plugin does not use a dynamic data structure for scheduling; the plugin has 5 members that each reflect a distinct type of operation: * initialize operation * deinitialize operation * data operation * extend operation * rekey operation consequently, of each type, there can be only one operation in-flight at a time; at the user front-end each operation (except "initialize") can be controlled through a dedicated VFS file; for each of these files, the VFS expects only one handle to be open at a time and only one file operation (read, write, sync) active at a time; once an operation gets started it is finished without preemtion (except of the interleaving at rekey and extend); when multiple operations are waiting to be started the plugin follows a static priority scheme: init op > deinit op > data op > extend op > rekey op there are some operation-specific details * the initialize operation is started only by the plugin itself on startup and will be driven as side effect by subsequent user calls to file operations * the data file is the only contiguous file in the front end and the file operations work as on usual data files * the other 3 files are transactional files and the user is expected to follow this scheme when operating on them 1) stat (to determine file size) 2) seek to offset 0 3) read entire file once (this will be queued until there is no operation of this type pending anymore and return the last result: "none" | "failed" | "succeeded"; used primarily for synchronization) 4) write operation parameters (this returns immediately and marks the operation as "requested") 5) read entire file once (the same as above but this time in order to determine the operation result) * the rekey op and deinitialize op are requested by writing "true" * the extend op is requested by writing "tree=[TREE], blocks=[BLOCKS]" where TREE is either "vbd" or "ft" and BLOCKS is the number of physical 4K blocks by which the physical range of the tresor container expands (the physical range always starts at block address 0 and is always expanded upwards) * replaces the former <trust-anchor op="initialize"> command at the Tresor Tester with <initialize-trust-achor> as there are no other trust anchor operations that can be requested through the Tester config anyway * removes the "sync" attribute from all commands at the Tresor Tester except from <request op="rekey">, <request "extend_ft">, <request op="extend_vbd">; as the Tester controls scheduling now, requests are generally synchronous; at the rekeying and extension commands, the "sync" attribute determines wether subsequent commands are interleaved with the execution of these commands (if possible) * removes "debug" config attribute from Tresor VFS plugin and reworks "verbose" attribute to generate more sensible output * removes NONCOPYABLE macro and instead uses Genode::Noncopyable and in-place Constructors deletion * introduces types Attr and Execute_attr where a constructor or execute method have many arguments in order to raise readability * renames the "hashsum" file that is provided by the Tresor Trust-Anchor VFS plugin to "hash" in order to become conformant with the wording in the Tresor lib * makes the VFS Tresor test an automated test by merging in the functionality of vfs_tresor_init.run and removing the interactive front end; removes vfs_tresor_init.run as it is not needed anymore; adds consideration for autopilot file structure in the Test and adds it to autopilot.list * removes all snapshot controls and the progress files for rekeying and extending from the Tresor VFS plugin; both functionalities were tested only rudimentary by the VFS Tresor test and are not supported with the only real user, the File Vault * use /* .. */ instead of // .. * use (..) instead of { .. } in init lists Ref #5148 |
||
---|---|---|
.. | ||
boot | ||
builddir | ||
dde_linux | ||
depot | ||
dts | ||
ports | ||
run | ||
sdk | ||
seccomp | ||
xkb2ifcfg | ||
abi_symbols | ||
autopilot | ||
autopilot.list | ||
backtrace | ||
beautify | ||
cbe_autopilot | ||
check_abi | ||
create_builddir | ||
create_iso | ||
create_uboot | ||
cxx_to_html | ||
fix_include_ifndef | ||
internal_abi.list | ||
link.h | ||
parse_cxx | ||
README | ||
rump_cgdconf | ||
tool_chain | ||
tool_chain_qt5 |
This directory contains tools for managing and using the source code of Genode. :'create_builddir' The 'create_builddir' tool provides a convenient way to create build directories for different platforms. Its usage information is printed when starting the tool without arguments. :'builddir/': This directory contains a Makefile template and configuration snippets used by the 'create_builddir' tool. :'tool_chain': This tool downloads, builds, and installs the tool chain needed to build the Genode OS Framework. For getting usage information, start the tool without arguments. :'create_iso': This simple tool helps to build bootable ISO images from your build of Genode. For getting usage information, start the tool without arguments. :'create_grub2': This tool prepares a partitioned disk image with GRUB2 as boot loader. :'grub2-head.img': This file is the head part of a partioned disk image including an installation of GRUB2 as boot loader. GRUB2 is available from http://www.gnu.org/software/grub/ and in major Linux distributions. Steps to reproduce the image creation can be found in 'create_grub2'. :'beautify': Beautify is a coding-style checking tool that analyzes source code for its adherence to Genode's coding style as described in 'doc/coding_style.txt'. Whenever possible, the tool tries to fix the issues and outputs a corrected file. Some corrections, however, require human interaction. In this case, the tool stops the analysis with an error. :'parse_cxx': This tool is a C++ parser used as front-end for Beautify. :'cxx_to_html': This tool converts a C++ source file to a HTML view to be used for the API documentation at the genode.org website. It relies on 'parse_cxx' to do the actual C++ parsing. :'fix_include_ifndef': This tool helps with assigning consistent include guards to header files. :'boot': This directory contains boot-loader files needed to create boot images. :'autopilot': Autopilot is a tool for the automatic execution of run scripts among multiple base platforms. :'abi_symbols': The utility assists with the initial creation of a ABI-symbols file, taking a shared object as a starting point. For more information, refer to the header of the 'abi_symbols' script. :'check_abi': The 'check_abi' helper is used by the build system to detect violations of an ABI by a shared library. Most importantly, it reports incompatibilities of symbol sizes, which require an adaptation of the ABI. For more information, refer to the header of the 'check_abi' script.