strongSwan Developer Documentation » History » Version 53

Tobias Brunner, 28.08.2019 15:09
Add badge for FreeBSD builds on Cirrus CI

1 25 Martin Willi
h1. strongSwan Developer Documentation
2 25 Martin Willi
3 51 Tobias Brunner
h2. Contributions / License
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 53 Tobias Brunner
The unit tests also run automatically on "Travis CI" and others: ! CI)!: !!: ! build on AppVeyor)!: ! on Cirrus 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 50 Tobias Brunner
The _src_ directory in the strongSwan distribution contains the following 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 1 Martin Willi
|[[charon-svc]]|A Windows IKE service|
62 50 Tobias Brunner
|[[charon-systemd]]|An IKE daemon similar to charon, but is specifically designed for use with _systemd_|
63 43 Tobias Brunner
|charon-tkm|A variant of charon that is backed by a "Trusted Key Manager": (TKM)|
64 43 Tobias Brunner
|[[IntegrityTest|checksum]]|Utility to generate checksums of built executables and libraries|
65 43 Tobias Brunner
|[[IpsecConftest|conftest]]|Conformance test tool|
66 43 Tobias Brunner
|[[DynamicUmlMeshModeler|dumm]]|An experimental UML testing framework|
67 43 Tobias Brunner
|[[AndroidVpnClient|frontends/android]]|VPN client for Android 4+|
68 43 Tobias Brunner
|[[NetworkManager|frontends/gnome]]|[[NetworkManager]] plugin|
69 43 Tobias Brunner
|[[MacOSX|frontends/osx]]|charon-xpc helper daemon for the native [[MacOSX|Mac OS X application]]|
70 50 Tobias Brunner
|[[IpsecCommand|ipsec]]|The legacy ipsec command line tool wrapping commands and other tools|
71 43 Tobias Brunner
|libcharon|Contains most of the code and the plugins of the charon daemon|
72 45 Tobias Brunner
|[[libfast]]|A lightweight framework to build native web applications using ClearSilver and FastCGI|
73 43 Tobias Brunner
|libimcv|Contains [[TrustedNetworkConnect|IMCs, IMVs]] and code shared by them|
74 43 Tobias Brunner
|libipsec|An IPsec implementation used by [[kernel-libipsec]] and the [[AndroidVPNClient|Android app]]|
75 1 Martin Willi
|libpts|Contains code for [[TrustedNetworkConnect|TPM-based remote attestation]] and SWID tag handling|
76 43 Tobias Brunner
|libpttls|Implements the [[TrustedNetworkConnect|PT-TLS protocol]]|
77 43 Tobias Brunner
|libradius|RADIUS protocol implementation used by e.g. the [[EAPRadius|eap-radius]] and tnc-pdp plugins|
78 1 Martin Willi
|libsimaka|Contains code shared by several EAP-SIM/AKA plugins|
79 50 Tobias Brunner
|[[libstrongswan]]|The strongSwan library with basic functions used by the daemons and utilities|
80 43 Tobias Brunner
|[[EapTls|libtls]]|TLS implementation used by the [[EapTls|eap-tls]], eap-ttls, eap-peap and other plugins|
81 43 Tobias Brunner
|libtnccs|Contains [[TrustedNetworkConnect|IF-TNCCS]] implementations|
82 43 Tobias Brunner
|libtncif|Contains [[TrustedNetworkConnect|IF-IMC/IMV]] code|
83 50 Tobias Brunner
|[[Manager|manager]]|A deprecated graphical management application for charon based on libfast|
84 1 Martin Willi
|medsrv|An experimental management front end for mediation servers based on libfast|
85 43 Tobias Brunner
|[[IpsecPKI|pki]]|Public Key Infrastructure utility|
86 43 Tobias Brunner
|[[Ipsecpool|pool]]|Utility to manage attributes and IP address pools provided by the [[attrsql|attr-sql]] plugin|
87 43 Tobias Brunner
|pt-tls-client|[[TrustedNetworkConnect|PT-TLS protocol]] client|
88 1 Martin Willi
|[[ScepClient|scepclient]]|Utility to enroll certificates using the SCEP protocol|
89 50 Tobias Brunner
|[[IpsecStarter|starter]]|Legacy daemon that reads [[ipsec.conf]] and controls the keying daemon charon|
90 50 Tobias Brunner
|[[IpsecStroke|stroke]]|Legacy command line utility to control charon via the stroke protocol|
91 1 Martin Willi
|[[swanctl]]|Configuration and control utility that communicates via [[vici]] interface|
92 50 Tobias Brunner
|tpm_extendpcr|Tool that extends a digest into a TPM PCR|
93 43 Tobias Brunner
| _updown[_espmark]|Default script called by the [[updown]] plugin on tunnel up/down events|
94 43 Tobias Brunner
95 50 Tobias Brunner
h3. Removed Components
96 43 Tobias Brunner
97 50 Tobias Brunner
|\2(level2).Removed with version:5.5.1|
98 50 Tobias Brunner
|[[Maemo|frontends/maemo]]|[[Maemo]] applet|
99 50 Tobias Brunner
|\2(level2).Removed with version:5.4.0|
100 50 Tobias Brunner
|libhydra|Contained daemon-specific code and plugins used by the charon and starter daemons|
101 50 Tobias Brunner
|\2(level2).Removed with version:5.0.0|
102 1 Martin Willi
|[[pluto]]|The old IKEv1 keying daemon.|
103 1 Martin Willi
|libfreeswan|The deprecated library used by pluto.|
104 43 Tobias Brunner
|whack|Command line utility to control pluto via the whack protocol.|