strongSwan Developer Documentation » History » Version 49

Tobias Brunner, 02.08.2017 17:02

1 25 Martin Willi
h1. strongSwan Developer Documentation
2 25 Martin Willi
3 41 Tobias Brunner
h2. Contributions
4 41 Tobias Brunner
5 41 Tobias Brunner
Before starting development, please read our [[Contributions|contribution requirements]].
6 41 Tobias Brunner
7 25 Martin Willi
h2. Getting the Source Code
8 27 Tobias Brunner
9 25 Martin Willi
The easiest way to get the source code is checking it out from our "Git": repository:
10 32 Martin Willi
11 1 Martin Willi
git clone git://
12 41 Tobias Brunner
</pre>The repository is also mirrored to "GitHub":
13 1 Martin Willi
14 35 Tobias Brunner
h2. Browsing the Source Code
15 35 Tobias Brunner
16 35 Tobias Brunner
The Git repository can be browsed online using either "Gitweb": or the integrated "repository browser": (slower).
17 35 Tobias Brunner
18 1 Martin Willi
h2. Source Code Documentation
19 1 Martin Willi
20 44 Tobias Brunner
The newer parts of strongSwan use extractable inline documentation extensively. This documentation is extracted with "Doxygen": for the latest release
21 44 Tobias Brunner
and uploaded to "": Use @make apidoc@ to generate it yourself from the sources.
22 31 Martin Willi
23 1 Martin Willi
h2. Code style
24 1 Martin Willi
25 41 Tobias Brunner
For our code we heavily use an [[ObjectOrientedC|object oriented programming style]] for C. Also have a look to our basic [[ProgrammingStyle|programming style]] guidelines.
26 1 Martin Willi
27 41 Tobias Brunner
h2. Quality Assurance
28 1 Martin Willi
29 41 Tobias Brunner
h3. Unit Tests
30 1 Martin Willi
31 41 Tobias Brunner
Our libraries are tested with an increasing number of unit tests. To run them use @make check@.
32 1 Martin Willi
33 41 Tobias Brunner
The following environment variables change the behavior of the test runner:
34 41 Tobias Brunner
35 47 Tobias Brunner
|TESTS_PLUGINS|A space-separated list of plugins to load (not implemented by all test runners). Since version:5.3.3.|
36 41 Tobias Brunner
|TESTS_REDUCED_KEYLENGTHS|If this is set test cases that generate keys will do so only for reduced key lengths to avoid blocking on hosts with low entropy.|
37 42 Tobias Brunner
|TESTS_STRONGSWAN_CONF|Path to a custom strongswan.conf file used for the tests. Since version:5.2.0.|
38 41 Tobias Brunner
|TESTS_SUITES|A comma-separated list of test suites to run (all suites are run if this is not specified).|
39 46 Tobias Brunner
|TESTS_SUITES_EXCLUDE|A comma-separated list of test suites excluded from running. Since version:5.2.1.|
40 41 Tobias Brunner
|TESTS_VERBOSITY|The log level used when running the tests (-1 to 4, see [[LoggerConfiguration]]), defaults to -1.|
41 41 Tobias Brunner
|LEAK_DETECTIVE_DISABLE|If our custom memory allocator is enabled with _--enable-leak-detective_ it can be disabled temporarily by setting this variable in order to speed up running the tests.|
42 41 Tobias Brunner
43 41 Tobias Brunner
Coverage reports can be generated with @make coverage@ (requires [[Autoconf|configuring]] with _--enable-coverage_, which is not recommended for production builds as it disables all optimizations).
44 41 Tobias Brunner
45 49 Tobias Brunner
The unit tests also run automatically on "Travis CI": !!: !!: !!:
46 41 Tobias Brunner
47 41 Tobias Brunner
h3. Testing Environment
48 41 Tobias Brunner
49 39 Tobias Brunner
Our [[TestingEnvironment|integration and regression testing environment]] helps us ensure the quality of future releases.
50 41 Tobias Brunner
51 41 Tobias Brunner
The "results for the latest release": are published online.
52 39 Tobias Brunner
53 36 Martin Willi
h2. Components
54 1 Martin Willi
55 38 Tobias Brunner
The _src_ directory in the strongSwan distribution contains a set of components:
56 26 Martin Willi
57 43 Tobias Brunner
|aikgen|Utility to generate an Attestation Identity Key bound to a TPM|
58 43 Tobias Brunner
|[[charon]]|The IKE keying daemon|
59 43 Tobias Brunner
|[[charon-cmd]]|A command line IKE client|
60 43 Tobias Brunner
|[[NetworkManager|charon-nm]]|The back end for the [[NetworkManager]] plugin|
61 43 Tobias Brunner
|[[charon-svc]]|A Windows IKE service|
62 43 Tobias Brunner
|charon-tkm|A variant of charon that is backed by a "Trusted Key Manager": (TKM)|
63 43 Tobias Brunner
|[[IntegrityTest|checksum]]|Utility to generate checksums of built executables and libraries|
64 43 Tobias Brunner
|[[IpsecConftest|conftest]]|Conformance test tool|
65 43 Tobias Brunner
|[[DynamicUmlMeshModeler|dumm]]|An experimental UML testing framework|
66 43 Tobias Brunner
|[[AndroidVpnClient|frontends/android]]|VPN client for Android 4+|
67 43 Tobias Brunner
|[[NetworkManager|frontends/gnome]]|[[NetworkManager]] plugin|
68 43 Tobias Brunner
|[[Maemo|frontends/maemo]]|[[Maemo]] applet|
69 43 Tobias Brunner
|[[MacOSX|frontends/osx]]|charon-xpc helper daemon for the native [[MacOSX|Mac OS X application]]|
70 43 Tobias Brunner
|[[IpsecCommand|ipsec]]|The ipsec command line tool wrapping commands and other tools|
71 45 Tobias Brunner
|libcharon|Contains most of the code and the plugins of the charon daemon|
72 43 Tobias Brunner
|[[libfast]]|A lightweight framework to build native web applications using ClearSilver and FastCGI|
73 45 Tobias Brunner
|libhydra|Contains daemon-specific code and plugins used by the charon and starter daemons|
74 43 Tobias Brunner
|libimcv|Contains [[TrustedNetworkConnect|IMCs, IMVs]] and code shared by them|
75 43 Tobias Brunner
|libipsec|An IPsec implementation used by [[kernel-libipsec]] and the [[AndroidVPNClient|Android app]]|
76 43 Tobias Brunner
|libpts|Contains code for [[TrustedNetworkConnect|TPM-based remote attestation]] and SWID tag handling|
77 43 Tobias Brunner
|libpttls|Implements the [[TrustedNetworkConnect|PT-TLS protocol]]|
78 43 Tobias Brunner
|libradius|RADIUS protocol implementation used by e.g. the [[EAPRadius|eap-radius]] and tnc-pdp plugins|
79 43 Tobias Brunner
|libsimaka|Contains code shared by several EAP-SIM/AKA plugins|
80 1 Martin Willi
|[[libstrongswan]]|The strongSwan library with basic functions used by the daemons and utilities |
81 43 Tobias Brunner
|[[EapTls|libtls]]|TLS implementation used by the [[EapTls|eap-tls]], eap-ttls, eap-peap and other plugins|
82 43 Tobias Brunner
|libtnccs|Contains [[TrustedNetworkConnect|IF-TNCCS]] implementations|
83 43 Tobias Brunner
|libtncif|Contains [[TrustedNetworkConnect|IF-IMC/IMV]] code|
84 43 Tobias Brunner
|[[Manager|manager]]|A graphical management application for charon based on libfast|
85 43 Tobias Brunner
|medsrv|An experimental management front end for mediation servers based on libfast|
86 43 Tobias Brunner
|[[IpsecPKI|pki]]|Public Key Infrastructure utility|
87 43 Tobias Brunner
|[[Ipsecpool|pool]]|Utility to manage attributes and IP address pools provided by the [[attrsql|attr-sql]] plugin|
88 43 Tobias Brunner
|pt-tls-client|[[TrustedNetworkConnect|PT-TLS protocol]] client|
89 43 Tobias Brunner
|[[ScepClient|scepclient]]|Utility to enroll certificates using the SCEP protocol|
90 43 Tobias Brunner
|[[IpsecStarter|starter]]|Reads _ipsec.conf_ and controls the keying daemon charon|
91 43 Tobias Brunner
|[[IpsecStroke|stroke]]|Command line utility to control charon via the stroke protocol|
92 43 Tobias Brunner
|[[swanctl]]|Configuration and control utility that communicates via [[vici]] interface|
93 43 Tobias Brunner
| _updown[_espmark]|Default script called by the [[updown]] plugin on tunnel up/down events|
94 1 Martin Willi
95 43 Tobias Brunner
h2. Removed with [[5.0.0]]
96 1 Martin Willi
97 1 Martin Willi
|[[pluto]]|The old IKEv1 keying daemon.|
98 1 Martin Willi
|libfreeswan|The deprecated library used by pluto.|
99 43 Tobias Brunner
|whack|Command line utility to control pluto via the whack protocol.|