Files
tor/src/lib/subsys/lib_subsys.md
T
Nick Mathewson 8b91680d5c Doxygen: rename all .dox files to end with .md
Using a standard ending here will let other tools that expect
markdown understand our output here.

This commit was automatically generated with:

   for fn in $(find src -name '*.dox'); do \
      git mv "$fn" "${fn%.dox}.md"; \
   done
2019-11-15 09:28:12 -05:00

1.4 KiB

@dir /lib/subsys @brief lib/subsys: Types for declaring a "subsystem".

Subsystems in Tor

A subsystem is a module with support for initialization, shutdown, configuration, and so on.

Many parts of Tor can be initialized, cleaned up, and configured somewhat independently through a table-driven mechanism. Each such part is called a "subsystem".

To declare a subsystem, make a global const instance of the subsys_fns_t type, filling in the function pointer fields that you require with ones corresponding to your subsystem. Any function pointers left as "NULL" will be a no-op. Each system must have a name and a "level", which corresponds to the order in which it is initialized. (See app/main/subsystem_list.c for a list of current subsystems and their levels.)

Then, insert your subsystem in the list in app/main/subsystem_list.c. It will need to occupy a position corresponding to its level.

At this point, your subsystem will be handled like the others: it will get initialized at startup, torn down at exit, and so on.

Historical note: Not all of Tor's code is currently handled as subsystems. As you work with older code, you may see some parts of the code that are initialized from tor_init() or run_tor_main_loop() or tor_run_main(); and torn down from tor_cleanup(). We aim to migrate these to subsystems over time; please don't add any new code that follows this pattern.