Merge ~danilogondolfo/netplan/+git/ubuntu:jammy_0_107_1_sru into ~ubuntu-core-dev/netplan/+git/ubuntu:ubuntu-jammy

Proposed by Danilo Egea Gondolfo
Status: Merged
Merged at revision: a4855f0fc915cdb5a0748f9ccde46b947f349fe0
Proposed branch: ~danilogondolfo/netplan/+git/ubuntu:jammy_0_107_1_sru
Merge into: ~ubuntu-core-dev/netplan/+git/ubuntu:ubuntu-jammy
Diff against target: 29134 lines (+13589/-4369)
172 files modified
.github/workflows/autopkgtest.yml (+7/-3)
.github/workflows/build-abi.yml (+4/-5)
.github/workflows/check-address-sanitizer.yml (+2/-2)
.github/workflows/check-coverage.yml (+7/-5)
.github/workflows/check-wording.yaml (+1/-1)
.github/workflows/codeql-analysis.yml (+3/-3)
.github/workflows/coverity.yml (+36/-0)
.github/workflows/debci.yml (+60/-0)
.github/workflows/network-manager.yml (+66/-0)
.github/workflows/rpmbuild.yml (+33/-0)
.github/workflows/spread.yml (+2/-2)
.gitignore (+1/-1)
.woke.yaml (+1/-8)
Doxyfile (+2688/-0)
Makefile (+29/-166)
README.md (+0/-2)
abi-compat/README.md (+4/-4)
abi-compat/jammy_0.107.xml (+1870/-1732)
debian/changelog (+143/-0)
debian/clean (+1/-0)
debian/control (+54/-5)
debian/extra/PLACEHOLDER (+4/-0)
debian/libnetplan0.symbols (+15/-0)
debian/netplan-generator.install (+5/-0)
debian/netplan.io.install (+5/-4)
debian/netplan.io.preinst (+17/-0)
debian/patches/0001-parse-nm-wg-append-the-correct-prefix-to-IPv6-addres.patch (+77/-0)
debian/patches/0004-tests-assert-generated-.service-files-in-assert_srio.patch (+26/-0)
debian/patches/0005-tests-sriov-test-if-the-generated-netplan-rebind-ser.patch (+57/-0)
debian/patches/0006-sriov-don-t-generate-duplicate-entries-in-the-rebind.patch (+96/-0)
debian/patches/lp2041727/0007-cli-utils-introduce-systemctl_is_installed-helper.patch (+66/-0)
debian/patches/lp2041727/0008-Update-ovs.py-to-check-if-ovsdb-server.service-is-in.patch (+75/-0)
debian/patches/series (+12/-26)
debian/patches/sru-compat/0009-validation-avoid-new-yaml_error-in-SRU.patch (+3/-7)
debian/patches/sru-compat/0010-Revert-ovs-don-t-allow-peers-with-the-same-name.patch (+2/-6)
debian/patches/sru-compat/0011-parse-add-comment-about-OpenFlow16-deprecation.patch (+1/-3)
debian/patches/sru-compat/0012-migrate-fix-looback_only-legacy-test.patch (+3/-5)
debian/patches/sru-compat/0013-Keep-old-file-permission-for-backwards-compatibility.patch (+11/-11)
debian/patches/sru-compat/0014-Demote-lacp-rate-validation-error-to-warning-for-bac.patch (+41/-0)
debian/python3-netplan.install (+1/-0)
debian/rules (+13/-0)
debian/tests/control (+30/-2)
debian/tests/prep-testbed.sh (+3/-0)
dev/null (+0/-511)
doc/apidoc/inc-netplan.md (+4/-0)
doc/apidoc/inc-parse-nm.md (+4/-0)
doc/apidoc/inc-parse.md (+4/-0)
doc/apidoc/inc-types.md (+4/-0)
doc/apidoc/inc-util.md (+4/-0)
doc/apidoc/index.md (+52/-0)
doc/conf.py (+29/-1)
doc/contribute-docs.md (+26/-0)
doc/explanation.md (+5/-0)
doc/howto.md (+1/-0)
doc/netplan-everywhere.md (+54/-60)
doc/netplan-yaml.md (+132/-6)
doc/nm-all.md (+26/-0)
doc/reference.md (+3/-3)
doc/requirements.txt (+1/-0)
doc/spelling_wordlist.txt (+36/-4)
examples/bonding.yaml (+1/-0)
examples/cffi-bindings.py (+69/-0)
examples/dummy-devices.yaml (+11/-0)
examples/virtual-ethernet.yaml (+16/-0)
examples/wireless_adhoc.yaml (+23/-0)
examples/wireless_wpa3.yaml (+10/-0)
examples/wpa3_enterprise.yaml (+26/-0)
features_py_generator.sh (+1/-1)
gcovr.cfg (+2/-0)
include/netplan.h (+13/-0)
include/parse-nm.h (+8/-0)
include/parse.h (+8/-1)
include/types.h (+74/-0)
include/util.h (+27/-0)
meson.build (+19/-8)
netplan_cli/__init__.py (+1/-1)
netplan_cli/cli/commands/__init__.py (+10/-10)
netplan_cli/cli/commands/apply.py (+24/-6)
netplan_cli/cli/commands/generate.py (+3/-3)
netplan_cli/cli/commands/get.py (+6/-42)
netplan_cli/cli/commands/info.py (+4/-4)
netplan_cli/cli/commands/ip.py (+1/-1)
netplan_cli/cli/commands/migrate.py (+1/-1)
netplan_cli/cli/commands/set.py (+10/-10)
netplan_cli/cli/commands/sriov_rebind.py (+2/-2)
netplan_cli/cli/commands/status.py (+263/-0)
netplan_cli/cli/commands/try_command.py (+11/-12)
netplan_cli/cli/core.py (+13/-4)
netplan_cli/cli/ovs.py (+3/-3)
netplan_cli/cli/sriov.py (+22/-22)
netplan_cli/cli/state.py (+173/-298)
netplan_cli/cli/utils.py (+23/-10)
netplan_cli/configmanager.py (+13/-8)
netplan_cli/meson.build (+2/-2)
python-cffi/meson.build (+1/-0)
python-cffi/netplan/__init__.py (+73/-0)
python-cffi/netplan/_build_cffi.py (+173/-0)
python-cffi/netplan/_utils.py (+214/-0)
python-cffi/netplan/meson.build (+50/-0)
python-cffi/netplan/netdef.py (+337/-0)
python-cffi/netplan/parser.py (+48/-0)
python-cffi/netplan/state.py (+135/-0)
rpm/netplan.spec (+9/-0)
spread.yaml (+2/-1)
src/abi.h (+36/-6)
src/abi_compat.c (+10/-3)
src/dbus.c (+6/-6)
src/error.c (+10/-7)
src/generate.c (+2/-2)
src/names.c (+19/-3)
src/names.h (+3/-0)
src/netplan.c (+63/-13)
src/netplan.script (+1/-1)
src/networkd.c (+128/-62)
src/nm.c (+138/-63)
src/openvswitch.c (+10/-12)
src/parse-nm.c (+346/-103)
src/parse.c (+328/-140)
src/sriov.c (+5/-5)
src/types-internal.h (+28/-2)
src/types.c (+10/-12)
src/util-internal.h (+56/-9)
src/util.c (+205/-19)
src/validation.c (+83/-43)
src/validation.h (+3/-0)
tests/cli/test_get_set.py (+76/-3)
tests/cli/test_state.py (+405/-0)
tests/cli/test_status.py (+214/-446)
tests/cli/test_units.py (+79/-2)
tests/ctests/meson.build (+4/-2)
tests/ctests/test_netplan_deprecated.c (+6/-6)
tests/ctests/test_netplan_error.c (+4/-4)
tests/ctests/test_netplan_keyfile.c (+295/-0)
tests/ctests/test_netplan_misc.c (+17/-17)
tests/ctests/test_netplan_nm.c (+62/-0)
tests/ctests/test_netplan_openvswitch.c (+69/-0)
tests/ctests/test_netplan_parser.c (+14/-14)
tests/ctests/test_netplan_state.c (+7/-7)
tests/ctests/test_netplan_validation.c (+6/-6)
tests/ctests/test_utils_keyfile.h (+48/-0)
tests/generator/base.py (+7/-0)
tests/generator/test_auth.py (+5/-2)
tests/generator/test_bonds.py (+1/-1)
tests/generator/test_common.py (+88/-3)
tests/generator/test_dummies.py (+94/-0)
tests/generator/test_routing.py (+63/-0)
tests/generator/test_tunnels.py (+69/-43)
tests/generator/test_veths.py (+199/-0)
tests/generator/test_vlans.py (+59/-0)
tests/generator/test_wifis.py (+467/-4)
tests/integration/base.py (+32/-10)
tests/integration/dummies.py (+89/-0)
tests/integration/ethernets.py (+1/-1)
tests/integration/ovs.py (+4/-1)
tests/integration/regressions.py (+31/-12)
tests/integration/routing.py (+1/-0)
tests/integration/scenarios.py (+2/-2)
tests/integration/tunnels.py (+50/-3)
tests/integration/veths.py (+91/-0)
tests/integration/vlans.py (+1/-1)
tests/parser/base.py (+30/-28)
tests/parser/test_keyfile.py (+914/-59)
tests/test_configmanager.py (+19/-2)
tests/test_libnetplan.py (+397/-67)
tests/test_ovs.py (+5/-5)
tests/test_sriov.py (+46/-46)
tests/test_terminal.py (+2/-2)
tests/test_utils.py (+28/-14)
tests/utils.py (+3/-3)
tools/keyfile_to_yaml.c (+34/-0)
tools/keyfile_to_yaml.py (+28/-0)
tools/run_asan.sh (+38/-4)
Reviewer Review Type Date Requested Status
Lukas Märdian Approve
Ubuntu Core Development Team Pending
Review via email: mp+462714@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Lukas Märdian (slyon) wrote :

* d/control (non-blocking, as we always build with tests enabled): systemd => remove <!nocheck> (we need it for pkgconf files)
* d/control (non-blocking): keep openvswwitch-switch for all architectures
* d/control (non-blocking): No need to Suggest network-manager | wpasupplicant, openvswitch-switch & iw from the "netplan.io" package, as those are suggested by "netplan-generator" already. Just suggesting "python3-rich" should be fine, but doesn't hurt either.
* note: netplan.io.preinst is now staged for Noble, too: https://salsa.debian.org/debian/netplan.io/-/merge_requests/12

review: Approve
Revision history for this message
Danilo Egea Gondolfo (danilogondolfo) wrote :

Thank you, Lukas. I just pushed the changes you suggested.

Revision history for this message
Danilo Egea Gondolfo (danilogondolfo) wrote :
Revision history for this message
Lukas Märdian (slyon) wrote :

Thanks!

$ dput ubuntu ../netplan.io_0.107.1-3ubuntu0.22.04.1_source.changes
Uploading netplan.io using ftp to ubuntu (host: upload.ubuntu.com; directory: /ubuntu)
running required-fields: check whether a field is present and non-empty in the changes file
running gpg: check GnuPG signatures before the upload
running releasemismatch: Warn about mismatching suffixesg e.g. focal with a XX.YY not being 20.04
running nobug: Stop if uploading without any bug reference.
running updatemaintainer: Stop if ubuntu changes are without ubuntu maintainer.
running check-debs: makes sure the upload contains a binary package
running placeholderbug: Stop if using common placeholder numbers as bug reference.
running ppaforppaonly: Stop uploads to the archive with or to ppa without ~ppa suffix.
running badauthor: Stop if uploading with root@ or ubuntu@ email adresses.
running suite-mismatch: check the target distribution for common errors
running supported-distribution: check whether the target distribution is currently supported (using distro-info)
{'allowed': ['release', 'proposed', 'backports', 'security'], 'known': ['release', 'proposed', 'updates', 'backports', 'security']}
running checksum: verify checksums before uploading
running gitubuntu: Warn if uploading without git-ubuntu Vcs-* entries.
WARNING: .changes file does not contain git-ubuntu "Vcs-Git"
WARNING: .changes file does not contain git-ubuntu "Vcs-Git-Commit"
WARNING: .changes file does not contain git-ubuntu "Vcs-Git-Ref"
Check: Upload without git-ubuntu Vcs entries? [yes, NO]: yes
Uploading netplan.io_0.107.1-3ubuntu0.22.04.1.dsc
Uploading netplan.io_0.107.1.orig.tar.gz
Uploading netplan.io_0.107.1-3ubuntu0.22.04.1.debian.tar.xz
Uploading netplan.io_0.107.1-3ubuntu0.22.04.1_source.buildinfo
Uploading netplan.io_0.107.1-3ubuntu0.22.04.1_source.changes

https://launchpad.net/ubuntu/jammy/+queue?queue_state=1&queue_text=netplan.io

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.github/workflows/autopkgtest.yml b/.github/workflows/autopkgtest.yml
2index d19f00d..06e9530 100644
3--- a/.github/workflows/autopkgtest.yml
4+++ b/.github/workflows/autopkgtest.yml
5@@ -4,7 +4,7 @@ name: Autopkgtest CI
6 # events but only for the main branch
7 on:
8 push:
9- branches: [ main, 'stable/**' ]
10+ branches: [ main ]
11 pull_request:
12 branches: [ '**' ]
13
14@@ -42,9 +42,13 @@ jobs:
15 pull-lp-source netplan.io
16 cp -r netplan.io-*/debian .
17 rm -r debian/patches/ # clear any distro patches
18- dch -v $(git describe --tags) "Autopkgtest CI testing (Jammy)"
19+ echo "usr/lib/python3/dist-packages/netplan/*" >> debian/netplan.io.install # bindings
20+ TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) # find latest (stable) tag
21+ REV=$(git rev-parse --short HEAD) # get current git revision
22+ VER="$TAG+git~$REV"
23+ dch -v "$VER" "Autopkgtest CI testing (Jammy)"
24 - name: Run autopkgtest (incl. build)
25 run: |
26 # using --setup-commands temporarily to install:
27 # cmocka/pytest/rich/ethtool until they become proper test-deps
28- autopkgtest . --setup-commands='apt -y install ethtool python3-rich python3-pytest python3-pytest-cov libcmocka-dev' -U --env=DPKG_GENSYMBOLS_CHECK_LEVEL=0 --env=DEB_BUILD_OPTIONS=nocheck -- lxd autopkgtest/ubuntu/jammy/amd64
29+ autopkgtest . --setup-commands='apt -y install ethtool python3-rich python3-pytest python3-pytest-cov python3-cffi libpython3-dev libcmocka-dev' -U --env=DPKG_GENSYMBOLS_CHECK_LEVEL=0 --env=DEB_BUILD_OPTIONS=nocheck -- lxd autopkgtest/ubuntu/jammy/amd64
30diff --git a/.github/workflows/build-abi.yml b/.github/workflows/build-abi.yml
31index 7d946e7..8fa95ee 100644
32--- a/.github/workflows/build-abi.yml
33+++ b/.github/workflows/build-abi.yml
34@@ -4,9 +4,9 @@ name: Build & ABI compatibility
35 # events but only for the main branch
36 on:
37 push:
38- branches: [ main, 'stable/**' ]
39+ branches: [ main ]
40 pull_request:
41- branches: [ main, 'stable/**' ]
42+ branches: [ main ]
43
44 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
45 jobs:
46@@ -28,11 +28,10 @@ jobs:
47 sudo sed -i '/deb-src/s/^# //' /etc/apt/sources.list
48 sudo apt update
49 #sudo apt install lcov python3-coverage curl
50- sudo apt install abigail-tools meson python3-coverage python3-pytest python3-pytest-cov
51+ sudo apt install abigail-tools meson python3-coverage python3-pytest python3-pytest-cov python3-cffi libpython3-dev
52 sudo apt build-dep netplan.io
53
54 # Runs the build
55- # TODO: move to meson build (on Jammy), once available
56 - name: Run build
57 run: |
58 meson setup _build -Dunit_testing=false --prefix=/usr
59@@ -41,4 +40,4 @@ jobs:
60 # Abigail ABI checker
61 - name: Check ABI compatibility
62 run: |
63- abidiff abi-compat/jammy_0.106.xml _build/src/libnetplan.so.0.0 --headers-dir2 include/ --header-file2 src/abi.h --suppressions abi-compat/suppressions.abignore --no-added-syms
64+ abidiff abi-compat/jammy_0.107.xml _build/src/libnetplan.so.0.0 --headers-dir2 include/ --header-file2 src/abi.h --suppressions abi-compat/suppressions.abignore --no-added-syms
65diff --git a/.github/workflows/check-address-sanitizer.yml b/.github/workflows/check-address-sanitizer.yml
66index 87145f7..f65a5a4 100644
67--- a/.github/workflows/check-address-sanitizer.yml
68+++ b/.github/workflows/check-address-sanitizer.yml
69@@ -7,7 +7,7 @@ name: Check for memory issues
70
71 on:
72 push:
73- branches: [ main, 'stable/**' ]
74+ branches: [ main ]
75 pull_request:
76 branches: [ '**' ]
77
78@@ -23,7 +23,7 @@ jobs:
79 echo "APT::Get::Always-Include-Phased-Updates \"true\";" | sudo tee /etc/apt/apt.conf.d/90phased-updates
80 sudo sed -i '/deb-src/s/^# //' /etc/apt/sources.list
81 sudo apt update
82- sudo apt -y install python3-rich python3-coverage python3-pytest python3-pytest-cov curl meson gcovr expect libcmocka-dev
83+ sudo apt -y install python3-rich python3-coverage python3-pytest python3-pytest-cov curl meson gcovr expect libcmocka-dev python3-cffi libpython3-dev
84 sudo apt -y build-dep netplan.io
85
86 - name: Run unit tests
87diff --git a/.github/workflows/check-coverage.yml b/.github/workflows/check-coverage.yml
88index a0bbc5d..b06e87a 100644
89--- a/.github/workflows/check-coverage.yml
90+++ b/.github/workflows/check-coverage.yml
91@@ -4,7 +4,7 @@ name: Unit tests & Coverage
92 # events but only for the main branch
93 on:
94 push:
95- branches: [ main, 'stable/**' ]
96+ branches: [ main ]
97 pull_request:
98 branches: [ '**' ]
99
100@@ -28,15 +28,17 @@ jobs:
101 echo "APT::Get::Always-Include-Phased-Updates \"true\";" | sudo tee /etc/apt/apt.conf.d/90phased-updates
102 sudo sed -i '/deb-src/s/^# //' /etc/apt/sources.list
103 sudo apt update
104- sudo apt install python3-rich python3-coverage python3-pytest python3-pytest-cov curl meson gcovr expect libcmocka-dev
105+ sudo apt install python3-rich python3-coverage python3-pytest python3-pytest-cov curl meson gcovr expect libcmocka-dev python3-cffi libpython3-dev
106 sudo apt build-dep netplan.io
107+ wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcovr/gcovr_5.2-1_all.deb
108+ sudo dpkg -i gcovr*.deb # we need newer gcovr to make the gcovr.cfg:exclude setting work
109
110 # Runs the unit tests with coverage
111 - name: Run unit tests
112 run: |
113- meson setup _build --prefix=/usr -Db_coverage=true -Dunit_testing=true
114- meson compile -C _build
115- unbuffer meson test -C _build --verbose
116+ meson setup _build-cov --prefix=/usr -Db_coverage=true -Dunit_testing=true
117+ meson compile -C _build-cov
118+ unbuffer meson test -C _build-cov --verbose
119
120 # Checks the coverage diff to the main branch
121 #- name: Upload coverage to Codecov
122diff --git a/.github/workflows/check-wording.yaml b/.github/workflows/check-wording.yaml
123index 02d2b1f..e1b37e2 100644
124--- a/.github/workflows/check-wording.yaml
125+++ b/.github/workflows/check-wording.yaml
126@@ -2,7 +2,7 @@ name: Check for non-inclusive language
127
128 on:
129 push:
130- branches: [ main, 'stable/**' ]
131+ branches: [ main ]
132 pull_request:
133 branches: [ '**' ]
134
135diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
136index e5f9974..104af87 100644
137--- a/.github/workflows/codeql-analysis.yml
138+++ b/.github/workflows/codeql-analysis.yml
139@@ -13,10 +13,10 @@ name: "CodeQL"
140
141 on:
142 push:
143- branches: [ main, 'stable/**' ]
144+ branches: [ main ]
145 pull_request:
146 # The branches below must be a subset of the branches above
147- branches: [ main, 'stable/**' ]
148+ branches: [ main ]
149 schedule:
150 - cron: '17 21 * * 2'
151
152@@ -52,7 +52,7 @@ jobs:
153 run: |
154 sudo sed -i '/deb-src/s/^# //' /etc/apt/sources.list
155 sudo apt update
156- sudo apt install meson python3-coverage python3-pytest python3-pytest-cov libcmocka-dev
157+ sudo apt install meson python3-coverage python3-pytest python3-pytest-cov libcmocka-dev python3-cffi libpython3-dev
158 sudo apt build-dep netplan.io
159
160 # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
161diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml
162new file mode 100644
163index 0000000..cd32c06
164--- /dev/null
165+++ b/.github/workflows/coverity.yml
166@@ -0,0 +1,36 @@
167+name: Coverity
168+
169+on:
170+ schedule:
171+ - cron: '0 0 * * MON'
172+
173+jobs:
174+ coverity:
175+ if: github.repository == 'canonical/netplan'
176+ runs-on: ubuntu-22.04
177+
178+ steps:
179+ - uses: actions/checkout@v2
180+ - name: Install dependencies
181+ run: |
182+ sudo sed -i '/deb-src/s/^# //' /etc/apt/sources.list
183+ sudo apt update
184+ sudo apt -y build-dep netplan.io
185+ sudo apt -y install libcmocka-dev meson python3-pytest curl python3-cffi libpython3-dev
186+ - name: Download Coverity
187+ run: |
188+ curl https://scan.coverity.com/download/cxx/linux64 --no-progress-meter --output ${HOME}/coverity.tar.gz --data "token=${{ secrets.COVERITY_TOKEN }}&project=Netplan"
189+ mkdir ${HOME}/coverity
190+ tar --strip=1 -C ${HOME}/coverity -xzf ${HOME}/coverity.tar.gz
191+ echo "$HOME/coverity/bin" >> $GITHUB_PATH
192+ - name: Run Coverity
193+ run: |
194+ meson setup coveritybuild --prefix=/usr
195+ cov-build --dir cov-int meson compile -C coveritybuild
196+ tar czf netplan.tar.gz cov-int
197+ - name: Upload results
198+ run: |
199+ TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) # find latest (stable) tag
200+ REV=$(git rev-parse --short HEAD) # get current git revision
201+ VER="$TAG+git~$REV"
202+ curl --form token=${{ secrets.COVERITY_TOKEN }} --form email=${{ secrets.COVERITY_EMAIL }} --form file=@netplan.tar.gz --form version="${VER}" --form description="Coverity scan" https://scan.coverity.com/builds?project=Netplan
203diff --git a/.github/workflows/debci.yml b/.github/workflows/debci.yml
204new file mode 100644
205index 0000000..3c5f91a
206--- /dev/null
207+++ b/.github/workflows/debci.yml
208@@ -0,0 +1,60 @@
209+name: Autopkgtest DebCI
210+
211+# Controls when the action will run. Triggers the workflow on push or pull request
212+# events but only for the main branch
213+on:
214+ push:
215+ branches: [ main, 'stable/**' ]
216+ pull_request:
217+ branches: [ '**' ]
218+
219+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
220+jobs:
221+ lxc-debian-testing:
222+ # The type of runner that the job will run on
223+ runs-on: ubuntu-22.04
224+
225+ # Steps represent a sequence of tasks that will be executed as part of the job
226+ steps:
227+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
228+ - uses: actions/checkout@v2
229+ - run: |
230+ git fetch --unshallow --tags
231+ # Install openvswitch-switch to make the OVS integration tests work
232+ # Install linux-modules-extra-azure to provide the 'vrf' kernel module,
233+ # it's needed (will be auto-loaded) by routing.test_vrf_basic
234+ - name: Install dependencies
235+ run: |
236+ sudo sed -i '/deb-src/s/^# //' /etc/apt/sources.list
237+ sudo apt update
238+ sudo apt install debci lxc lxc-templates debian-archive-keyring autopkgtest ubuntu-dev-tools devscripts linux-modules-extra-$(uname -r) #openvswitch-switch
239+ # See: https://discourse.ubuntu.com/t/containers-lxc/11526 (Apparmor section)
240+ # (LP: #1950787, LP: #1998943)
241+ - name: Preparing autopkgtest-build-lxc
242+ run: |
243+ # Fix Docker blocking LXC networking:
244+ # https://discuss.linuxcontainers.org/t/9953/4
245+ sudo iptables -I DOCKER-USER -j ACCEPT
246+ sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
247+ sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disable/
248+ echo "lxc.apparmor.profile = unconfined" | sudo tee -a /etc/lxc/default.conf
249+ sudo debci setup -s testing -a amd64 -b lxc
250+ - name: Prepare test
251+ run: |
252+ # pull-debian-source netplan.io # snapshot.debian.org is not up-to-date
253+ V=$(rmadison -u debian -s unstable netplan.io | cut -d"|" -f2 | xargs)
254+ dget -u "https://deb.debian.org/debian/pool/main/n/netplan.io/netplan.io_$V.dsc"
255+ cp -r netplan.io-*/debian .
256+ rm -r debian/patches/ # clear any distro patches
257+ echo "usr/lib/python3/dist-packages/netplan/*" >> debian/netplan.io.install # bindings
258+ echo "override_dh_auto_configure:" >> debian/rules
259+ echo " dh_auto_configure -- -Dpython.purelibdir=/usr/lib/python3/dist-packages -Dpython.platlibdir=/usr/lib/python3/dist-packages" >> debian/rules
260+ TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) # find latest (stable) tag
261+ REV=$(git rev-parse --short HEAD) # get current git revision
262+ VER="$TAG+git~$REV"
263+ dch -v "$VER" "Autopkgtest CI testing (Debian testing)"
264+ - name: Run autopkgtest (incl. build)
265+ run: |
266+ # using --setup-commands='apt -y install ...' temporarily to install
267+ # (test-/build-) deps until they become part of the packaging
268+ sudo autopkgtest . -U --env=DPKG_GENSYMBOLS_CHECK_LEVEL=0 --env=DEB_BUILD_OPTIONS=nocheck --setup-commands='apt -y install python3-cffi libpython3-dev' -- lxc autopkgtest-testing-amd64 || test $? -eq 2 # allow OVS test to be skipped (exit code = 2)
269diff --git a/.github/workflows/network-manager.yml b/.github/workflows/network-manager.yml
270new file mode 100644
271index 0000000..e3fb1b3
272--- /dev/null
273+++ b/.github/workflows/network-manager.yml
274@@ -0,0 +1,66 @@
275+name: NetworkManager Autopkgtest
276+
277+# Controls when the action will run. Triggers the workflow on push or pull request
278+# events but only for the main branch
279+on:
280+ push:
281+ branches: [ main, 'stable/**' ]
282+ pull_request:
283+ branches: [ '**' ]
284+
285+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
286+jobs:
287+ lxd-network-manager:
288+ # The type of runner that the job will run on
289+ runs-on: ubuntu-latest
290+
291+ # Steps represent a sequence of tasks that will be executed as part of the job
292+ steps:
293+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
294+ - uses: actions/checkout@v3
295+ # Setup LXD + Docker fixes
296+ - uses: canonical/setup-lxd@v0.1.1
297+ with:
298+ channel: latest/stable # switch from distro's LTS channel to latest/stable
299+ - run: |
300+ git fetch --unshallow --tags
301+ # Install openvswitch-switch to make the OVS integration tests work
302+ # Install linux-modules-extra-azure to provide the 'vrf' kernel module,
303+ # it's needed (will be auto-loaded) by routing.test_vrf_basic
304+ - name: Install dependencies
305+ run: |
306+ sudo sed -i '/deb-src/s/^# //' /etc/apt/sources.list
307+ sudo apt update
308+ sudo apt install autopkgtest ubuntu-dev-tools devscripts openvswitch-switch linux-modules-extra-$(uname -r)
309+ - name: Prepare test
310+ run: |
311+ pull-lp-source netplan.io
312+ cp -r netplan.io-*/debian .
313+ rm -r debian/patches/ # clear any distro patches
314+ echo "3.0 (native)" > debian/source/format # force native build
315+ echo "usr/lib/python3/dist-packages/netplan/*" >> debian/netplan.io.install # bindings
316+ echo "override_dh_auto_configure:" >> debian/rules
317+ echo " dh_auto_configure -- -Dpython.purelibdir=/usr/lib/python3/dist-packages -Dpython.platlibdir=/usr/lib/python3/dist-packages" >> debian/rules
318+ TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) # find latest (stable) tag
319+ REV=$(git rev-parse --short HEAD) # get current git revision
320+ VER="$TAG+git~$REV"
321+ dch -v "$VER" "Autopkgtest CI"
322+ # Build deb
323+ - uses: jtdor/build-deb-action@v1
324+ env:
325+ DEB_BUILD_OPTIONS: nocheck
326+ DPKG_GENSYMBOLS_CHECK_LEVEL: 0
327+ with:
328+ docker-image: ubuntu:mantic
329+ buildpackage-opts: --build=binary --no-sign
330+ extra-build-deps: python3-cffi libpython3-dev
331+ # work around LP: #1878225 as fallback
332+ - name: Preparing autopkgtest-build-lxd
333+ run: |
334+ sudo patch /usr/bin/autopkgtest-build-lxd .github/workflows/snapd.patch
335+ autopkgtest-build-lxd ubuntu-daily:mantic
336+ - name: Run autopkgtest
337+ run: |
338+ # using --setup-commands temporarily to install:
339+ # cmocka/pytest/rich/ethtool until they become proper test-deps
340+ sudo autopkgtest -U debian/artifacts/*.deb network-manager --apt-pocket=proposed=src:network-manager -- lxd autopkgtest/ubuntu/mantic/amd64 || test $? -eq 2 # allow for skipped tests (exit code = 2)
341diff --git a/.github/workflows/rpmbuild.yml b/.github/workflows/rpmbuild.yml
342new file mode 100644
343index 0000000..1dfb0b1
344--- /dev/null
345+++ b/.github/workflows/rpmbuild.yml
346@@ -0,0 +1,33 @@
347+name: RPM build
348+
349+on:
350+ push:
351+ branches: [ main, 'stable/**' ]
352+ pull_request:
353+ branches: [ '**' ]
354+
355+jobs:
356+ rpm:
357+ runs-on: ubuntu-latest
358+ strategy:
359+ fail-fast: false
360+ matrix:
361+ container:
362+ - fedora:latest
363+ # - fedora:rawhide
364+ - rockylinux:9
365+ container:
366+ image: ${{ matrix.container }}
367+ steps:
368+ - uses: actions/checkout@v2
369+ - name: Build & Test
370+ run: |
371+ cat /etc/os-release
372+ dnf -y install dnf-plugins-core rpmdevtools # for 'dnf builddep'
373+ dnf -y install epel-release || true
374+ dnf config-manager --set-enabled crb || true # Meson/CMocka on EL9
375+ dnf -y install centos-release-nfv-openvswitch || true # OVS on EL9
376+ dnf -y builddep rpm/netplan.spec
377+ adduser test
378+ chown -R test:test .
379+ su test -c 'rpmbuild -bi --build-in-place rpm/netplan.spec'
380diff --git a/.github/workflows/spread.yml b/.github/workflows/spread.yml
381index b968668..12eaeda 100644
382--- a/.github/workflows/spread.yml
383+++ b/.github/workflows/spread.yml
384@@ -2,9 +2,9 @@ name: Run spread
385
386 on:
387 push:
388- branches: [ main, 'stable/**' ]
389+ branches: [ main ]
390 pull_request:
391- branches: [ main, 'stable/**' ]
392+ branches: [ main ]
393
394 jobs:
395 spread:
396diff --git a/.gitignore b/.gitignore
397index 2eda3d5..739bc99 100644
398--- a/.gitignore
399+++ b/.gitignore
400@@ -8,5 +8,5 @@ __pycache__
401 .coverage
402 .vscode
403 src/_features.h
404-netplan/_features.py
405+netplan_cli/_features.py
406 dbus/io.netplan.Netplan.service
407diff --git a/.woke.yaml b/.woke.yaml
408index 5b165f9..8be7fba 100644
409--- a/.woke.yaml
410+++ b/.woke.yaml
411@@ -103,14 +103,6 @@ rules:
412 - foreperson
413 severity: warning
414
415- - name: dummy
416- terms:
417- - dummy
418- alternatives:
419- - placeholder
420- - sample
421- severity: warning
422-
423 - name: grandfathered
424 terms:
425 - grandfathered
426@@ -178,3 +170,4 @@ rules:
427 severity: warning
428 # Ignore rules
429 - name: he
430+ - name: dummy
431diff --git a/Doxyfile b/Doxyfile
432new file mode 100644
433index 0000000..19db167
434--- /dev/null
435+++ b/Doxyfile
436@@ -0,0 +1,2688 @@
437+# Doxyfile 1.9.4
438+
439+# This file describes the settings to be used by the documentation system
440+# doxygen (www.doxygen.org) for a project.
441+#
442+# All text after a double hash (##) is considered a comment and is placed in
443+# front of the TAG it is preceding.
444+#
445+# All text after a single hash (#) is considered a comment and will be ignored.
446+# The format is:
447+# TAG = value [value, ...]
448+# For lists, items can also be appended using:
449+# TAG += value [value, ...]
450+# Values that contain spaces should be placed between quotes (\" \").
451+#
452+# Note:
453+#
454+# Use doxygen to compare the used configuration file with the template
455+# configuration file:
456+# doxygen -x [configFile]
457+# Use doxygen to compare the used configuration file with the template
458+# configuration file without replacing the environment variables:
459+# doxygen -x_noenv [configFile]
460+
461+#---------------------------------------------------------------------------
462+# Project related configuration options
463+#---------------------------------------------------------------------------
464+
465+# This tag specifies the encoding used for all characters in the configuration
466+# file that follow. The default is UTF-8 which is also the encoding used for all
467+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
468+# iconv built into libc) for the transcoding. See
469+# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
470+# The default value is: UTF-8.
471+
472+DOXYFILE_ENCODING = UTF-8
473+
474+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
475+# double-quotes, unless you are using Doxywizard) that should identify the
476+# project for which the documentation is generated. This name is used in the
477+# title of most generated pages and in a few other places.
478+# The default value is: My Project.
479+
480+PROJECT_NAME = "Netplan"
481+
482+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
483+# could be handy for archiving the generated documentation or if some version
484+# control system is used.
485+
486+PROJECT_NUMBER =
487+
488+# Using the PROJECT_BRIEF tag one can provide an optional one line description
489+# for a project that appears at the top of each page and should give viewer a
490+# quick idea about the purpose of the project. Keep the description short.
491+
492+PROJECT_BRIEF =
493+
494+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
495+# in the documentation. The maximum height of the logo should not exceed 55
496+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
497+# the logo to the output directory.
498+
499+PROJECT_LOGO =
500+
501+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
502+# into which the generated documentation will be written. If a relative path is
503+# entered, it will be relative to the location where doxygen was started. If
504+# left blank the current directory will be used.
505+
506+OUTPUT_DIRECTORY =
507+
508+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
509+# sub-directories (in 2 levels) under the output directory of each output format
510+# and will distribute the generated files over these directories. Enabling this
511+# option can be useful when feeding doxygen a huge amount of source files, where
512+# putting all generated files in the same directory would otherwise causes
513+# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
514+# control the number of sub-directories.
515+# The default value is: NO.
516+
517+CREATE_SUBDIRS = NO
518+
519+# Controls the number of sub-directories that will be created when
520+# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
521+# level increment doubles the number of directories, resulting in 4096
522+# directories at level 8 which is the default and also the maximum value. The
523+# sub-directories are organized in 2 levels, the first level always has a fixed
524+# numer of 16 directories.
525+# Minimum value: 0, maximum value: 8, default value: 8.
526+# This tag requires that the tag CREATE_SUBDIRS is set to YES.
527+
528+CREATE_SUBDIRS_LEVEL = 8
529+
530+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
531+# characters to appear in the names of generated files. If set to NO, non-ASCII
532+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
533+# U+3044.
534+# The default value is: NO.
535+
536+ALLOW_UNICODE_NAMES = NO
537+
538+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
539+# documentation generated by doxygen is written. Doxygen will use this
540+# information to generate all constant output in the proper language.
541+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
542+# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
543+# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
544+# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
545+# English messages), Korean, Korean-en (Korean with English messages), Latvian,
546+# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
547+# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
548+# Swedish, Turkish, Ukrainian and Vietnamese.
549+# The default value is: English.
550+
551+OUTPUT_LANGUAGE = English
552+
553+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
554+# descriptions after the members that are listed in the file and class
555+# documentation (similar to Javadoc). Set to NO to disable this.
556+# The default value is: YES.
557+
558+BRIEF_MEMBER_DESC = YES
559+
560+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
561+# description of a member or function before the detailed description
562+#
563+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
564+# brief descriptions will be completely suppressed.
565+# The default value is: YES.
566+
567+REPEAT_BRIEF = YES
568+
569+# This tag implements a quasi-intelligent brief description abbreviator that is
570+# used to form the text in various listings. Each string in this list, if found
571+# as the leading text of the brief description, will be stripped from the text
572+# and the result, after processing the whole list, is used as the annotated
573+# text. Otherwise, the brief description is used as-is. If left blank, the
574+# following values are used ($name is automatically replaced with the name of
575+# the entity):The $name class, The $name widget, The $name file, is, provides,
576+# specifies, contains, represents, a, an and the.
577+
578+ABBREVIATE_BRIEF = "The $name class" \
579+ "The $name widget" \
580+ "The $name file" \
581+ is \
582+ provides \
583+ specifies \
584+ contains \
585+ represents \
586+ a \
587+ an \
588+ the
589+
590+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
591+# doxygen will generate a detailed section even if there is only a brief
592+# description.
593+# The default value is: NO.
594+
595+ALWAYS_DETAILED_SEC = NO
596+
597+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
598+# inherited members of a class in the documentation of that class as if those
599+# members were ordinary class members. Constructors, destructors and assignment
600+# operators of the base classes will not be shown.
601+# The default value is: NO.
602+
603+INLINE_INHERITED_MEMB = NO
604+
605+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
606+# before files name in the file list and in the header files. If set to NO the
607+# shortest path that makes the file name unique will be used
608+# The default value is: YES.
609+
610+FULL_PATH_NAMES = YES
611+
612+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
613+# Stripping is only done if one of the specified strings matches the left-hand
614+# part of the path. The tag can be used to show relative paths in the file list.
615+# If left blank the directory from which doxygen is run is used as the path to
616+# strip.
617+#
618+# Note that you can specify absolute paths here, but also relative paths, which
619+# will be relative from the directory where doxygen is started.
620+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
621+
622+STRIP_FROM_PATH =
623+
624+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
625+# path mentioned in the documentation of a class, which tells the reader which
626+# header file to include in order to use a class. If left blank only the name of
627+# the header file containing the class definition is used. Otherwise one should
628+# specify the list of include paths that are normally passed to the compiler
629+# using the -I flag.
630+
631+STRIP_FROM_INC_PATH =
632+
633+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
634+# less readable) file names. This can be useful is your file systems doesn't
635+# support long names like on DOS, Mac, or CD-ROM.
636+# The default value is: NO.
637+
638+SHORT_NAMES = NO
639+
640+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
641+# first line (until the first dot) of a Javadoc-style comment as the brief
642+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
643+# style comments (thus requiring an explicit @brief command for a brief
644+# description.)
645+# The default value is: NO.
646+
647+JAVADOC_AUTOBRIEF = NO
648+
649+# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
650+# such as
651+# /***************
652+# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
653+# Javadoc-style will behave just like regular comments and it will not be
654+# interpreted by doxygen.
655+# The default value is: NO.
656+
657+JAVADOC_BANNER = NO
658+
659+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
660+# line (until the first dot) of a Qt-style comment as the brief description. If
661+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
662+# requiring an explicit \brief command for a brief description.)
663+# The default value is: NO.
664+
665+QT_AUTOBRIEF = NO
666+
667+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
668+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
669+# a brief description. This used to be the default behavior. The new default is
670+# to treat a multi-line C++ comment block as a detailed description. Set this
671+# tag to YES if you prefer the old behavior instead.
672+#
673+# Note that setting this tag to YES also means that rational rose comments are
674+# not recognized any more.
675+# The default value is: NO.
676+
677+MULTILINE_CPP_IS_BRIEF = NO
678+
679+# By default Python docstrings are displayed as preformatted text and doxygen's
680+# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
681+# doxygen's special commands can be used and the contents of the docstring
682+# documentation blocks is shown as doxygen documentation.
683+# The default value is: YES.
684+
685+PYTHON_DOCSTRING = YES
686+
687+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
688+# documentation from any documented member that it re-implements.
689+# The default value is: YES.
690+
691+INHERIT_DOCS = YES
692+
693+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
694+# page for each member. If set to NO, the documentation of a member will be part
695+# of the file/class/namespace that contains it.
696+# The default value is: NO.
697+
698+SEPARATE_MEMBER_PAGES = NO
699+
700+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
701+# uses this value to replace tabs by spaces in code fragments.
702+# Minimum value: 1, maximum value: 16, default value: 4.
703+
704+TAB_SIZE = 4
705+
706+# This tag can be used to specify a number of aliases that act as commands in
707+# the documentation. An alias has the form:
708+# name=value
709+# For example adding
710+# "sideeffect=@par Side Effects:^^"
711+# will allow you to put the command \sideeffect (or @sideeffect) in the
712+# documentation, which will result in a user-defined paragraph with heading
713+# "Side Effects:". Note that you cannot put \n's in the value part of an alias
714+# to insert newlines (in the resulting output). You can put ^^ in the value part
715+# of an alias to insert a newline as if a physical newline was in the original
716+# file. When you need a literal { or } or , in the value part of an alias you
717+# have to escape them by means of a backslash (\), this can lead to conflicts
718+# with the commands \{ and \} for these it is advised to use the version @{ and
719+# @} or use a double escape (\\{ and \\})
720+
721+ALIASES =
722+
723+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
724+# only. Doxygen will then generate output that is more tailored for C. For
725+# instance, some of the names that are used will be different. The list of all
726+# members will be omitted, etc.
727+# The default value is: NO.
728+
729+OPTIMIZE_OUTPUT_FOR_C = NO
730+
731+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
732+# Python sources only. Doxygen will then generate output that is more tailored
733+# for that language. For instance, namespaces will be presented as packages,
734+# qualified scopes will look different, etc.
735+# The default value is: NO.
736+
737+OPTIMIZE_OUTPUT_JAVA = NO
738+
739+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
740+# sources. Doxygen will then generate output that is tailored for Fortran.
741+# The default value is: NO.
742+
743+OPTIMIZE_FOR_FORTRAN = NO
744+
745+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
746+# sources. Doxygen will then generate output that is tailored for VHDL.
747+# The default value is: NO.
748+
749+OPTIMIZE_OUTPUT_VHDL = NO
750+
751+# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
752+# sources only. Doxygen will then generate output that is more tailored for that
753+# language. For instance, namespaces will be presented as modules, types will be
754+# separated into more groups, etc.
755+# The default value is: NO.
756+
757+OPTIMIZE_OUTPUT_SLICE = NO
758+
759+# Doxygen selects the parser to use depending on the extension of the files it
760+# parses. With this tag you can assign which parser to use for a given
761+# extension. Doxygen has a built-in mapping, but you can override or extend it
762+# using this tag. The format is ext=language, where ext is a file extension, and
763+# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
764+# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
765+# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
766+# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
767+# tries to guess whether the code is fixed or free formatted code, this is the
768+# default for Fortran type files). For instance to make doxygen treat .inc files
769+# as Fortran files (default is PHP), and .f files as C (default is Fortran),
770+# use: inc=Fortran f=C.
771+#
772+# Note: For files without extension you can use no_extension as a placeholder.
773+#
774+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
775+# the files are not read by doxygen. When specifying no_extension you should add
776+# * to the FILE_PATTERNS.
777+#
778+# Note see also the list of default file extension mappings.
779+
780+EXTENSION_MAPPING =
781+
782+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
783+# according to the Markdown format, which allows for more readable
784+# documentation. See https://daringfireball.net/projects/markdown/ for details.
785+# The output of markdown processing is further processed by doxygen, so you can
786+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
787+# case of backward compatibilities issues.
788+# The default value is: YES.
789+
790+MARKDOWN_SUPPORT = YES
791+
792+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
793+# to that level are automatically included in the table of contents, even if
794+# they do not have an id attribute.
795+# Note: This feature currently applies only to Markdown headings.
796+# Minimum value: 0, maximum value: 99, default value: 5.
797+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
798+
799+TOC_INCLUDE_HEADINGS = 5
800+
801+# When enabled doxygen tries to link words that correspond to documented
802+# classes, or namespaces to their corresponding documentation. Such a link can
803+# be prevented in individual cases by putting a % sign in front of the word or
804+# globally by setting AUTOLINK_SUPPORT to NO.
805+# The default value is: YES.
806+
807+AUTOLINK_SUPPORT = YES
808+
809+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
810+# to include (a tag file for) the STL sources as input, then you should set this
811+# tag to YES in order to let doxygen match functions declarations and
812+# definitions whose arguments contain STL classes (e.g. func(std::string);
813+# versus func(std::string) {}). This also make the inheritance and collaboration
814+# diagrams that involve STL classes more complete and accurate.
815+# The default value is: NO.
816+
817+BUILTIN_STL_SUPPORT = NO
818+
819+# If you use Microsoft's C++/CLI language, you should set this option to YES to
820+# enable parsing support.
821+# The default value is: NO.
822+
823+CPP_CLI_SUPPORT = NO
824+
825+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
826+# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
827+# will parse them like normal C++ but will assume all classes use public instead
828+# of private inheritance when no explicit protection keyword is present.
829+# The default value is: NO.
830+
831+SIP_SUPPORT = NO
832+
833+# For Microsoft's IDL there are propget and propput attributes to indicate
834+# getter and setter methods for a property. Setting this option to YES will make
835+# doxygen to replace the get and set methods by a property in the documentation.
836+# This will only work if the methods are indeed getting or setting a simple
837+# type. If this is not the case, or you want to show the methods anyway, you
838+# should set this option to NO.
839+# The default value is: YES.
840+
841+IDL_PROPERTY_SUPPORT = YES
842+
843+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
844+# tag is set to YES then doxygen will reuse the documentation of the first
845+# member in the group (if any) for the other members of the group. By default
846+# all members of a group must be documented explicitly.
847+# The default value is: NO.
848+
849+DISTRIBUTE_GROUP_DOC = NO
850+
851+# If one adds a struct or class to a group and this option is enabled, then also
852+# any nested class or struct is added to the same group. By default this option
853+# is disabled and one has to add nested compounds explicitly via \ingroup.
854+# The default value is: NO.
855+
856+GROUP_NESTED_COMPOUNDS = NO
857+
858+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
859+# (for instance a group of public functions) to be put as a subgroup of that
860+# type (e.g. under the Public Functions section). Set it to NO to prevent
861+# subgrouping. Alternatively, this can be done per class using the
862+# \nosubgrouping command.
863+# The default value is: YES.
864+
865+SUBGROUPING = YES
866+
867+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
868+# are shown inside the group in which they are included (e.g. using \ingroup)
869+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
870+# and RTF).
871+#
872+# Note that this feature does not work in combination with
873+# SEPARATE_MEMBER_PAGES.
874+# The default value is: NO.
875+
876+INLINE_GROUPED_CLASSES = NO
877+
878+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
879+# with only public data fields or simple typedef fields will be shown inline in
880+# the documentation of the scope in which they are defined (i.e. file,
881+# namespace, or group documentation), provided this scope is documented. If set
882+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
883+# Man pages) or section (for LaTeX and RTF).
884+# The default value is: NO.
885+
886+INLINE_SIMPLE_STRUCTS = NO
887+
888+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
889+# enum is documented as struct, union, or enum with the name of the typedef. So
890+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
891+# with name TypeT. When disabled the typedef will appear as a member of a file,
892+# namespace, or class. And the struct will be named TypeS. This can typically be
893+# useful for C code in case the coding convention dictates that all compound
894+# types are typedef'ed and only the typedef is referenced, never the tag name.
895+# The default value is: NO.
896+
897+TYPEDEF_HIDES_STRUCT = NO
898+
899+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
900+# cache is used to resolve symbols given their name and scope. Since this can be
901+# an expensive process and often the same symbol appears multiple times in the
902+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
903+# doxygen will become slower. If the cache is too large, memory is wasted. The
904+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
905+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
906+# symbols. At the end of a run doxygen will report the cache usage and suggest
907+# the optimal cache size from a speed point of view.
908+# Minimum value: 0, maximum value: 9, default value: 0.
909+
910+LOOKUP_CACHE_SIZE = 0
911+
912+# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
913+# during processing. When set to 0 doxygen will based this on the number of
914+# cores available in the system. You can set it explicitly to a value larger
915+# than 0 to get more control over the balance between CPU load and processing
916+# speed. At this moment only the input processing can be done using multiple
917+# threads. Since this is still an experimental feature the default is set to 1,
918+# which effectively disables parallel processing. Please report any issues you
919+# encounter. Generating dot graphs in parallel is controlled by the
920+# DOT_NUM_THREADS setting.
921+# Minimum value: 0, maximum value: 32, default value: 1.
922+
923+NUM_PROC_THREADS = 1
924+
925+#---------------------------------------------------------------------------
926+# Build related configuration options
927+#---------------------------------------------------------------------------
928+
929+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
930+# documentation are documented, even if no documentation was available. Private
931+# class members and static file members will be hidden unless the
932+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
933+# Note: This will also disable the warnings about undocumented members that are
934+# normally produced when WARNINGS is set to YES.
935+# The default value is: NO.
936+
937+EXTRACT_ALL = NO
938+
939+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
940+# be included in the documentation.
941+# The default value is: NO.
942+
943+EXTRACT_PRIVATE = NO
944+
945+# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
946+# methods of a class will be included in the documentation.
947+# The default value is: NO.
948+
949+EXTRACT_PRIV_VIRTUAL = NO
950+
951+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
952+# scope will be included in the documentation.
953+# The default value is: NO.
954+
955+EXTRACT_PACKAGE = NO
956+
957+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
958+# included in the documentation.
959+# The default value is: NO.
960+
961+EXTRACT_STATIC = NO
962+
963+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
964+# locally in source files will be included in the documentation. If set to NO,
965+# only classes defined in header files are included. Does not have any effect
966+# for Java sources.
967+# The default value is: YES.
968+
969+EXTRACT_LOCAL_CLASSES = YES
970+
971+# This flag is only useful for Objective-C code. If set to YES, local methods,
972+# which are defined in the implementation section but not in the interface are
973+# included in the documentation. If set to NO, only methods in the interface are
974+# included.
975+# The default value is: NO.
976+
977+EXTRACT_LOCAL_METHODS = NO
978+
979+# If this flag is set to YES, the members of anonymous namespaces will be
980+# extracted and appear in the documentation as a namespace called
981+# 'anonymous_namespace{file}', where file will be replaced with the base name of
982+# the file that contains the anonymous namespace. By default anonymous namespace
983+# are hidden.
984+# The default value is: NO.
985+
986+EXTRACT_ANON_NSPACES = NO
987+
988+# If this flag is set to YES, the name of an unnamed parameter in a declaration
989+# will be determined by the corresponding definition. By default unnamed
990+# parameters remain unnamed in the output.
991+# The default value is: YES.
992+
993+RESOLVE_UNNAMED_PARAMS = YES
994+
995+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
996+# undocumented members inside documented classes or files. If set to NO these
997+# members will be included in the various overviews, but no documentation
998+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
999+# The default value is: NO.
1000+
1001+HIDE_UNDOC_MEMBERS = NO
1002+
1003+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
1004+# undocumented classes that are normally visible in the class hierarchy. If set
1005+# to NO, these classes will be included in the various overviews. This option
1006+# has no effect if EXTRACT_ALL is enabled.
1007+# The default value is: NO.
1008+
1009+HIDE_UNDOC_CLASSES = NO
1010+
1011+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
1012+# declarations. If set to NO, these declarations will be included in the
1013+# documentation.
1014+# The default value is: NO.
1015+
1016+HIDE_FRIEND_COMPOUNDS = NO
1017+
1018+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
1019+# documentation blocks found inside the body of a function. If set to NO, these
1020+# blocks will be appended to the function's detailed documentation block.
1021+# The default value is: NO.
1022+
1023+HIDE_IN_BODY_DOCS = NO
1024+
1025+# The INTERNAL_DOCS tag determines if documentation that is typed after a
1026+# \internal command is included. If the tag is set to NO then the documentation
1027+# will be excluded. Set it to YES to include the internal documentation.
1028+# The default value is: NO.
1029+
1030+INTERNAL_DOCS = NO
1031+
1032+# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
1033+# able to match the capabilities of the underlying filesystem. In case the
1034+# filesystem is case sensitive (i.e. it supports files in the same directory
1035+# whose names only differ in casing), the option must be set to YES to properly
1036+# deal with such files in case they appear in the input. For filesystems that
1037+# are not case sensitive the option should be set to NO to properly deal with
1038+# output files written for symbols that only differ in casing, such as for two
1039+# classes, one named CLASS and the other named Class, and to also support
1040+# references to files without having to specify the exact matching casing. On
1041+# Windows (including Cygwin) and MacOS, users should typically set this option
1042+# to NO, whereas on Linux or other Unix flavors it should typically be set to
1043+# YES.
1044+# The default value is: system dependent.
1045+
1046+CASE_SENSE_NAMES = YES
1047+
1048+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
1049+# their full class and namespace scopes in the documentation. If set to YES, the
1050+# scope will be hidden.
1051+# The default value is: NO.
1052+
1053+HIDE_SCOPE_NAMES = NO
1054+
1055+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
1056+# append additional text to a page's title, such as Class Reference. If set to
1057+# YES the compound reference will be hidden.
1058+# The default value is: NO.
1059+
1060+HIDE_COMPOUND_REFERENCE= NO
1061+
1062+# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
1063+# will show which file needs to be included to use the class.
1064+# The default value is: YES.
1065+
1066+SHOW_HEADERFILE = YES
1067+
1068+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
1069+# the files that are included by a file in the documentation of that file.
1070+# The default value is: YES.
1071+
1072+SHOW_INCLUDE_FILES = YES
1073+
1074+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
1075+# grouped member an include statement to the documentation, telling the reader
1076+# which file to include in order to use the member.
1077+# The default value is: NO.
1078+
1079+SHOW_GROUPED_MEMB_INC = NO
1080+
1081+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
1082+# files with double quotes in the documentation rather than with sharp brackets.
1083+# The default value is: NO.
1084+
1085+FORCE_LOCAL_INCLUDES = NO
1086+
1087+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
1088+# documentation for inline members.
1089+# The default value is: YES.
1090+
1091+INLINE_INFO = YES
1092+
1093+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
1094+# (detailed) documentation of file and class members alphabetically by member
1095+# name. If set to NO, the members will appear in declaration order.
1096+# The default value is: YES.
1097+
1098+SORT_MEMBER_DOCS = YES
1099+
1100+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
1101+# descriptions of file, namespace and class members alphabetically by member
1102+# name. If set to NO, the members will appear in declaration order. Note that
1103+# this will also influence the order of the classes in the class list.
1104+# The default value is: NO.
1105+
1106+SORT_BRIEF_DOCS = NO
1107+
1108+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
1109+# (brief and detailed) documentation of class members so that constructors and
1110+# destructors are listed first. If set to NO the constructors will appear in the
1111+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
1112+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
1113+# member documentation.
1114+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
1115+# detailed member documentation.
1116+# The default value is: NO.
1117+
1118+SORT_MEMBERS_CTORS_1ST = NO
1119+
1120+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
1121+# of group names into alphabetical order. If set to NO the group names will
1122+# appear in their defined order.
1123+# The default value is: NO.
1124+
1125+SORT_GROUP_NAMES = NO
1126+
1127+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
1128+# fully-qualified names, including namespaces. If set to NO, the class list will
1129+# be sorted only by class name, not including the namespace part.
1130+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
1131+# Note: This option applies only to the class list, not to the alphabetical
1132+# list.
1133+# The default value is: NO.
1134+
1135+SORT_BY_SCOPE_NAME = NO
1136+
1137+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
1138+# type resolution of all parameters of a function it will reject a match between
1139+# the prototype and the implementation of a member function even if there is
1140+# only one candidate or it is obvious which candidate to choose by doing a
1141+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
1142+# accept a match between prototype and implementation in such cases.
1143+# The default value is: NO.
1144+
1145+STRICT_PROTO_MATCHING = NO
1146+
1147+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
1148+# list. This list is created by putting \todo commands in the documentation.
1149+# The default value is: YES.
1150+
1151+GENERATE_TODOLIST = YES
1152+
1153+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
1154+# list. This list is created by putting \test commands in the documentation.
1155+# The default value is: YES.
1156+
1157+GENERATE_TESTLIST = YES
1158+
1159+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
1160+# list. This list is created by putting \bug commands in the documentation.
1161+# The default value is: YES.
1162+
1163+GENERATE_BUGLIST = YES
1164+
1165+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
1166+# the deprecated list. This list is created by putting \deprecated commands in
1167+# the documentation.
1168+# The default value is: YES.
1169+
1170+GENERATE_DEPRECATEDLIST= YES
1171+
1172+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
1173+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
1174+# ... \endcond blocks.
1175+
1176+ENABLED_SECTIONS =
1177+
1178+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
1179+# initial value of a variable or macro / define can have for it to appear in the
1180+# documentation. If the initializer consists of more lines than specified here
1181+# it will be hidden. Use a value of 0 to hide initializers completely. The
1182+# appearance of the value of individual variables and macros / defines can be
1183+# controlled using \showinitializer or \hideinitializer command in the
1184+# documentation regardless of this setting.
1185+# Minimum value: 0, maximum value: 10000, default value: 30.
1186+
1187+MAX_INITIALIZER_LINES = 30
1188+
1189+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
1190+# the bottom of the documentation of classes and structs. If set to YES, the
1191+# list will mention the files that were used to generate the documentation.
1192+# The default value is: YES.
1193+
1194+SHOW_USED_FILES = YES
1195+
1196+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
1197+# will remove the Files entry from the Quick Index and from the Folder Tree View
1198+# (if specified).
1199+# The default value is: YES.
1200+
1201+SHOW_FILES = YES
1202+
1203+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
1204+# page. This will remove the Namespaces entry from the Quick Index and from the
1205+# Folder Tree View (if specified).
1206+# The default value is: YES.
1207+
1208+SHOW_NAMESPACES = YES
1209+
1210+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
1211+# doxygen should invoke to get the current version for each file (typically from
1212+# the version control system). Doxygen will invoke the program by executing (via
1213+# popen()) the command command input-file, where command is the value of the
1214+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
1215+# by doxygen. Whatever the program writes to standard output is used as the file
1216+# version. For an example see the documentation.
1217+
1218+FILE_VERSION_FILTER =
1219+
1220+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
1221+# by doxygen. The layout file controls the global structure of the generated
1222+# output files in an output format independent way. To create the layout file
1223+# that represents doxygen's defaults, run doxygen with the -l option. You can
1224+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
1225+# will be used as the name of the layout file. See also section "Changing the
1226+# layout of pages" for information.
1227+#
1228+# Note that if you run doxygen from a directory containing a file called
1229+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
1230+# tag is left empty.
1231+
1232+LAYOUT_FILE =
1233+
1234+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
1235+# the reference definitions. This must be a list of .bib files. The .bib
1236+# extension is automatically appended if omitted. This requires the bibtex tool
1237+# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
1238+# For LaTeX the style of the bibliography can be controlled using
1239+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
1240+# search path. See also \cite for info how to create references.
1241+
1242+CITE_BIB_FILES =
1243+
1244+#---------------------------------------------------------------------------
1245+# Configuration options related to warning and progress messages
1246+#---------------------------------------------------------------------------
1247+
1248+# The QUIET tag can be used to turn on/off the messages that are generated to
1249+# standard output by doxygen. If QUIET is set to YES this implies that the
1250+# messages are off.
1251+# The default value is: NO.
1252+
1253+QUIET = NO
1254+
1255+# The WARNINGS tag can be used to turn on/off the warning messages that are
1256+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
1257+# this implies that the warnings are on.
1258+#
1259+# Tip: Turn warnings on while writing the documentation.
1260+# The default value is: YES.
1261+
1262+WARNINGS = YES
1263+
1264+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
1265+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
1266+# will automatically be disabled.
1267+# The default value is: YES.
1268+
1269+WARN_IF_UNDOCUMENTED = YES
1270+
1271+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
1272+# potential errors in the documentation, such as documenting some parameters in
1273+# a documented function twice, or documenting parameters that don't exist or
1274+# using markup commands wrongly.
1275+# The default value is: YES.
1276+
1277+WARN_IF_DOC_ERROR = YES
1278+
1279+# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
1280+# function parameter documentation. If set to NO, doxygen will accept that some
1281+# parameters have no documentation without warning.
1282+# The default value is: YES.
1283+
1284+WARN_IF_INCOMPLETE_DOC = YES
1285+
1286+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
1287+# are documented, but have no documentation for their parameters or return
1288+# value. If set to NO, doxygen will only warn about wrong parameter
1289+# documentation, but not about the absence of documentation. If EXTRACT_ALL is
1290+# set to YES then this flag will automatically be disabled. See also
1291+# WARN_IF_INCOMPLETE_DOC
1292+# The default value is: NO.
1293+
1294+WARN_NO_PARAMDOC = NO
1295+
1296+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
1297+# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
1298+# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
1299+# at the end of the doxygen process doxygen will return with a non-zero status.
1300+# Possible values are: NO, YES and FAIL_ON_WARNINGS.
1301+# The default value is: NO.
1302+
1303+WARN_AS_ERROR = NO
1304+
1305+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
1306+# can produce. The string should contain the $file, $line, and $text tags, which
1307+# will be replaced by the file and line number from which the warning originated
1308+# and the warning text. Optionally the format may contain $version, which will
1309+# be replaced by the version of the file (if it could be obtained via
1310+# FILE_VERSION_FILTER)
1311+# See also: WARN_LINE_FORMAT
1312+# The default value is: $file:$line: $text.
1313+
1314+WARN_FORMAT = "$file:$line: $text"
1315+
1316+# In the $text part of the WARN_FORMAT command it is possible that a reference
1317+# to a more specific place is given. To make it easier to jump to this place
1318+# (outside of doxygen) the user can define a custom "cut" / "paste" string.
1319+# Example:
1320+# WARN_LINE_FORMAT = "'vi $file +$line'"
1321+# See also: WARN_FORMAT
1322+# The default value is: at line $line of file $file.
1323+
1324+WARN_LINE_FORMAT = "at line $line of file $file"
1325+
1326+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
1327+# messages should be written. If left blank the output is written to standard
1328+# error (stderr). In case the file specified cannot be opened for writing the
1329+# warning and error messages are written to standard error. When as file - is
1330+# specified the warning and error messages are written to standard output
1331+# (stdout).
1332+
1333+WARN_LOGFILE =
1334+
1335+#---------------------------------------------------------------------------
1336+# Configuration options related to the input files
1337+#---------------------------------------------------------------------------
1338+
1339+# The INPUT tag is used to specify the files and/or directories that contain
1340+# documented source files. You may enter file names like myfile.cpp or
1341+# directories like /usr/src/myproject. Separate the files or directories with
1342+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
1343+# Note: If this tag is empty the current directory is searched.
1344+
1345+INPUT = src/ include/
1346+
1347+# This tag can be used to specify the character encoding of the source files
1348+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
1349+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
1350+# documentation (see:
1351+# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
1352+# The default value is: UTF-8.
1353+
1354+INPUT_ENCODING = UTF-8
1355+
1356+# If the value of the INPUT tag contains directories, you can use the
1357+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
1358+# *.h) to filter out the source-files in the directories.
1359+#
1360+# Note that for custom extensions or not directly supported extensions you also
1361+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
1362+# read by doxygen.
1363+#
1364+# Note the list of default checked file patterns might differ from the list of
1365+# default file extension mappings.
1366+#
1367+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
1368+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
1369+# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml,
1370+# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C
1371+# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
1372+# *.vhdl, *.ucf, *.qsf and *.ice.
1373+
1374+#FILE_PATTERNS = *.c *.h
1375+
1376+# The RECURSIVE tag can be used to specify whether or not subdirectories should
1377+# be searched for input files as well.
1378+# The default value is: NO.
1379+
1380+RECURSIVE = YES
1381+
1382+# The EXCLUDE tag can be used to specify files and/or directories that should be
1383+# excluded from the INPUT source files. This way you can easily exclude a
1384+# subdirectory from a directory tree whose root is specified with the INPUT tag.
1385+#
1386+# Note that relative paths are relative to the directory from which doxygen is
1387+# run.
1388+
1389+EXCLUDE =
1390+
1391+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
1392+# directories that are symbolic links (a Unix file system feature) are excluded
1393+# from the input.
1394+# The default value is: NO.
1395+
1396+EXCLUDE_SYMLINKS = NO
1397+
1398+# If the value of the INPUT tag contains directories, you can use the
1399+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
1400+# certain files from those directories.
1401+#
1402+# Note that the wildcards are matched against the file with absolute path, so to
1403+# exclude all test directories for example use the pattern */test/*
1404+
1405+EXCLUDE_PATTERNS = */tests/* */doc/*
1406+
1407+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
1408+# (namespaces, classes, functions, etc.) that should be excluded from the
1409+# output. The symbol name can be a fully qualified name, a word, or if the
1410+# wildcard * is used, a substring. Examples: ANamespace, AClass,
1411+# ANamespace::AClass, ANamespace::*Test
1412+#
1413+# Note that the wildcards are matched against the file with absolute path, so to
1414+# exclude all test directories use the pattern */test/*
1415+
1416+EXCLUDE_SYMBOLS =
1417+
1418+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
1419+# that contain example code fragments that are included (see the \include
1420+# command).
1421+
1422+EXAMPLE_PATH =
1423+
1424+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
1425+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
1426+# *.h) to filter out the source-files in the directories. If left blank all
1427+# files are included.
1428+
1429+EXAMPLE_PATTERNS = *
1430+
1431+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
1432+# searched for input files to be used with the \include or \dontinclude commands
1433+# irrespective of the value of the RECURSIVE tag.
1434+# The default value is: NO.
1435+
1436+EXAMPLE_RECURSIVE = NO
1437+
1438+# The IMAGE_PATH tag can be used to specify one or more files or directories
1439+# that contain images that are to be included in the documentation (see the
1440+# \image command).
1441+
1442+IMAGE_PATH =
1443+
1444+# The INPUT_FILTER tag can be used to specify a program that doxygen should
1445+# invoke to filter for each input file. Doxygen will invoke the filter program
1446+# by executing (via popen()) the command:
1447+#
1448+# <filter> <input-file>
1449+#
1450+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
1451+# name of an input file. Doxygen will then use the output that the filter
1452+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
1453+# will be ignored.
1454+#
1455+# Note that the filter must not add or remove lines; it is applied before the
1456+# code is scanned, but not when the output code is generated. If lines are added
1457+# or removed, the anchors will not be placed correctly.
1458+#
1459+# Note that for custom extensions or not directly supported extensions you also
1460+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
1461+# properly processed by doxygen.
1462+
1463+INPUT_FILTER =
1464+
1465+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
1466+# basis. Doxygen will compare the file name with each pattern and apply the
1467+# filter if there is a match. The filters are a list of the form: pattern=filter
1468+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
1469+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
1470+# patterns match the file name, INPUT_FILTER is applied.
1471+#
1472+# Note that for custom extensions or not directly supported extensions you also
1473+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
1474+# properly processed by doxygen.
1475+
1476+FILTER_PATTERNS =
1477+
1478+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
1479+# INPUT_FILTER) will also be used to filter the input files that are used for
1480+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
1481+# The default value is: NO.
1482+
1483+FILTER_SOURCE_FILES = NO
1484+
1485+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
1486+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
1487+# it is also possible to disable source filtering for a specific pattern using
1488+# *.ext= (so without naming a filter).
1489+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
1490+
1491+FILTER_SOURCE_PATTERNS =
1492+
1493+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
1494+# is part of the input, its contents will be placed on the main page
1495+# (index.html). This can be useful if you have a project on for instance GitHub
1496+# and want to reuse the introduction page also for the doxygen output.
1497+
1498+USE_MDFILE_AS_MAINPAGE =
1499+
1500+#---------------------------------------------------------------------------
1501+# Configuration options related to source browsing
1502+#---------------------------------------------------------------------------
1503+
1504+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
1505+# generated. Documented entities will be cross-referenced with these sources.
1506+#
1507+# Note: To get rid of all source code in the generated output, make sure that
1508+# also VERBATIM_HEADERS is set to NO.
1509+# The default value is: NO.
1510+
1511+SOURCE_BROWSER = NO
1512+
1513+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
1514+# classes and enums directly into the documentation.
1515+# The default value is: NO.
1516+
1517+INLINE_SOURCES = NO
1518+
1519+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
1520+# special comment blocks from generated source code fragments. Normal C, C++ and
1521+# Fortran comments will always remain visible.
1522+# The default value is: YES.
1523+
1524+STRIP_CODE_COMMENTS = YES
1525+
1526+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
1527+# entity all documented functions referencing it will be listed.
1528+# The default value is: NO.
1529+
1530+REFERENCED_BY_RELATION = NO
1531+
1532+# If the REFERENCES_RELATION tag is set to YES then for each documented function
1533+# all documented entities called/used by that function will be listed.
1534+# The default value is: NO.
1535+
1536+REFERENCES_RELATION = NO
1537+
1538+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
1539+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
1540+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
1541+# link to the documentation.
1542+# The default value is: YES.
1543+
1544+REFERENCES_LINK_SOURCE = YES
1545+
1546+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
1547+# source code will show a tooltip with additional information such as prototype,
1548+# brief description and links to the definition and documentation. Since this
1549+# will make the HTML file larger and loading of large files a bit slower, you
1550+# can opt to disable this feature.
1551+# The default value is: YES.
1552+# This tag requires that the tag SOURCE_BROWSER is set to YES.
1553+
1554+SOURCE_TOOLTIPS = YES
1555+
1556+# If the USE_HTAGS tag is set to YES then the references to source code will
1557+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
1558+# source browser. The htags tool is part of GNU's global source tagging system
1559+# (see https://www.gnu.org/software/global/global.html). You will need version
1560+# 4.8.6 or higher.
1561+#
1562+# To use it do the following:
1563+# - Install the latest version of global
1564+# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
1565+# - Make sure the INPUT points to the root of the source tree
1566+# - Run doxygen as normal
1567+#
1568+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
1569+# tools must be available from the command line (i.e. in the search path).
1570+#
1571+# The result: instead of the source browser generated by doxygen, the links to
1572+# source code will now point to the output of htags.
1573+# The default value is: NO.
1574+# This tag requires that the tag SOURCE_BROWSER is set to YES.
1575+
1576+USE_HTAGS = NO
1577+
1578+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
1579+# verbatim copy of the header file for each class for which an include is
1580+# specified. Set to NO to disable this.
1581+# See also: Section \class.
1582+# The default value is: YES.
1583+
1584+VERBATIM_HEADERS = YES
1585+
1586+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
1587+# clang parser (see:
1588+# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
1589+# performance. This can be particularly helpful with template rich C++ code for
1590+# which doxygen's built-in parser lacks the necessary type information.
1591+# Note: The availability of this option depends on whether or not doxygen was
1592+# generated with the -Duse_libclang=ON option for CMake.
1593+# The default value is: NO.
1594+
1595+CLANG_ASSISTED_PARSING = NO
1596+
1597+# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
1598+# tag is set to YES then doxygen will add the directory of each input to the
1599+# include path.
1600+# The default value is: YES.
1601+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
1602+
1603+CLANG_ADD_INC_PATHS = YES
1604+
1605+# If clang assisted parsing is enabled you can provide the compiler with command
1606+# line options that you would normally use when invoking the compiler. Note that
1607+# the include paths will already be set by doxygen for the files and directories
1608+# specified with INPUT and INCLUDE_PATH.
1609+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
1610+
1611+CLANG_OPTIONS =
1612+
1613+# If clang assisted parsing is enabled you can provide the clang parser with the
1614+# path to the directory containing a file called compile_commands.json. This
1615+# file is the compilation database (see:
1616+# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
1617+# options used when the source files were built. This is equivalent to
1618+# specifying the -p option to a clang tool, such as clang-check. These options
1619+# will then be passed to the parser. Any options specified with CLANG_OPTIONS
1620+# will be added as well.
1621+# Note: The availability of this option depends on whether or not doxygen was
1622+# generated with the -Duse_libclang=ON option for CMake.
1623+
1624+CLANG_DATABASE_PATH =
1625+
1626+#---------------------------------------------------------------------------
1627+# Configuration options related to the alphabetical class index
1628+#---------------------------------------------------------------------------
1629+
1630+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
1631+# compounds will be generated. Enable this if the project contains a lot of
1632+# classes, structs, unions or interfaces.
1633+# The default value is: YES.
1634+
1635+ALPHABETICAL_INDEX = YES
1636+
1637+# In case all classes in a project start with a common prefix, all classes will
1638+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
1639+# can be used to specify a prefix (or a list of prefixes) that should be ignored
1640+# while generating the index headers.
1641+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1642+
1643+IGNORE_PREFIX =
1644+
1645+#---------------------------------------------------------------------------
1646+# Configuration options related to the HTML output
1647+#---------------------------------------------------------------------------
1648+
1649+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
1650+# The default value is: YES.
1651+
1652+GENERATE_HTML = YES
1653+
1654+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
1655+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1656+# it.
1657+# The default directory is: html.
1658+# This tag requires that the tag GENERATE_HTML is set to YES.
1659+
1660+HTML_OUTPUT = html
1661+
1662+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
1663+# generated HTML page (for example: .htm, .php, .asp).
1664+# The default value is: .html.
1665+# This tag requires that the tag GENERATE_HTML is set to YES.
1666+
1667+HTML_FILE_EXTENSION = .html
1668+
1669+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
1670+# each generated HTML page. If the tag is left blank doxygen will generate a
1671+# standard header.
1672+#
1673+# To get valid HTML the header file that includes any scripts and style sheets
1674+# that doxygen needs, which is dependent on the configuration options used (e.g.
1675+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
1676+# default header using
1677+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
1678+# YourConfigFile
1679+# and then modify the file new_header.html. See also section "Doxygen usage"
1680+# for information on how to generate the default header that doxygen normally
1681+# uses.
1682+# Note: The header is subject to change so you typically have to regenerate the
1683+# default header when upgrading to a newer version of doxygen. For a description
1684+# of the possible markers and block names see the documentation.
1685+# This tag requires that the tag GENERATE_HTML is set to YES.
1686+
1687+HTML_HEADER =
1688+
1689+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1690+# generated HTML page. If the tag is left blank doxygen will generate a standard
1691+# footer. See HTML_HEADER for more information on how to generate a default
1692+# footer and what special commands can be used inside the footer. See also
1693+# section "Doxygen usage" for information on how to generate the default footer
1694+# that doxygen normally uses.
1695+# This tag requires that the tag GENERATE_HTML is set to YES.
1696+
1697+HTML_FOOTER =
1698+
1699+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1700+# sheet that is used by each HTML page. It can be used to fine-tune the look of
1701+# the HTML output. If left blank doxygen will generate a default style sheet.
1702+# See also section "Doxygen usage" for information on how to generate the style
1703+# sheet that doxygen normally uses.
1704+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
1705+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
1706+# obsolete.
1707+# This tag requires that the tag GENERATE_HTML is set to YES.
1708+
1709+HTML_STYLESHEET =
1710+
1711+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1712+# cascading style sheets that are included after the standard style sheets
1713+# created by doxygen. Using this option one can overrule certain style aspects.
1714+# This is preferred over using HTML_STYLESHEET since it does not replace the
1715+# standard style sheet and is therefore more robust against future updates.
1716+# Doxygen will copy the style sheet files to the output directory.
1717+# Note: The order of the extra style sheet files is of importance (e.g. the last
1718+# style sheet in the list overrules the setting of the previous ones in the
1719+# list). For an example see the documentation.
1720+# This tag requires that the tag GENERATE_HTML is set to YES.
1721+
1722+HTML_EXTRA_STYLESHEET =
1723+
1724+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1725+# other source files which should be copied to the HTML output directory. Note
1726+# that these files will be copied to the base HTML output directory. Use the
1727+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1728+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
1729+# files will be copied as-is; there are no commands or markers available.
1730+# This tag requires that the tag GENERATE_HTML is set to YES.
1731+
1732+HTML_EXTRA_FILES =
1733+
1734+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1735+# will adjust the colors in the style sheet and background images according to
1736+# this color. Hue is specified as an angle on a color-wheel, see
1737+# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
1738+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1739+# purple, and 360 is red again.
1740+# Minimum value: 0, maximum value: 359, default value: 220.
1741+# This tag requires that the tag GENERATE_HTML is set to YES.
1742+
1743+HTML_COLORSTYLE_HUE = 220
1744+
1745+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
1746+# in the HTML output. For a value of 0 the output will use gray-scales only. A
1747+# value of 255 will produce the most vivid colors.
1748+# Minimum value: 0, maximum value: 255, default value: 100.
1749+# This tag requires that the tag GENERATE_HTML is set to YES.
1750+
1751+HTML_COLORSTYLE_SAT = 100
1752+
1753+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
1754+# luminance component of the colors in the HTML output. Values below 100
1755+# gradually make the output lighter, whereas values above 100 make the output
1756+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
1757+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
1758+# change the gamma.
1759+# Minimum value: 40, maximum value: 240, default value: 80.
1760+# This tag requires that the tag GENERATE_HTML is set to YES.
1761+
1762+HTML_COLORSTYLE_GAMMA = 80
1763+
1764+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1765+# page will contain the date and time when the page was generated. Setting this
1766+# to YES can help to show when doxygen was last run and thus if the
1767+# documentation is up to date.
1768+# The default value is: NO.
1769+# This tag requires that the tag GENERATE_HTML is set to YES.
1770+
1771+HTML_TIMESTAMP = NO
1772+
1773+# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
1774+# documentation will contain a main index with vertical navigation menus that
1775+# are dynamically created via JavaScript. If disabled, the navigation index will
1776+# consists of multiple levels of tabs that are statically embedded in every HTML
1777+# page. Disable this option to support browsers that do not have JavaScript,
1778+# like the Qt help browser.
1779+# The default value is: YES.
1780+# This tag requires that the tag GENERATE_HTML is set to YES.
1781+
1782+HTML_DYNAMIC_MENUS = YES
1783+
1784+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1785+# documentation will contain sections that can be hidden and shown after the
1786+# page has loaded.
1787+# The default value is: NO.
1788+# This tag requires that the tag GENERATE_HTML is set to YES.
1789+
1790+HTML_DYNAMIC_SECTIONS = NO
1791+
1792+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1793+# shown in the various tree structured indices initially; the user can expand
1794+# and collapse entries dynamically later on. Doxygen will expand the tree to
1795+# such a level that at most the specified number of entries are visible (unless
1796+# a fully collapsed tree already exceeds this amount). So setting the number of
1797+# entries 1 will produce a full collapsed tree by default. 0 is a special value
1798+# representing an infinite number of entries and will result in a full expanded
1799+# tree by default.
1800+# Minimum value: 0, maximum value: 9999, default value: 100.
1801+# This tag requires that the tag GENERATE_HTML is set to YES.
1802+
1803+HTML_INDEX_NUM_ENTRIES = 100
1804+
1805+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
1806+# generated that can be used as input for Apple's Xcode 3 integrated development
1807+# environment (see:
1808+# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
1809+# create a documentation set, doxygen will generate a Makefile in the HTML
1810+# output directory. Running make will produce the docset in that directory and
1811+# running make install will install the docset in
1812+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1813+# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
1814+# genXcode/_index.html for more information.
1815+# The default value is: NO.
1816+# This tag requires that the tag GENERATE_HTML is set to YES.
1817+
1818+GENERATE_DOCSET = NO
1819+
1820+# This tag determines the name of the docset feed. A documentation feed provides
1821+# an umbrella under which multiple documentation sets from a single provider
1822+# (such as a company or product suite) can be grouped.
1823+# The default value is: Doxygen generated docs.
1824+# This tag requires that the tag GENERATE_DOCSET is set to YES.
1825+
1826+DOCSET_FEEDNAME = "Doxygen generated docs"
1827+
1828+# This tag determines the URL of the docset feed. A documentation feed provides
1829+# an umbrella under which multiple documentation sets from a single provider
1830+# (such as a company or product suite) can be grouped.
1831+# This tag requires that the tag GENERATE_DOCSET is set to YES.
1832+
1833+DOCSET_FEEDURL =
1834+
1835+# This tag specifies a string that should uniquely identify the documentation
1836+# set bundle. This should be a reverse domain-name style string, e.g.
1837+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
1838+# The default value is: org.doxygen.Project.
1839+# This tag requires that the tag GENERATE_DOCSET is set to YES.
1840+
1841+DOCSET_BUNDLE_ID = org.doxygen.Project
1842+
1843+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
1844+# the documentation publisher. This should be a reverse domain-name style
1845+# string, e.g. com.mycompany.MyDocSet.documentation.
1846+# The default value is: org.doxygen.Publisher.
1847+# This tag requires that the tag GENERATE_DOCSET is set to YES.
1848+
1849+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1850+
1851+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
1852+# The default value is: Publisher.
1853+# This tag requires that the tag GENERATE_DOCSET is set to YES.
1854+
1855+DOCSET_PUBLISHER_NAME = Publisher
1856+
1857+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1858+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1859+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1860+# on Windows. In the beginning of 2021 Microsoft took the original page, with
1861+# a.o. the download links, offline the HTML help workshop was already many years
1862+# in maintenance mode). You can download the HTML help workshop from the web
1863+# archives at Installation executable (see:
1864+# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
1865+# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
1866+#
1867+# The HTML Help Workshop contains a compiler that can convert all HTML output
1868+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
1869+# files are now used as the Windows 98 help format, and will replace the old
1870+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
1871+# HTML files also contain an index, a table of contents, and you can search for
1872+# words in the documentation. The HTML workshop also contains a viewer for
1873+# compressed HTML files.
1874+# The default value is: NO.
1875+# This tag requires that the tag GENERATE_HTML is set to YES.
1876+
1877+GENERATE_HTMLHELP = NO
1878+
1879+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
1880+# file. You can add a path in front of the file if the result should not be
1881+# written to the html output directory.
1882+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1883+
1884+CHM_FILE =
1885+
1886+# The HHC_LOCATION tag can be used to specify the location (absolute path
1887+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
1888+# doxygen will try to run the HTML help compiler on the generated index.hhp.
1889+# The file has to be specified with full path.
1890+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1891+
1892+HHC_LOCATION =
1893+
1894+# The GENERATE_CHI flag controls if a separate .chi index file is generated
1895+# (YES) or that it should be included in the main .chm file (NO).
1896+# The default value is: NO.
1897+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1898+
1899+GENERATE_CHI = NO
1900+
1901+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
1902+# and project file content.
1903+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1904+
1905+CHM_INDEX_ENCODING =
1906+
1907+# The BINARY_TOC flag controls whether a binary table of contents is generated
1908+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
1909+# enables the Previous and Next buttons.
1910+# The default value is: NO.
1911+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1912+
1913+BINARY_TOC = NO
1914+
1915+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
1916+# the table of contents of the HTML help documentation and to the tree view.
1917+# The default value is: NO.
1918+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1919+
1920+TOC_EXPAND = NO
1921+
1922+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1923+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
1924+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
1925+# (.qch) of the generated HTML documentation.
1926+# The default value is: NO.
1927+# This tag requires that the tag GENERATE_HTML is set to YES.
1928+
1929+GENERATE_QHP = NO
1930+
1931+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
1932+# the file name of the resulting .qch file. The path specified is relative to
1933+# the HTML output folder.
1934+# This tag requires that the tag GENERATE_QHP is set to YES.
1935+
1936+QCH_FILE =
1937+
1938+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1939+# Project output. For more information please see Qt Help Project / Namespace
1940+# (see:
1941+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
1942+# The default value is: org.doxygen.Project.
1943+# This tag requires that the tag GENERATE_QHP is set to YES.
1944+
1945+QHP_NAMESPACE = org.doxygen.Project
1946+
1947+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1948+# Help Project output. For more information please see Qt Help Project / Virtual
1949+# Folders (see:
1950+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
1951+# The default value is: doc.
1952+# This tag requires that the tag GENERATE_QHP is set to YES.
1953+
1954+QHP_VIRTUAL_FOLDER = doc
1955+
1956+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1957+# filter to add. For more information please see Qt Help Project / Custom
1958+# Filters (see:
1959+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
1960+# This tag requires that the tag GENERATE_QHP is set to YES.
1961+
1962+QHP_CUST_FILTER_NAME =
1963+
1964+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1965+# custom filter to add. For more information please see Qt Help Project / Custom
1966+# Filters (see:
1967+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
1968+# This tag requires that the tag GENERATE_QHP is set to YES.
1969+
1970+QHP_CUST_FILTER_ATTRS =
1971+
1972+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1973+# project's filter section matches. Qt Help Project / Filter Attributes (see:
1974+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
1975+# This tag requires that the tag GENERATE_QHP is set to YES.
1976+
1977+QHP_SECT_FILTER_ATTRS =
1978+
1979+# The QHG_LOCATION tag can be used to specify the location (absolute path
1980+# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
1981+# run qhelpgenerator on the generated .qhp file.
1982+# This tag requires that the tag GENERATE_QHP is set to YES.
1983+
1984+QHG_LOCATION =
1985+
1986+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1987+# generated, together with the HTML files, they form an Eclipse help plugin. To
1988+# install this plugin and make it available under the help contents menu in
1989+# Eclipse, the contents of the directory containing the HTML and XML files needs
1990+# to be copied into the plugins directory of eclipse. The name of the directory
1991+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
1992+# After copying Eclipse needs to be restarted before the help appears.
1993+# The default value is: NO.
1994+# This tag requires that the tag GENERATE_HTML is set to YES.
1995+
1996+GENERATE_ECLIPSEHELP = NO
1997+
1998+# A unique identifier for the Eclipse help plugin. When installing the plugin
1999+# the directory name containing the HTML and XML files should also have this
2000+# name. Each documentation set should have its own identifier.
2001+# The default value is: org.doxygen.Project.
2002+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
2003+
2004+ECLIPSE_DOC_ID = org.doxygen.Project
2005+
2006+# If you want full control over the layout of the generated HTML pages it might
2007+# be necessary to disable the index and replace it with your own. The
2008+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
2009+# of each HTML page. A value of NO enables the index and the value YES disables
2010+# it. Since the tabs in the index contain the same information as the navigation
2011+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
2012+# The default value is: NO.
2013+# This tag requires that the tag GENERATE_HTML is set to YES.
2014+
2015+DISABLE_INDEX = NO
2016+
2017+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
2018+# structure should be generated to display hierarchical information. If the tag
2019+# value is set to YES, a side panel will be generated containing a tree-like
2020+# index structure (just like the one that is generated for HTML Help). For this
2021+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
2022+# (i.e. any modern browser). Windows users are probably better off using the
2023+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
2024+# further fine tune the look of the index (see "Fine-tuning the output"). As an
2025+# example, the default style sheet generated by doxygen has an example that
2026+# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
2027+# Since the tree basically has the same information as the tab index, you could
2028+# consider setting DISABLE_INDEX to YES when enabling this option.
2029+# The default value is: NO.
2030+# This tag requires that the tag GENERATE_HTML is set to YES.
2031+
2032+GENERATE_TREEVIEW = NO
2033+
2034+# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
2035+# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
2036+# area (value NO) or if it should extend to the full height of the window (value
2037+# YES). Setting this to YES gives a layout similar to
2038+# https://docs.readthedocs.io with more room for contents, but less room for the
2039+# project logo, title, and description. If either GENERATE_TREEVIEW or
2040+# DISABLE_INDEX is set to NO, this option has no effect.
2041+# The default value is: NO.
2042+# This tag requires that the tag GENERATE_HTML is set to YES.
2043+
2044+FULL_SIDEBAR = NO
2045+
2046+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
2047+# doxygen will group on one line in the generated HTML documentation.
2048+#
2049+# Note that a value of 0 will completely suppress the enum values from appearing
2050+# in the overview section.
2051+# Minimum value: 0, maximum value: 20, default value: 4.
2052+# This tag requires that the tag GENERATE_HTML is set to YES.
2053+
2054+ENUM_VALUES_PER_LINE = 4
2055+
2056+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
2057+# to set the initial width (in pixels) of the frame in which the tree is shown.
2058+# Minimum value: 0, maximum value: 1500, default value: 250.
2059+# This tag requires that the tag GENERATE_HTML is set to YES.
2060+
2061+TREEVIEW_WIDTH = 250
2062+
2063+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
2064+# external symbols imported via tag files in a separate window.
2065+# The default value is: NO.
2066+# This tag requires that the tag GENERATE_HTML is set to YES.
2067+
2068+EXT_LINKS_IN_WINDOW = NO
2069+
2070+# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
2071+# addresses.
2072+# The default value is: YES.
2073+# This tag requires that the tag GENERATE_HTML is set to YES.
2074+
2075+OBFUSCATE_EMAILS = YES
2076+
2077+# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
2078+# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
2079+# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
2080+# the HTML output. These images will generally look nicer at scaled resolutions.
2081+# Possible values are: png (the default) and svg (looks nicer but requires the
2082+# pdf2svg or inkscape tool).
2083+# The default value is: png.
2084+# This tag requires that the tag GENERATE_HTML is set to YES.
2085+
2086+HTML_FORMULA_FORMAT = png
2087+
2088+# Use this tag to change the font size of LaTeX formulas included as images in
2089+# the HTML documentation. When you change the font size after a successful
2090+# doxygen run you need to manually remove any form_*.png images from the HTML
2091+# output directory to force them to be regenerated.
2092+# Minimum value: 8, maximum value: 50, default value: 10.
2093+# This tag requires that the tag GENERATE_HTML is set to YES.
2094+
2095+FORMULA_FONTSIZE = 10
2096+
2097+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
2098+# generated for formulas are transparent PNGs. Transparent PNGs are not
2099+# supported properly for IE 6.0, but are supported on all modern browsers.
2100+#
2101+# Note that when changing this option you need to delete any form_*.png files in
2102+# the HTML output directory before the changes have effect.
2103+# The default value is: YES.
2104+# This tag requires that the tag GENERATE_HTML is set to YES.
2105+
2106+FORMULA_TRANSPARENT = YES
2107+
2108+# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
2109+# to create new LaTeX commands to be used in formulas as building blocks. See
2110+# the section "Including formulas" for details.
2111+
2112+FORMULA_MACROFILE =
2113+
2114+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
2115+# https://www.mathjax.org) which uses client side JavaScript for the rendering
2116+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
2117+# installed or if you want to formulas look prettier in the HTML output. When
2118+# enabled you may also need to install MathJax separately and configure the path
2119+# to it using the MATHJAX_RELPATH option.
2120+# The default value is: NO.
2121+# This tag requires that the tag GENERATE_HTML is set to YES.
2122+
2123+USE_MATHJAX = NO
2124+
2125+# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
2126+# Note that the different versions of MathJax have different requirements with
2127+# regards to the different settings, so it is possible that also other MathJax
2128+# settings have to be changed when switching between the different MathJax
2129+# versions.
2130+# Possible values are: MathJax_2 and MathJax_3.
2131+# The default value is: MathJax_2.
2132+# This tag requires that the tag USE_MATHJAX is set to YES.
2133+
2134+MATHJAX_VERSION = MathJax_2
2135+
2136+# When MathJax is enabled you can set the default output format to be used for
2137+# the MathJax output. For more details about the output format see MathJax
2138+# version 2 (see:
2139+# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
2140+# (see:
2141+# http://docs.mathjax.org/en/latest/web/components/output.html).
2142+# Possible values are: HTML-CSS (which is slower, but has the best
2143+# compatibility. This is the name for Mathjax version 2, for MathJax version 3
2144+# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
2145+# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
2146+# is the name for Mathjax version 3, for MathJax version 2 this will be
2147+# translated into HTML-CSS) and SVG.
2148+# The default value is: HTML-CSS.
2149+# This tag requires that the tag USE_MATHJAX is set to YES.
2150+
2151+MATHJAX_FORMAT = HTML-CSS
2152+
2153+# When MathJax is enabled you need to specify the location relative to the HTML
2154+# output directory using the MATHJAX_RELPATH option. The destination directory
2155+# should contain the MathJax.js script. For instance, if the mathjax directory
2156+# is located at the same level as the HTML output directory, then
2157+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
2158+# Content Delivery Network so you can quickly see the result without installing
2159+# MathJax. However, it is strongly recommended to install a local copy of
2160+# MathJax from https://www.mathjax.org before deployment. The default value is:
2161+# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
2162+# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
2163+# This tag requires that the tag USE_MATHJAX is set to YES.
2164+
2165+MATHJAX_RELPATH =
2166+
2167+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
2168+# extension names that should be enabled during MathJax rendering. For example
2169+# for MathJax version 2 (see
2170+# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
2171+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
2172+# For example for MathJax version 3 (see
2173+# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
2174+# MATHJAX_EXTENSIONS = ams
2175+# This tag requires that the tag USE_MATHJAX is set to YES.
2176+
2177+MATHJAX_EXTENSIONS =
2178+
2179+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
2180+# of code that will be used on startup of the MathJax code. See the MathJax site
2181+# (see:
2182+# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
2183+# example see the documentation.
2184+# This tag requires that the tag USE_MATHJAX is set to YES.
2185+
2186+MATHJAX_CODEFILE =
2187+
2188+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
2189+# the HTML output. The underlying search engine uses javascript and DHTML and
2190+# should work on any modern browser. Note that when using HTML help
2191+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
2192+# there is already a search function so this one should typically be disabled.
2193+# For large projects the javascript based search engine can be slow, then
2194+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
2195+# search using the keyboard; to jump to the search box use <access key> + S
2196+# (what the <access key> is depends on the OS and browser, but it is typically
2197+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
2198+# key> to jump into the search results window, the results can be navigated
2199+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
2200+# the search. The filter options can be selected when the cursor is inside the
2201+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
2202+# to select a filter and <Enter> or <escape> to activate or cancel the filter
2203+# option.
2204+# The default value is: YES.
2205+# This tag requires that the tag GENERATE_HTML is set to YES.
2206+
2207+SEARCHENGINE = YES
2208+
2209+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
2210+# implemented using a web server instead of a web client using JavaScript. There
2211+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
2212+# setting. When disabled, doxygen will generate a PHP script for searching and
2213+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
2214+# and searching needs to be provided by external tools. See the section
2215+# "External Indexing and Searching" for details.
2216+# The default value is: NO.
2217+# This tag requires that the tag SEARCHENGINE is set to YES.
2218+
2219+SERVER_BASED_SEARCH = NO
2220+
2221+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
2222+# script for searching. Instead the search results are written to an XML file
2223+# which needs to be processed by an external indexer. Doxygen will invoke an
2224+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
2225+# search results.
2226+#
2227+# Doxygen ships with an example indexer (doxyindexer) and search engine
2228+# (doxysearch.cgi) which are based on the open source search engine library
2229+# Xapian (see:
2230+# https://xapian.org/).
2231+#
2232+# See the section "External Indexing and Searching" for details.
2233+# The default value is: NO.
2234+# This tag requires that the tag SEARCHENGINE is set to YES.
2235+
2236+EXTERNAL_SEARCH = NO
2237+
2238+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
2239+# which will return the search results when EXTERNAL_SEARCH is enabled.
2240+#
2241+# Doxygen ships with an example indexer (doxyindexer) and search engine
2242+# (doxysearch.cgi) which are based on the open source search engine library
2243+# Xapian (see:
2244+# https://xapian.org/). See the section "External Indexing and Searching" for
2245+# details.
2246+# This tag requires that the tag SEARCHENGINE is set to YES.
2247+
2248+SEARCHENGINE_URL =
2249+
2250+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
2251+# search data is written to a file for indexing by an external tool. With the
2252+# SEARCHDATA_FILE tag the name of this file can be specified.
2253+# The default file is: searchdata.xml.
2254+# This tag requires that the tag SEARCHENGINE is set to YES.
2255+
2256+SEARCHDATA_FILE = searchdata.xml
2257+
2258+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
2259+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
2260+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
2261+# projects and redirect the results back to the right project.
2262+# This tag requires that the tag SEARCHENGINE is set to YES.
2263+
2264+EXTERNAL_SEARCH_ID =
2265+
2266+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
2267+# projects other than the one defined by this configuration file, but that are
2268+# all added to the same external search index. Each project needs to have a
2269+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
2270+# to a relative location where the documentation can be found. The format is:
2271+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
2272+# This tag requires that the tag SEARCHENGINE is set to YES.
2273+
2274+EXTRA_SEARCH_MAPPINGS =
2275+
2276+#---------------------------------------------------------------------------
2277+# Configuration options related to the LaTeX output
2278+#---------------------------------------------------------------------------
2279+
2280+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
2281+# The default value is: YES.
2282+
2283+GENERATE_LATEX = NO
2284+
2285+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
2286+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
2287+# it.
2288+# The default directory is: latex.
2289+# This tag requires that the tag GENERATE_LATEX is set to YES.
2290+
2291+LATEX_OUTPUT = latex
2292+
2293+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
2294+# invoked.
2295+#
2296+# Note that when not enabling USE_PDFLATEX the default is latex when enabling
2297+# USE_PDFLATEX the default is pdflatex and when in the later case latex is
2298+# chosen this is overwritten by pdflatex. For specific output languages the
2299+# default can have been set differently, this depends on the implementation of
2300+# the output language.
2301+# This tag requires that the tag GENERATE_LATEX is set to YES.
2302+
2303+LATEX_CMD_NAME =
2304+
2305+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
2306+# index for LaTeX.
2307+# Note: This tag is used in the Makefile / make.bat.
2308+# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
2309+# (.tex).
2310+# The default file is: makeindex.
2311+# This tag requires that the tag GENERATE_LATEX is set to YES.
2312+
2313+MAKEINDEX_CMD_NAME = makeindex
2314+
2315+# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
2316+# generate index for LaTeX. In case there is no backslash (\) as first character
2317+# it will be automatically added in the LaTeX code.
2318+# Note: This tag is used in the generated output file (.tex).
2319+# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
2320+# The default value is: makeindex.
2321+# This tag requires that the tag GENERATE_LATEX is set to YES.
2322+
2323+LATEX_MAKEINDEX_CMD = makeindex
2324+
2325+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
2326+# documents. This may be useful for small projects and may help to save some
2327+# trees in general.
2328+# The default value is: NO.
2329+# This tag requires that the tag GENERATE_LATEX is set to YES.
2330+
2331+COMPACT_LATEX = NO
2332+
2333+# The PAPER_TYPE tag can be used to set the paper type that is used by the
2334+# printer.
2335+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
2336+# 14 inches) and executive (7.25 x 10.5 inches).
2337+# The default value is: a4.
2338+# This tag requires that the tag GENERATE_LATEX is set to YES.
2339+
2340+PAPER_TYPE = a4
2341+
2342+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
2343+# that should be included in the LaTeX output. The package can be specified just
2344+# by its name or with the correct syntax as to be used with the LaTeX
2345+# \usepackage command. To get the times font for instance you can specify :
2346+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
2347+# To use the option intlimits with the amsmath package you can specify:
2348+# EXTRA_PACKAGES=[intlimits]{amsmath}
2349+# If left blank no extra packages will be included.
2350+# This tag requires that the tag GENERATE_LATEX is set to YES.
2351+
2352+EXTRA_PACKAGES =
2353+
2354+# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
2355+# the generated LaTeX document. The header should contain everything until the
2356+# first chapter. If it is left blank doxygen will generate a standard header. It
2357+# is highly recommended to start with a default header using
2358+# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
2359+# and then modify the file new_header.tex. See also section "Doxygen usage" for
2360+# information on how to generate the default header that doxygen normally uses.
2361+#
2362+# Note: Only use a user-defined header if you know what you are doing!
2363+# Note: The header is subject to change so you typically have to regenerate the
2364+# default header when upgrading to a newer version of doxygen. The following
2365+# commands have a special meaning inside the header (and footer): For a
2366+# description of the possible markers and block names see the documentation.
2367+# This tag requires that the tag GENERATE_LATEX is set to YES.
2368+
2369+LATEX_HEADER =
2370+
2371+# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
2372+# the generated LaTeX document. The footer should contain everything after the
2373+# last chapter. If it is left blank doxygen will generate a standard footer. See
2374+# LATEX_HEADER for more information on how to generate a default footer and what
2375+# special commands can be used inside the footer. See also section "Doxygen
2376+# usage" for information on how to generate the default footer that doxygen
2377+# normally uses. Note: Only use a user-defined footer if you know what you are
2378+# doing!
2379+# This tag requires that the tag GENERATE_LATEX is set to YES.
2380+
2381+LATEX_FOOTER =
2382+
2383+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
2384+# LaTeX style sheets that are included after the standard style sheets created
2385+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
2386+# will copy the style sheet files to the output directory.
2387+# Note: The order of the extra style sheet files is of importance (e.g. the last
2388+# style sheet in the list overrules the setting of the previous ones in the
2389+# list).
2390+# This tag requires that the tag GENERATE_LATEX is set to YES.
2391+
2392+LATEX_EXTRA_STYLESHEET =
2393+
2394+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
2395+# other source files which should be copied to the LATEX_OUTPUT output
2396+# directory. Note that the files will be copied as-is; there are no commands or
2397+# markers available.
2398+# This tag requires that the tag GENERATE_LATEX is set to YES.
2399+
2400+LATEX_EXTRA_FILES =
2401+
2402+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
2403+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
2404+# contain links (just like the HTML output) instead of page references. This
2405+# makes the output suitable for online browsing using a PDF viewer.
2406+# The default value is: YES.
2407+# This tag requires that the tag GENERATE_LATEX is set to YES.
2408+
2409+PDF_HYPERLINKS = YES
2410+
2411+# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
2412+# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
2413+# files. Set this option to YES, to get a higher quality PDF documentation.
2414+#
2415+# See also section LATEX_CMD_NAME for selecting the engine.
2416+# The default value is: YES.
2417+# This tag requires that the tag GENERATE_LATEX is set to YES.
2418+
2419+USE_PDFLATEX = YES
2420+
2421+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
2422+# command to the generated LaTeX files. This will instruct LaTeX to keep running
2423+# if errors occur, instead of asking the user for help.
2424+# The default value is: NO.
2425+# This tag requires that the tag GENERATE_LATEX is set to YES.
2426+
2427+LATEX_BATCHMODE = NO
2428+
2429+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
2430+# index chapters (such as File Index, Compound Index, etc.) in the output.
2431+# The default value is: NO.
2432+# This tag requires that the tag GENERATE_LATEX is set to YES.
2433+
2434+LATEX_HIDE_INDICES = NO
2435+
2436+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
2437+# bibliography, e.g. plainnat, or ieeetr. See
2438+# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
2439+# The default value is: plain.
2440+# This tag requires that the tag GENERATE_LATEX is set to YES.
2441+
2442+LATEX_BIB_STYLE = plain
2443+
2444+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
2445+# page will contain the date and time when the page was generated. Setting this
2446+# to NO can help when comparing the output of multiple runs.
2447+# The default value is: NO.
2448+# This tag requires that the tag GENERATE_LATEX is set to YES.
2449+
2450+LATEX_TIMESTAMP = NO
2451+
2452+# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
2453+# path from which the emoji images will be read. If a relative path is entered,
2454+# it will be relative to the LATEX_OUTPUT directory. If left blank the
2455+# LATEX_OUTPUT directory will be used.
2456+# This tag requires that the tag GENERATE_LATEX is set to YES.
2457+
2458+LATEX_EMOJI_DIRECTORY =
2459+
2460+#---------------------------------------------------------------------------
2461+# Configuration options related to the RTF output
2462+#---------------------------------------------------------------------------
2463+
2464+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
2465+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
2466+# readers/editors.
2467+# The default value is: NO.
2468+
2469+GENERATE_RTF = NO
2470+
2471+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
2472+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
2473+# it.
2474+# The default directory is: rtf.
2475+# This tag requires that the tag GENERATE_RTF is set to YES.
2476+
2477+RTF_OUTPUT = rtf
2478+
2479+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
2480+# documents. This may be useful for small projects and may help to save some
2481+# trees in general.
2482+# The default value is: NO.
2483+# This tag requires that the tag GENERATE_RTF is set to YES.
2484+
2485+COMPACT_RTF = NO
2486+
2487+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
2488+# contain hyperlink fields. The RTF file will contain links (just like the HTML
2489+# output) instead of page references. This makes the output suitable for online
2490+# browsing using Word or some other Word compatible readers that support those
2491+# fields.
2492+#
2493+# Note: WordPad (write) and others do not support links.
2494+# The default value is: NO.
2495+# This tag requires that the tag GENERATE_RTF is set to YES.
2496+
2497+RTF_HYPERLINKS = NO
2498+
2499+# Load stylesheet definitions from file. Syntax is similar to doxygen's
2500+# configuration file, i.e. a series of assignments. You only have to provide
2501+# replacements, missing definitions are set to their default value.
2502+#
2503+# See also section "Doxygen usage" for information on how to generate the
2504+# default style sheet that doxygen normally uses.
2505+# This tag requires that the tag GENERATE_RTF is set to YES.
2506+
2507+RTF_STYLESHEET_FILE =
2508+
2509+# Set optional variables used in the generation of an RTF document. Syntax is
2510+# similar to doxygen's configuration file. A template extensions file can be
2511+# generated using doxygen -e rtf extensionFile.
2512+# This tag requires that the tag GENERATE_RTF is set to YES.
2513+
2514+RTF_EXTENSIONS_FILE =
2515+
2516+#---------------------------------------------------------------------------
2517+# Configuration options related to the man page output
2518+#---------------------------------------------------------------------------
2519+
2520+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
2521+# classes and files.
2522+# The default value is: NO.
2523+
2524+GENERATE_MAN = NO
2525+
2526+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
2527+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
2528+# it. A directory man3 will be created inside the directory specified by
2529+# MAN_OUTPUT.
2530+# The default directory is: man.
2531+# This tag requires that the tag GENERATE_MAN is set to YES.
2532+
2533+MAN_OUTPUT = man
2534+
2535+# The MAN_EXTENSION tag determines the extension that is added to the generated
2536+# man pages. In case the manual section does not start with a number, the number
2537+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
2538+# optional.
2539+# The default value is: .3.
2540+# This tag requires that the tag GENERATE_MAN is set to YES.
2541+
2542+MAN_EXTENSION = .3
2543+
2544+# The MAN_SUBDIR tag determines the name of the directory created within
2545+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
2546+# MAN_EXTENSION with the initial . removed.
2547+# This tag requires that the tag GENERATE_MAN is set to YES.
2548+
2549+MAN_SUBDIR =
2550+
2551+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
2552+# will generate one additional man file for each entity documented in the real
2553+# man page(s). These additional files only source the real man page, but without
2554+# them the man command would be unable to find the correct page.
2555+# The default value is: NO.
2556+# This tag requires that the tag GENERATE_MAN is set to YES.
2557+
2558+MAN_LINKS = NO
2559+
2560+#---------------------------------------------------------------------------
2561+# Configuration options related to the XML output
2562+#---------------------------------------------------------------------------
2563+
2564+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
2565+# captures the structure of the code including all documentation.
2566+# The default value is: NO.
2567+
2568+GENERATE_XML = YES
2569+
2570+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
2571+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
2572+# it.
2573+# The default directory is: xml.
2574+# This tag requires that the tag GENERATE_XML is set to YES.
2575+
2576+XML_OUTPUT = doxyxml
2577+
2578+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
2579+# listings (including syntax highlighting and cross-referencing information) to
2580+# the XML output. Note that enabling this will significantly increase the size
2581+# of the XML output.
2582+# The default value is: YES.
2583+# This tag requires that the tag GENERATE_XML is set to YES.
2584+
2585+XML_PROGRAMLISTING = YES
2586+
2587+# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
2588+# namespace members in file scope as well, matching the HTML output.
2589+# The default value is: NO.
2590+# This tag requires that the tag GENERATE_XML is set to YES.
2591+
2592+XML_NS_MEMB_FILE_SCOPE = NO
2593+
2594+#---------------------------------------------------------------------------
2595+# Configuration options related to the DOCBOOK output
2596+#---------------------------------------------------------------------------
2597+
2598+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
2599+# that can be used to generate PDF.
2600+# The default value is: NO.
2601+
2602+GENERATE_DOCBOOK = NO
2603+
2604+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
2605+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
2606+# front of it.
2607+# The default directory is: docbook.
2608+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
2609+
2610+DOCBOOK_OUTPUT = docbook
2611+
2612+#---------------------------------------------------------------------------
2613+# Configuration options for the AutoGen Definitions output
2614+#---------------------------------------------------------------------------
2615+
2616+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
2617+# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
2618+# the structure of the code including all documentation. Note that this feature
2619+# is still experimental and incomplete at the moment.
2620+# The default value is: NO.
2621+
2622+GENERATE_AUTOGEN_DEF = NO
2623+
2624+#---------------------------------------------------------------------------
2625+# Configuration options related to the Perl module output
2626+#---------------------------------------------------------------------------
2627+
2628+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
2629+# file that captures the structure of the code including all documentation.
2630+#
2631+# Note that this feature is still experimental and incomplete at the moment.
2632+# The default value is: NO.
2633+
2634+GENERATE_PERLMOD = NO
2635+
2636+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
2637+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
2638+# output from the Perl module output.
2639+# The default value is: NO.
2640+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2641+
2642+PERLMOD_LATEX = NO
2643+
2644+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
2645+# formatted so it can be parsed by a human reader. This is useful if you want to
2646+# understand what is going on. On the other hand, if this tag is set to NO, the
2647+# size of the Perl module output will be much smaller and Perl will parse it
2648+# just the same.
2649+# The default value is: YES.
2650+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2651+
2652+PERLMOD_PRETTY = YES
2653+
2654+# The names of the make variables in the generated doxyrules.make file are
2655+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
2656+# so different doxyrules.make files included by the same Makefile don't
2657+# overwrite each other's variables.
2658+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2659+
2660+PERLMOD_MAKEVAR_PREFIX =
2661+
2662+#---------------------------------------------------------------------------
2663+# Configuration options related to the preprocessor
2664+#---------------------------------------------------------------------------
2665+
2666+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
2667+# C-preprocessor directives found in the sources and include files.
2668+# The default value is: YES.
2669+
2670+ENABLE_PREPROCESSING = YES
2671+
2672+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
2673+# in the source code. If set to NO, only conditional compilation will be
2674+# performed. Macro expansion can be done in a controlled way by setting
2675+# EXPAND_ONLY_PREDEF to YES.
2676+# The default value is: NO.
2677+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2678+
2679+MACRO_EXPANSION = NO
2680+
2681+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
2682+# the macro expansion is limited to the macros specified with the PREDEFINED and
2683+# EXPAND_AS_DEFINED tags.
2684+# The default value is: NO.
2685+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2686+
2687+EXPAND_ONLY_PREDEF = NO
2688+
2689+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
2690+# INCLUDE_PATH will be searched if a #include is found.
2691+# The default value is: YES.
2692+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2693+
2694+SEARCH_INCLUDES = YES
2695+
2696+# The INCLUDE_PATH tag can be used to specify one or more directories that
2697+# contain include files that are not input files but should be processed by the
2698+# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
2699+# RECURSIVE has no effect here.
2700+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
2701+
2702+INCLUDE_PATH =
2703+
2704+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
2705+# patterns (like *.h and *.hpp) to filter out the header-files in the
2706+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
2707+# used.
2708+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2709+
2710+INCLUDE_FILE_PATTERNS =
2711+
2712+# The PREDEFINED tag can be used to specify one or more macro names that are
2713+# defined before the preprocessor is started (similar to the -D option of e.g.
2714+# gcc). The argument of the tag is a list of macros of the form: name or
2715+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
2716+# is assumed. To prevent a macro definition from being undefined via #undef or
2717+# recursively expanded use the := operator instead of the = operator.
2718+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2719+
2720+PREDEFINED =
2721+
2722+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
2723+# tag can be used to specify a list of macro names that should be expanded. The
2724+# macro definition that is found in the sources will be used. Use the PREDEFINED
2725+# tag if you want to use a different macro definition that overrules the
2726+# definition found in the source code.
2727+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2728+
2729+EXPAND_AS_DEFINED =
2730+
2731+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
2732+# remove all references to function-like macros that are alone on a line, have
2733+# an all uppercase name, and do not end with a semicolon. Such function macros
2734+# are typically used for boiler-plate code, and will confuse the parser if not
2735+# removed.
2736+# The default value is: YES.
2737+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2738+
2739+SKIP_FUNCTION_MACROS = YES
2740+
2741+#---------------------------------------------------------------------------
2742+# Configuration options related to external references
2743+#---------------------------------------------------------------------------
2744+
2745+# The TAGFILES tag can be used to specify one or more tag files. For each tag
2746+# file the location of the external documentation should be added. The format of
2747+# a tag file without this location is as follows:
2748+# TAGFILES = file1 file2 ...
2749+# Adding location for the tag files is done as follows:
2750+# TAGFILES = file1=loc1 "file2 = loc2" ...
2751+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
2752+# section "Linking to external documentation" for more information about the use
2753+# of tag files.
2754+# Note: Each tag file must have a unique name (where the name does NOT include
2755+# the path). If a tag file is not located in the directory in which doxygen is
2756+# run, you must also specify the path to the tagfile here.
2757+
2758+TAGFILES =
2759+
2760+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
2761+# tag file that is based on the input files it reads. See section "Linking to
2762+# external documentation" for more information about the usage of tag files.
2763+
2764+GENERATE_TAGFILE =
2765+
2766+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
2767+# the class index. If set to NO, only the inherited external classes will be
2768+# listed.
2769+# The default value is: NO.
2770+
2771+ALLEXTERNALS = NO
2772+
2773+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
2774+# in the modules index. If set to NO, only the current project's groups will be
2775+# listed.
2776+# The default value is: YES.
2777+
2778+EXTERNAL_GROUPS = YES
2779+
2780+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
2781+# the related pages index. If set to NO, only the current project's pages will
2782+# be listed.
2783+# The default value is: YES.
2784+
2785+EXTERNAL_PAGES = YES
2786+
2787+#---------------------------------------------------------------------------
2788+# Configuration options related to the dot tool
2789+#---------------------------------------------------------------------------
2790+
2791+# You can include diagrams made with dia in doxygen documentation. Doxygen will
2792+# then run dia to produce the diagram and insert it in the documentation. The
2793+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
2794+# If left empty dia is assumed to be found in the default search path.
2795+
2796+DIA_PATH =
2797+
2798+# If set to YES the inheritance and collaboration graphs will hide inheritance
2799+# and usage relations if the target is undocumented or is not a class.
2800+# The default value is: YES.
2801+
2802+HIDE_UNDOC_RELATIONS = YES
2803+
2804+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
2805+# available from the path. This tool is part of Graphviz (see:
2806+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
2807+# Bell Labs. The other options in this section have no effect if this option is
2808+# set to NO
2809+# The default value is: YES.
2810+
2811+HAVE_DOT = YES
2812+
2813+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
2814+# to run in parallel. When set to 0 doxygen will base this on the number of
2815+# processors available in the system. You can set it explicitly to a value
2816+# larger than 0 to get control over the balance between CPU load and processing
2817+# speed.
2818+# Minimum value: 0, maximum value: 32, default value: 0.
2819+# This tag requires that the tag HAVE_DOT is set to YES.
2820+
2821+DOT_NUM_THREADS = 0
2822+
2823+# When you want a differently looking font in the dot files that doxygen
2824+# generates you can specify the font name using DOT_FONTNAME. You need to make
2825+# sure dot is able to find the font, which can be done by putting it in a
2826+# standard location or by setting the DOTFONTPATH environment variable or by
2827+# setting DOT_FONTPATH to the directory containing the font.
2828+# The default value is: Helvetica.
2829+# This tag requires that the tag HAVE_DOT is set to YES.
2830+
2831+DOT_FONTNAME = Helvetica
2832+
2833+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
2834+# dot graphs.
2835+# Minimum value: 4, maximum value: 24, default value: 10.
2836+# This tag requires that the tag HAVE_DOT is set to YES.
2837+
2838+DOT_FONTSIZE = 10
2839+
2840+# By default doxygen will tell dot to use the default font as specified with
2841+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
2842+# the path where dot can find it using this tag.
2843+# This tag requires that the tag HAVE_DOT is set to YES.
2844+
2845+DOT_FONTPATH =
2846+
2847+# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a
2848+# graph for each documented class showing the direct and indirect inheritance
2849+# relations. In case HAVE_DOT is set as well dot will be used to draw the graph,
2850+# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set
2851+# to TEXT the direct and indirect inheritance relations will be shown as texts /
2852+# links.
2853+# Possible values are: NO, YES, TEXT and GRAPH.
2854+# The default value is: YES.
2855+
2856+CLASS_GRAPH = YES
2857+
2858+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
2859+# graph for each documented class showing the direct and indirect implementation
2860+# dependencies (inheritance, containment, and class references variables) of the
2861+# class with other documented classes.
2862+# The default value is: YES.
2863+# This tag requires that the tag HAVE_DOT is set to YES.
2864+
2865+COLLABORATION_GRAPH = YES
2866+
2867+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
2868+# groups, showing the direct groups dependencies. See also the chapter Grouping
2869+# in the manual.
2870+# The default value is: YES.
2871+# This tag requires that the tag HAVE_DOT is set to YES.
2872+
2873+GROUP_GRAPHS = YES
2874+
2875+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
2876+# collaboration diagrams in a style similar to the OMG's Unified Modeling
2877+# Language.
2878+# The default value is: NO.
2879+# This tag requires that the tag HAVE_DOT is set to YES.
2880+
2881+UML_LOOK = NO
2882+
2883+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
2884+# class node. If there are many fields or methods and many nodes the graph may
2885+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
2886+# number of items for each type to make the size more manageable. Set this to 0
2887+# for no limit. Note that the threshold may be exceeded by 50% before the limit
2888+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
2889+# but if the number exceeds 15, the total amount of fields shown is limited to
2890+# 10.
2891+# Minimum value: 0, maximum value: 100, default value: 10.
2892+# This tag requires that the tag UML_LOOK is set to YES.
2893+
2894+UML_LIMIT_NUM_FIELDS = 10
2895+
2896+# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
2897+# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
2898+# tag is set to YES, doxygen will add type and arguments for attributes and
2899+# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
2900+# will not generate fields with class member information in the UML graphs. The
2901+# class diagrams will look similar to the default class diagrams but using UML
2902+# notation for the relationships.
2903+# Possible values are: NO, YES and NONE.
2904+# The default value is: NO.
2905+# This tag requires that the tag UML_LOOK is set to YES.
2906+
2907+DOT_UML_DETAILS = NO
2908+
2909+# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
2910+# to display on a single line. If the actual line length exceeds this threshold
2911+# significantly it will wrapped across multiple lines. Some heuristics are apply
2912+# to avoid ugly line breaks.
2913+# Minimum value: 0, maximum value: 1000, default value: 17.
2914+# This tag requires that the tag HAVE_DOT is set to YES.
2915+
2916+DOT_WRAP_THRESHOLD = 17
2917+
2918+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
2919+# collaboration graphs will show the relations between templates and their
2920+# instances.
2921+# The default value is: NO.
2922+# This tag requires that the tag HAVE_DOT is set to YES.
2923+
2924+TEMPLATE_RELATIONS = NO
2925+
2926+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
2927+# YES then doxygen will generate a graph for each documented file showing the
2928+# direct and indirect include dependencies of the file with other documented
2929+# files.
2930+# The default value is: YES.
2931+# This tag requires that the tag HAVE_DOT is set to YES.
2932+
2933+INCLUDE_GRAPH = YES
2934+
2935+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
2936+# set to YES then doxygen will generate a graph for each documented file showing
2937+# the direct and indirect include dependencies of the file with other documented
2938+# files.
2939+# The default value is: YES.
2940+# This tag requires that the tag HAVE_DOT is set to YES.
2941+
2942+INCLUDED_BY_GRAPH = YES
2943+
2944+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
2945+# dependency graph for every global function or class method.
2946+#
2947+# Note that enabling this option will significantly increase the time of a run.
2948+# So in most cases it will be better to enable call graphs for selected
2949+# functions only using the \callgraph command. Disabling a call graph can be
2950+# accomplished by means of the command \hidecallgraph.
2951+# The default value is: NO.
2952+# This tag requires that the tag HAVE_DOT is set to YES.
2953+
2954+CALL_GRAPH = NO
2955+
2956+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
2957+# dependency graph for every global function or class method.
2958+#
2959+# Note that enabling this option will significantly increase the time of a run.
2960+# So in most cases it will be better to enable caller graphs for selected
2961+# functions only using the \callergraph command. Disabling a caller graph can be
2962+# accomplished by means of the command \hidecallergraph.
2963+# The default value is: NO.
2964+# This tag requires that the tag HAVE_DOT is set to YES.
2965+
2966+CALLER_GRAPH = NO
2967+
2968+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
2969+# hierarchy of all classes instead of a textual one.
2970+# The default value is: YES.
2971+# This tag requires that the tag HAVE_DOT is set to YES.
2972+
2973+GRAPHICAL_HIERARCHY = YES
2974+
2975+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
2976+# dependencies a directory has on other directories in a graphical way. The
2977+# dependency relations are determined by the #include relations between the
2978+# files in the directories.
2979+# The default value is: YES.
2980+# This tag requires that the tag HAVE_DOT is set to YES.
2981+
2982+DIRECTORY_GRAPH = YES
2983+
2984+# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
2985+# of child directories generated in directory dependency graphs by dot.
2986+# Minimum value: 1, maximum value: 25, default value: 1.
2987+# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
2988+
2989+DIR_GRAPH_MAX_DEPTH = 1
2990+
2991+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
2992+# generated by dot. For an explanation of the image formats see the section
2993+# output formats in the documentation of the dot tool (Graphviz (see:
2994+# http://www.graphviz.org/)).
2995+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
2996+# to make the SVG files visible in IE 9+ (other browsers do not have this
2997+# requirement).
2998+# Possible values are: png, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd,
2999+# gif, gif:cairo, gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd,
3000+# png:cairo, png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
3001+# png:gdiplus:gdiplus.
3002+# The default value is: png.
3003+# This tag requires that the tag HAVE_DOT is set to YES.
3004+
3005+DOT_IMAGE_FORMAT = png
3006+
3007+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
3008+# enable generation of interactive SVG images that allow zooming and panning.
3009+#
3010+# Note that this requires a modern browser other than Internet Explorer. Tested
3011+# and working are Firefox, Chrome, Safari, and Opera.
3012+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
3013+# the SVG files visible. Older versions of IE do not have SVG support.
3014+# The default value is: NO.
3015+# This tag requires that the tag HAVE_DOT is set to YES.
3016+
3017+INTERACTIVE_SVG = NO
3018+
3019+# The DOT_PATH tag can be used to specify the path where the dot tool can be
3020+# found. If left blank, it is assumed the dot tool can be found in the path.
3021+# This tag requires that the tag HAVE_DOT is set to YES.
3022+
3023+DOT_PATH =
3024+
3025+# The DOTFILE_DIRS tag can be used to specify one or more directories that
3026+# contain dot files that are included in the documentation (see the \dotfile
3027+# command).
3028+# This tag requires that the tag HAVE_DOT is set to YES.
3029+
3030+DOTFILE_DIRS =
3031+
3032+# The MSCFILE_DIRS tag can be used to specify one or more directories that
3033+# contain msc files that are included in the documentation (see the \mscfile
3034+# command).
3035+
3036+MSCFILE_DIRS =
3037+
3038+# The DIAFILE_DIRS tag can be used to specify one or more directories that
3039+# contain dia files that are included in the documentation (see the \diafile
3040+# command).
3041+
3042+DIAFILE_DIRS =
3043+
3044+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
3045+# path where java can find the plantuml.jar file or to the filename of jar file
3046+# to be used. If left blank, it is assumed PlantUML is not used or called during
3047+# a preprocessing step. Doxygen will generate a warning when it encounters a
3048+# \startuml command in this case and will not generate output for the diagram.
3049+
3050+PLANTUML_JAR_PATH =
3051+
3052+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
3053+# configuration file for plantuml.
3054+
3055+PLANTUML_CFG_FILE =
3056+
3057+# When using plantuml, the specified paths are searched for files specified by
3058+# the !include statement in a plantuml block.
3059+
3060+PLANTUML_INCLUDE_PATH =
3061+
3062+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
3063+# that will be shown in the graph. If the number of nodes in a graph becomes
3064+# larger than this value, doxygen will truncate the graph, which is visualized
3065+# by representing a node as a red box. Note that doxygen if the number of direct
3066+# children of the root node in a graph is already larger than
3067+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
3068+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
3069+# Minimum value: 0, maximum value: 10000, default value: 50.
3070+# This tag requires that the tag HAVE_DOT is set to YES.
3071+
3072+DOT_GRAPH_MAX_NODES = 50
3073+
3074+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
3075+# generated by dot. A depth value of 3 means that only nodes reachable from the
3076+# root by following a path via at most 3 edges will be shown. Nodes that lay
3077+# further from the root node will be omitted. Note that setting this option to 1
3078+# or 2 may greatly reduce the computation time needed for large code bases. Also
3079+# note that the size of a graph can be further restricted by
3080+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
3081+# Minimum value: 0, maximum value: 1000, default value: 0.
3082+# This tag requires that the tag HAVE_DOT is set to YES.
3083+
3084+MAX_DOT_GRAPH_DEPTH = 0
3085+
3086+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
3087+# background. This is disabled by default, because dot on Windows does not seem
3088+# to support this out of the box.
3089+#
3090+# Warning: Depending on the platform used, enabling this option may lead to
3091+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
3092+# read).
3093+# The default value is: NO.
3094+# This tag requires that the tag HAVE_DOT is set to YES.
3095+
3096+DOT_TRANSPARENT = NO
3097+
3098+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
3099+# files in one run (i.e. multiple -o and -T options on the command line). This
3100+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
3101+# this, this feature is disabled by default.
3102+# The default value is: NO.
3103+# This tag requires that the tag HAVE_DOT is set to YES.
3104+
3105+DOT_MULTI_TARGETS = NO
3106+
3107+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
3108+# explaining the meaning of the various boxes and arrows in the dot generated
3109+# graphs.
3110+# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
3111+# graphical representation for inheritance and collaboration diagrams is used.
3112+# The default value is: YES.
3113+# This tag requires that the tag HAVE_DOT is set to YES.
3114+
3115+GENERATE_LEGEND = YES
3116+
3117+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
3118+# files that are used to generate the various graphs.
3119+#
3120+# Note: This setting is not only used for dot files but also for msc temporary
3121+# files.
3122+# The default value is: YES.
3123+
3124+DOT_CLEANUP = YES
3125diff --git a/Makefile b/Makefile
3126index a492516..c2c6b74 100644
3127--- a/Makefile
3128+++ b/Makefile
3129@@ -1,104 +1,19 @@
3130-NETPLAN_SOVER=0.0
3131+.PHONY: clean default check linting pre-coverage
3132+VER = $(shell meson introspect _build/ --projectinfo | jq -r '.version' && rm -rf _build)
3133
3134-BUILDFLAGS = \
3135- -g \
3136- -fPIC \
3137- -std=c99 \
3138- -D_GNU_SOURCE \
3139- -DSBINDIR=\"$(SBINDIR)\" \
3140- -I${CURDIR}/include \
3141- -Wall \
3142- -Werror \
3143- $(NULL)
3144+DESTDIR ?= ../tmproot
3145
3146-TESTFLAGS = \
3147- -g \
3148- -O0 \
3149- -DFIXTURESDIR=\"$(shell pwd)/tests/ctests/fixtures\" \
3150- -Isrc \
3151- --coverage \
3152- -lcmocka \
3153- $(NULL)
3154+default: _build
3155+ meson compile -C _build --verbose
3156
3157-SRCS = \
3158- src/abi_compat.c \
3159- src/error.c \
3160- src/names.c \
3161- src/netplan.c \
3162- src/networkd.c \
3163- src/nm.c \
3164- src/openvswitch.c \
3165- src/parse.c \
3166- src/parse-nm.c \
3167- src/sriov.c \
3168- src/types.c \
3169- src/util.c \
3170- src/validation.c \
3171- $(NULL)
3172+_build:
3173+ meson setup _build --prefix=/usr
3174
3175-TESTS = \
3176- tests/ctests/test_netplan_error \
3177- tests/ctests/test_netplan_misc \
3178- tests/ctests/test_netplan_parser \
3179- tests/ctests/test_netplan_state \
3180- $(NULL)
3181-
3182-SYSTEMD_GENERATOR_DIR=$(shell pkg-config --variable=systemdsystemgeneratordir systemd)
3183-SYSTEMD_UNIT_DIR=$(shell pkg-config --variable=systemdsystemunitdir systemd)
3184-BASH_COMPLETIONS_DIR=$(shell pkg-config --variable=completionsdir bash-completion || echo "/etc/bash_completion.d")
3185-
3186-GCOV ?= gcov
3187-ROOTPREFIX ?=
3188-PREFIX ?= /usr
3189-LIBDIR ?= $(PREFIX)/lib
3190-ROOTLIBEXECDIR ?= $(ROOTPREFIX)/lib
3191-LIBEXECDIR ?= $(PREFIX)/lib
3192-SBINDIR ?= $(PREFIX)/sbin
3193-DATADIR ?= $(PREFIX)/share
3194-DOCDIR ?= $(DATADIR)/doc
3195-MANDIR ?= $(DATADIR)/man
3196-INCLUDEDIR ?= $(PREFIX)/include
3197-
3198-PYCODE = netplan/ $(wildcard src/*.py) $(wildcard tests/*.py) $(wildcard tests/generator/*.py) $(wildcard tests/cli/*.py) $(wildcard tests/netplan_dbus/*.py) $(wildcard tests/integration/*.py) $(wildcard tests/parser/*.py)
3199-
3200-# Order: Fedora/Mageia/openSUSE || Debian/Ubuntu || null
3201-PYFLAKES3 ?= $(shell command -v pyflakes-3 || command -v pyflakes3 || echo true)
3202-PYCODESTYLE3 ?= $(shell command -v pycodestyle-3 || command -v pycodestyle || command -v pep8 || echo true)
3203-PYTEST3 ?= $(shell command -v pytest-3 || command -v pytest3 || echo true)
3204-PYCOVERAGE ?= $(shell command -v python3-coverage || echo true)
3205-
3206-default: netplan/_features.py generate netplan-dbus dbus/io.netplan.Netplan.service doc/netplan.html doc/netplan.5 doc/netplan-generate.8 doc/netplan-apply.8 doc/netplan-try.8 doc/netplan-dbus.8 doc/netplan-get.8 doc/netplan-set.8
3207-
3208-%.o: src/%.c src/_features.h
3209- $(CC) $(BUILDFLAGS) $(CFLAGS) $(LDFLAGS) -c $^ `pkg-config --cflags --libs glib-2.0 gio-2.0 yaml-0.1 uuid`
3210-
3211-libnetplan.so.$(NETPLAN_SOVER): $(SRCS) abicompat.lds
3212- $(CC) -shared -Wl,-soname,libnetplan.so.$(NETPLAN_SOVER) $(BUILDFLAGS) $(CFLAGS) -fvisibility=hidden $(LDFLAGS) -o $@ $(SRCS) -T abicompat.lds `pkg-config --cflags --libs glib-2.0 gio-2.0 yaml-0.1 uuid`
3213- ln -snf libnetplan.so.$(NETPLAN_SOVER) libnetplan.so
3214-
3215-generate: libnetplan.so.$(NETPLAN_SOVER) generate.o
3216- $(CC) $(BUILDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(filter-out $<,$^) -L. -lnetplan `pkg-config --cflags --libs glib-2.0 gio-2.0 yaml-0.1 uuid`
3217-
3218-netplan-dbus: libnetplan.so.$(NETPLAN_SOVER) dbus.o
3219- $(CC) $(BUILDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(filter-out $<,$(patsubst %.h,,$^)) -L. -lnetplan `pkg-config --cflags --libs libsystemd glib-2.0 gio-2.0 yaml-0.1 uuid`
3220-
3221-src/_features.h: src/[^_]*.[hc]
3222- printf "#include <stddef.h>\nstatic const char *feature_flags[] __attribute__((__unused__)) = {\n" > $@
3223- awk 'match ($$0, /netplan-feature:.*/ ) { $$0=substr($$0, RSTART, RLENGTH); print "\""$$2"\"," }' $^ >> $@
3224- echo "NULL, };" >> $@
3225-
3226-netplan/_features.py: src/[^_]*.[hc]
3227- echo "# Generated file" > $@
3228- echo "NETPLAN_FEATURE_FLAGS = [" >> $@
3229- awk 'match ($$0, /netplan-feature:.*/ ) { $$0=substr($$0, RSTART, RLENGTH); print " \""$$2"\"," }' $^ >> $@
3230- echo "]" >> $@
3231-
3232-$(TESTS): %: %.c
3233- $(CC) $(BUILDFLAGS) $(CFLAGS) -o $@ $< `pkg-config --cflags --libs glib-2.0 gio-2.0 yaml-0.1 uuid` $(TESTFLAGS)
3234- ./$@
3235+_build-cov:
3236+ meson setup _build-cov --prefix=/usr -Db_coverage=true
3237
3238 clean:
3239- rm -f netplan/_features.py src/_features.h src/_features.h.gch
3240+ rm -f netplan_cli/_features.py src/_features.h src/_features.h.gch
3241 rm -f generate doc/*.html doc/*.[1-9]
3242 rm -f *.o *.so*
3243 rm -f netplan-dbus dbus/*.service
3244@@ -107,82 +22,30 @@ clean:
3245 rm -rf test-coverage .coverage
3246 rm -f .coverage.* coverage.xml
3247 find . | grep -E "(__pycache__|\.pyc)" | xargs rm -rf
3248- rm -f $(TESTS)
3249-
3250-check: default linting $(TESTS)
3251- PYTHONPATH=. LD_LIBRARY_PATH=. tests/cli_legacy.py
3252- PYTHONPATH=. LD_LIBRARY_PATH=. $(PYCOVERAGE) run -a -m pytest -s -v --cov-append
3253- tests/validate_docs.sh
3254-
3255-linting:
3256- $(PYFLAKES3) $(PYCODE)
3257- $(PYCODESTYLE3) --max-line-length=130 $(PYCODE)
3258-
3259-coverage: | pre-coverage c-coverage python-coverage-combine python-coverage
3260+ rm -rf build
3261+ rm -rf _build
3262+ rm -rf _build-cov
3263+ rm -rf _leakcheckbuild
3264+ rm -rf tmproot
3265+ rm -f python-cffi/netplan/_netplan_cffi.*
3266
3267-pre-coverage:
3268- rm -f .coverage
3269- $(MAKE) CFLAGS="-g -O0 --coverage" clean check
3270- mkdir -p test-coverage/C test-coverage/python
3271+dist: clean _build
3272+ tar --exclude="_build" --exclude=".git" --exclude="debian" --exclude=".vscode" -cvJf ../netplan-$(VER).tar.xz .
3273+ ln -sf netplan-$(VER).tar.xz ../netplan.io_$(VER).orig.tar.xz # Debian .orig symlink
3274
3275-check-coverage: coverage
3276- @if grep headerCovTableEntryHi test-coverage/C/index.html | grep -qv '100.*%'; then \
3277- echo "FAIL: Test coverage not 100%!" >&2; exit 1; \
3278- fi
3279- python3-coverage report --omit=/usr* --show-missing --fail-under=100
3280+check: default
3281+ meson test -C _build --verbose
3282
3283-c-coverage:
3284- lcov --directory . --capture --gcov-tool=$(GCOV) -o generate.info
3285- lcov --remove generate.info "/usr*" -o generate.info
3286- genhtml -o test-coverage/C/ -t "generate test coverage" generate.info
3287+linting: _build
3288+ meson test -C _build --verbose linting
3289+ meson test -C _build --verbose codestyle
3290
3291-python-coverage-combine:
3292- python3-coverage combine -a
3293+pre-coverage: _build-cov
3294+ meson compile -C _build-cov --verbose
3295
3296-python-coverage:
3297- python3-coverage html -d test-coverage/python --omit=/usr* || true
3298- python3-coverage xml --omit=/usr* || true
3299+check-coverage: pre-coverage
3300+ meson test -C _build-cov --verbose
3301
3302 install: default
3303- mkdir -p $(DESTDIR)/$(SBINDIR) $(DESTDIR)/$(ROOTLIBEXECDIR)/netplan $(DESTDIR)/$(SYSTEMD_GENERATOR_DIR) $(DESTDIR)/$(LIBDIR)
3304- mkdir -p $(DESTDIR)/$(MANDIR)/man5 $(DESTDIR)/$(MANDIR)/man8
3305- mkdir -p $(DESTDIR)/$(DOCDIR)/netplan/examples
3306- mkdir -p $(DESTDIR)/$(DATADIR)/netplan/netplan
3307- mkdir -p $(DESTDIR)/$(INCLUDEDIR)/netplan
3308- install -m 755 generate $(DESTDIR)/$(ROOTLIBEXECDIR)/netplan/
3309- find netplan/ -name '*.py' -exec install -Dm 644 "{}" "$(DESTDIR)/$(DATADIR)/netplan/{}" \;
3310- install -m 755 src/netplan.script $(DESTDIR)/$(DATADIR)/netplan/
3311- ln -srf $(DESTDIR)/$(DATADIR)/netplan/netplan.script $(DESTDIR)/$(SBINDIR)/netplan
3312- ln -srf $(DESTDIR)/$(ROOTLIBEXECDIR)/netplan/generate $(DESTDIR)/$(SYSTEMD_GENERATOR_DIR)/netplan
3313- # lib
3314- install -m 644 *.so.* $(DESTDIR)/$(LIBDIR)/
3315- ln -snf libnetplan.so.$(NETPLAN_SOVER) $(DESTDIR)/$(LIBDIR)/libnetplan.so
3316- # headers, dev data
3317- install -m 644 include/*.h $(DESTDIR)/$(INCLUDEDIR)/netplan/
3318- # TODO: install pkg-config once available
3319- # docs, data
3320- install -m 644 doc/*.html $(DESTDIR)/$(DOCDIR)/netplan/
3321- install -m 644 examples/*.yaml $(DESTDIR)/$(DOCDIR)/netplan/examples/
3322- install -m 644 doc/*.5 $(DESTDIR)/$(MANDIR)/man5/
3323- install -m 644 doc/*.8 $(DESTDIR)/$(MANDIR)/man8/
3324- install -T -D -m 644 netplan.completions $(DESTDIR)/$(BASH_COMPLETIONS_DIR)/netplan
3325- # dbus
3326- mkdir -p $(DESTDIR)/$(DATADIR)/dbus-1/system.d $(DESTDIR)/$(DATADIR)/dbus-1/system-services
3327- install -m 755 netplan-dbus $(DESTDIR)/$(ROOTLIBEXECDIR)/netplan/
3328- install -m 644 dbus/io.netplan.Netplan.conf $(DESTDIR)/$(DATADIR)/dbus-1/system.d/
3329- install -m 644 dbus/io.netplan.Netplan.service $(DESTDIR)/$(DATADIR)/dbus-1/system-services/
3330-
3331-%.service: %.service.in
3332- sed -e "s#@ROOTLIBEXECDIR@#$(ROOTLIBEXECDIR)#" $< > $@
3333-
3334-
3335-%.html: %.md
3336- pandoc -s --metadata title="Netplan reference" --toc -o $@ $<
3337-
3338-doc/netplan.5: doc/manpage-header.md doc/structure-id.md doc/netplan-yaml.md doc/manpage-footer.md
3339- pandoc -s -o $@ --from=markdown-smart $^
3340-
3341-%.8: %.md
3342- pandoc -s -o $@ --shift-heading-level-by=-1 --from=markdown-smart $^
3343+ meson install -C _build --destdir $(DESTDIR)
3344
3345-.PHONY: clean
3346diff --git a/README.md b/README.md
3347index 4cb3865..6051ace 100644
3348--- a/README.md
3349+++ b/README.md
3350@@ -15,8 +15,6 @@ An overview of the architecture can be found at [netplan.io/design](https://netp
3351
3352 The full documentation for netplan is available in the [doc/](../main/doc/) directory.
3353
3354-Netplan's [documentation objectives](https://docs.google.com/document/d/1n47hwLmR6GiLJX0t5w2_uGngQ3b3jfpPN8H8knIJ9vQ) (internal)
3355-
3356 # Build using Meson
3357
3358 Steps to build netplan using the [Meson](https://mesonbuild.com) build system inside the `build/` directory:
3359diff --git a/abi-compat/README.md b/abi-compat/README.md
3360index fe21246..1ff68e0 100644
3361--- a/abi-compat/README.md
3362+++ b/abi-compat/README.md
3363@@ -4,14 +4,14 @@ We're using "abigail" (abigail-tools) to validate libnetplan's ABI.
3364 ## HowTo create a ABI reference
3365 The `abidw` tool can be used to generate an ABI XML like this:
3366 ```
3367-meson setup build --prefix=/usr
3368-meson compile -C build
3369-abidw build/src/libnetplan.so.0.0 --headers-dir include/ --header-file src/abi.h > abi-compat/jammy_0.106.xml
3370+meson setup _build --prefix=/usr
3371+meson compile -C _build
3372+abidw _build/src/libnetplan.so.0.0 --headers-dir include/ --header-file src/abi.h > abi-compat/jammy_0.107.xml
3373 ```
3374
3375 ## HowTo compare a ABI
3376 The `abidiff` tool can be used to compare a new library ABI to an existing XML
3377 reference like this (also, see .github/workflows/build-abi.yml):
3378 ```
3379-abidiff abi-compat/jammy_0.106.xml build/src/libnetplan.so.0.0 --headers-dir2 include/ --header-file2 src/abi.h --suppressions abi-compat/suppressions.abignore --no-added-syms
3380+abidiff abi-compat/jammy_0.107.xml _build/src/libnetplan.so.0.0 --headers-dir2 include/ --header-file2 src/abi.h --suppressions abi-compat/suppressions.abignore --no-added-syms
3381 ```
3382diff --git a/abi-compat/jammy_0.106.xml b/abi-compat/jammy_0.107.xml
3383similarity index 55%
3384rename from abi-compat/jammy_0.106.xml
3385rename to abi-compat/jammy_0.107.xml
3386index fea7cc1..f5c1b40 100644
3387--- a/abi-compat/jammy_0.106.xml
3388+++ b/abi-compat/jammy_0.107.xml
3389@@ -1,4 +1,4 @@
3390-<abi-corpus version='2.0' path='build/src/libnetplan.so.0.0' architecture='elf-amd-x86_64' soname='libnetplan.so.0.0'>
3391+<abi-corpus version='2.0' path='_build/src/libnetplan.so.0.0' architecture='elf-amd-x86_64' soname='libnetplan.so.0.0'>
3392 <elf-needed>
3393 <dependency name='libglib-2.0.so.0'/>
3394 <dependency name='libgio-2.0.so.0'/>
3395@@ -8,9 +8,13 @@
3396 <dependency name='libc.so.6'/>
3397 </elf-needed>
3398 <elf-function-symbols>
3399+ <elf-symbol name='_netplan_address_iter_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3400+ <elf-symbol name='_netplan_address_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3401 <elf-symbol name='_netplan_iter_defs_per_devtype_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3402 <elf-symbol name='_netplan_iter_defs_per_devtype_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3403 <elf-symbol name='_netplan_iter_defs_per_devtype_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3404+ <elf-symbol name='_netplan_nameserver_iter_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3405+ <elf-symbol name='_netplan_nameserver_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3406 <elf-symbol name='_netplan_netdef_get_critical' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3407 <elf-symbol name='_netplan_netdef_get_delay_vf_rebind' type='func-type' binding='global-binding' visibility='default-visibility' alias='netplan_netdef_get_delay_virtual_functions_rebind' is-defined='yes'/>
3408 <elf-symbol name='_netplan_netdef_get_embedded_switch_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3409@@ -21,8 +25,16 @@
3410 <elf-symbol name='_netplan_netdef_get_vlan_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3411 <elf-symbol name='_netplan_netdef_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3412 <elf-symbol name='_netplan_netdef_is_trivial_compound_itf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3413+ <elf-symbol name='_netplan_netdef_new_address_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3414+ <elf-symbol name='_netplan_netdef_new_nameserver_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3415+ <elf-symbol name='_netplan_netdef_new_route_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3416+ <elf-symbol name='_netplan_netdef_new_search_domain_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3417 <elf-symbol name='_netplan_netdef_pertype_iter_free' type='func-type' binding='global-binding' visibility='default-visibility' alias='_netplan_iter_defs_per_devtype_free' is-defined='yes'/>
3418 <elf-symbol name='_netplan_netdef_pertype_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' alias='_netplan_iter_defs_per_devtype_next' is-defined='yes'/>
3419+ <elf-symbol name='_netplan_route_iter_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3420+ <elf-symbol name='_netplan_route_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3421+ <elf-symbol name='_netplan_search_domain_iter_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3422+ <elf-symbol name='_netplan_search_domain_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3423 <elf-symbol name='_netplan_state_get_vf_count_for_def' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3424 <elf-symbol name='_netplan_state_new_netdef_pertype_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3425 <elf-symbol name='_write_netplan_conf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3426@@ -31,6 +43,8 @@
3427 <elf-symbol name='get_global_network' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3428 <elf-symbol name='get_unspecified_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3429 <elf-symbol name='is_route_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3430+ <elf-symbol name='is_route_rule_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3431+ <elf-symbol name='is_string_in_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3432 <elf-symbol name='is_wireguard_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3433 <elf-symbol name='netplan_backend_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3434 <elf-symbol name='netplan_clear_netdefs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3435@@ -49,10 +63,13 @@
3436 <elf-symbol name='netplan_netdef_get_bond_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3437 <elf-symbol name='netplan_netdef_get_bridge_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3438 <elf-symbol name='netplan_netdef_get_delay_virtual_functions_rebind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3439+ <elf-symbol name='netplan_netdef_get_dhcp4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3440+ <elf-symbol name='netplan_netdef_get_dhcp6' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3441 <elf-symbol name='netplan_netdef_get_embedded_switch_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3442 <elf-symbol name='netplan_netdef_get_filename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3443 <elf-symbol name='netplan_netdef_get_filepath' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3444 <elf-symbol name='netplan_netdef_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3445+ <elf-symbol name='netplan_netdef_get_macaddress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3446 <elf-symbol name='netplan_netdef_get_output_filename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3447 <elf-symbol name='netplan_netdef_get_peer_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3448 <elf-symbol name='netplan_netdef_get_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3449@@ -122,7 +139,7 @@
3450 <elf-symbol name='wifi_frequency_24' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3451 <elf-symbol name='wifi_frequency_5' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
3452 </elf-variable-symbols>
3453- <abi-instr address-size='64' path='../src/abi_compat.c' comp-dir-path='/home/lukas/canonical/netplan/build' language='LANG_C99'>
3454+ <abi-instr address-size='64' path='../src/abi_compat.c' comp-dir-path='/root/netplan/_build' language='LANG_C99'>
3455 <type-decl name='char' size-in-bits='8' id='type-id-1'/>
3456 <array-type-def dimensions='1' type-id='type-id-1' size-in-bits='8' id='type-id-2'>
3457 <subrange length='1' type-id='type-id-3' id='type-id-4'/>
3458@@ -135,15 +152,15 @@
3459 <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-9'/>
3460 <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-10'/>
3461 <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-11'/>
3462- <class-decl name='netdef_pertype_iter' size-in-bits='448' is-struct='yes' visibility='default' filepath='../src/util.c' line='712' column='1' id='type-id-12'>
3463+ <class-decl name='netdef_pertype_iter' size-in-bits='448' is-struct='yes' visibility='default' filepath='../src/util.c' line='869' column='1' id='type-id-12'>
3464 <data-member access='public' layout-offset-in-bits='0'>
3465- <var-decl name='type' type-id='type-id-13' visibility='default' filepath='../src/util.c' line='713' column='1'/>
3466+ <var-decl name='type' type-id='type-id-13' visibility='default' filepath='../src/util.c' line='870' column='1'/>
3467 </data-member>
3468 <data-member access='public' layout-offset-in-bits='64'>
3469- <var-decl name='iter' type-id='type-id-14' visibility='default' filepath='../src/util.c' line='714' column='1'/>
3470+ <var-decl name='iter' type-id='type-id-14' visibility='default' filepath='../src/util.c' line='871' column='1'/>
3471 </data-member>
3472 <data-member access='public' layout-offset-in-bits='384'>
3473- <var-decl name='np_state' type-id='type-id-15' visibility='default' filepath='../src/util.c' line='715' column='1'/>
3474+ <var-decl name='np_state' type-id='type-id-15' visibility='default' filepath='../src/util.c' line='872' column='1'/>
3475 </data-member>
3476 </class-decl>
3477 <type-decl name='int' size-in-bits='32' id='type-id-16'/>
3478@@ -173,13 +190,16 @@
3479 <enumerator name='NETPLAN_DEF_TYPE_PORT' value='8'/>
3480 <enumerator name='NETPLAN_DEF_TYPE_VRF' value='9'/>
3481 <enumerator name='NETPLAN_DEF_TYPE_NM' value='10'/>
3482- <enumerator name='NETPLAN_DEF_TYPE_MAX_' value='11'/>
3483+ <enumerator name='NETPLAN_DEF_TYPE_DUMMY' value='11'/>
3484+ <enumerator name='NETPLAN_DEF_TYPE_VETH' value='12'/>
3485+ <enumerator name='NETPLAN_DEF_TYPE_NM_PLACEHOLDER_' value='13'/>
3486+ <enumerator name='NETPLAN_DEF_TYPE_MAX_' value='14'/>
3487 </enum-decl>
3488- <typedef-decl name='NetplanDefType' type-id='type-id-27' filepath='../include/types.h' line='52' column='1' id='type-id-13'/>
3489- <typedef-decl name='NetplanParser' type-id='type-id-28' filepath='../include/types.h' line='54' column='1' id='type-id-29'/>
3490- <typedef-decl name='NetplanNetDefinition' type-id='type-id-30' filepath='../include/types.h' line='59' column='1' id='type-id-31'/>
3491- <typedef-decl name='NetplanState' type-id='type-id-32' filepath='../include/types.h' line='60' column='1' id='type-id-33'/>
3492- <enum-decl name='NetplanBackend' naming-typedef-id='type-id-34' filepath='../include/types.h' line='62' column='1' id='type-id-35'>
3493+ <typedef-decl name='NetplanDefType' type-id='type-id-27' filepath='../include/types.h' line='60' column='1' id='type-id-13'/>
3494+ <typedef-decl name='NetplanParser' type-id='type-id-28' filepath='../include/types.h' line='62' column='1' id='type-id-29'/>
3495+ <typedef-decl name='NetplanNetDefinition' type-id='type-id-30' filepath='../include/types.h' line='67' column='1' id='type-id-31'/>
3496+ <typedef-decl name='NetplanState' type-id='type-id-32' filepath='../include/types.h' line='68' column='1' id='type-id-33'/>
3497+ <enum-decl name='NetplanBackend' naming-typedef-id='type-id-34' filepath='../include/types.h' line='70' column='1' id='type-id-35'>
3498 <underlying-type type-id='type-id-19'/>
3499 <enumerator name='NETPLAN_BACKEND_NONE' value='0'/>
3500 <enumerator name='NETPLAN_BACKEND_NETWORKD' value='1'/>
3501@@ -187,8 +207,8 @@
3502 <enumerator name='NETPLAN_BACKEND_OVS' value='3'/>
3503 <enumerator name='NETPLAN_BACKEND_MAX_' value='4'/>
3504 </enum-decl>
3505- <typedef-decl name='NetplanBackend' type-id='type-id-35' filepath='../include/types.h' line='68' column='1' id='type-id-34'/>
3506- <typedef-decl name='NetplanError' type-id='type-id-36' filepath='../include/types.h' line='70' column='1' id='type-id-37'/>
3507+ <typedef-decl name='NetplanBackend' type-id='type-id-35' filepath='../include/types.h' line='76' column='1' id='type-id-34'/>
3508+ <typedef-decl name='NetplanError' type-id='type-id-36' filepath='../include/types.h' line='78' column='1' id='type-id-37'/>
3509 <typedef-decl name='NetplanFlags' type-id='type-id-16' filepath='../src/abi.h' line='23' column='1' id='type-id-38'/>
3510 <enum-decl name='NetplanOptionalAddressFlag' naming-typedef-id='type-id-39' filepath='../src/abi.h' line='27' column='1' id='type-id-40'>
3511 <underlying-type type-id='type-id-19'/>
3512@@ -244,20 +264,7 @@
3513 <enumerator name='NETPLAN_IB_MODE_MAX_' value='3'/>
3514 </enum-decl>
3515 <typedef-decl name='NetplanInfinibandMode' type-id='type-id-49' filepath='../src/abi.h' line='60' column='1' id='type-id-48'/>
3516- <enum-decl name='NetplanWifiWowlanFlag' naming-typedef-id='type-id-50' filepath='../src/abi.h' line='62' column='1' id='type-id-51'>
3517- <underlying-type type-id='type-id-19'/>
3518- <enumerator name='NETPLAN_WIFI_WOWLAN_DEFAULT' value='1'/>
3519- <enumerator name='NETPLAN_WIFI_WOWLAN_ANY' value='2'/>
3520- <enumerator name='NETPLAN_WIFI_WOWLAN_DISCONNECT' value='4'/>
3521- <enumerator name='NETPLAN_WIFI_WOWLAN_MAGIC' value='8'/>
3522- <enumerator name='NETPLAN_WIFI_WOWLAN_GTK_REKEY_FAILURE' value='16'/>
3523- <enumerator name='NETPLAN_WIFI_WOWLAN_EAP_IDENTITY_REQ' value='32'/>
3524- <enumerator name='NETPLAN_WIFI_WOWLAN_4WAY_HANDSHAKE' value='64'/>
3525- <enumerator name='NETPLAN_WIFI_WOWLAN_RFKILL_RELEASE' value='128'/>
3526- <enumerator name='NETPLAN_WIFI_WOWLAN_TCP' value='256'/>
3527- </enum-decl>
3528- <typedef-decl name='NetplanWifiWowlanFlag' type-id='type-id-51' filepath='../src/abi.h' line='72' column='1' id='type-id-50'/>
3529- <enum-decl name='NetplanTunnelMode' naming-typedef-id='type-id-52' filepath='../src/abi.h' line='83' column='1' id='type-id-53'>
3530+ <enum-decl name='NetplanTunnelMode' naming-typedef-id='type-id-50' filepath='../src/abi.h' line='83' column='1' id='type-id-51'>
3531 <underlying-type type-id='type-id-19'/>
3532 <enumerator name='NETPLAN_TUNNEL_MODE_UNKNOWN' value='0'/>
3533 <enumerator name='NETPLAN_TUNNEL_MODE_IPIP' value='1'/>
3534@@ -269,23 +276,25 @@
3535 <enumerator name='NETPLAN_TUNNEL_MODE_IPIP6' value='7'/>
3536 <enumerator name='NETPLAN_TUNNEL_MODE_IP6GRE' value='8'/>
3537 <enumerator name='NETPLAN_TUNNEL_MODE_VTI6' value='9'/>
3538- <enumerator name='NETPLAN_TUNNEL_MODE_VXLAN' value='10'/>
3539- <enumerator name='NETPLAN_TUNNEL_MODE_GRETAP' value='101'/>
3540- <enumerator name='NETPLAN_TUNNEL_MODE_IP6GRETAP' value='102'/>
3541- <enumerator name='NETPLAN_TUNNEL_MODE_WIREGUARD' value='103'/>
3542- <enumerator name='NETPLAN_TUNNEL_MODE_MAX_' value='104'/>
3543+ <enumerator name='NETPLAN_TUNNEL_MODE_GRETAP' value='10'/>
3544+ <enumerator name='NETPLAN_TUNNEL_MODE_IP6GRETAP' value='11'/>
3545+ <enumerator name='NETPLAN_TUNNEL_MODE_NM_MAX' value='12'/>
3546+ <enumerator name='NETPLAN_TUNNEL_MODE_VXLAN' value='100'/>
3547+ <enumerator name='NETPLAN_TUNNEL_MODE_WIREGUARD' value='101'/>
3548+ <enumerator name='NETPLAN_TUNNEL_MODE_MAX_' value='102'/>
3549 </enum-decl>
3550- <typedef-decl name='NetplanTunnelMode' type-id='type-id-53' filepath='../src/abi.h' line='102' column='1' id='type-id-52'/>
3551- <enum-decl name='NetplanAuthKeyManagementType' naming-typedef-id='type-id-54' filepath='../src/abi.h' line='104' column='1' id='type-id-55'>
3552+ <typedef-decl name='NetplanTunnelMode' type-id='type-id-51' filepath='../src/abi.h' line='103' column='1' id='type-id-50'/>
3553+ <enum-decl name='NetplanAuthKeyManagementType' naming-typedef-id='type-id-52' filepath='../src/abi.h' line='105' column='1' id='type-id-53'>
3554 <underlying-type type-id='type-id-19'/>
3555 <enumerator name='NETPLAN_AUTH_KEY_MANAGEMENT_NONE' value='0'/>
3556 <enumerator name='NETPLAN_AUTH_KEY_MANAGEMENT_WPA_PSK' value='1'/>
3557 <enumerator name='NETPLAN_AUTH_KEY_MANAGEMENT_WPA_EAP' value='2'/>
3558 <enumerator name='NETPLAN_AUTH_KEY_MANAGEMENT_8021X' value='3'/>
3559- <enumerator name='NETPLAN_AUTH_KEY_MANAGEMENT_MAX' value='4'/>
3560+ <enumerator name='NETPLAN_AUTH_KEY_MANAGEMENT_WPA_SAE' value='4'/>
3561+ <enumerator name='NETPLAN_AUTH_KEY_MANAGEMENT_MAX' value='5'/>
3562 </enum-decl>
3563- <typedef-decl name='NetplanAuthKeyManagementType' type-id='type-id-55' filepath='../src/abi.h' line='110' column='1' id='type-id-54'/>
3564- <enum-decl name='NetplanAuthEAPMethod' naming-typedef-id='type-id-56' filepath='../src/abi.h' line='112' column='1' id='type-id-57'>
3565+ <typedef-decl name='NetplanAuthKeyManagementType' type-id='type-id-53' filepath='../src/abi.h' line='112' column='1' id='type-id-52'/>
3566+ <enum-decl name='NetplanAuthEAPMethod' naming-typedef-id='type-id-54' filepath='../src/abi.h' line='114' column='1' id='type-id-55'>
3567 <underlying-type type-id='type-id-19'/>
3568 <enumerator name='NETPLAN_AUTH_EAP_NONE' value='0'/>
3569 <enumerator name='NETPLAN_AUTH_EAP_TLS' value='1'/>
3570@@ -293,531 +302,527 @@
3571 <enumerator name='NETPLAN_AUTH_EAP_TTLS' value='3'/>
3572 <enumerator name='NETPLAN_AUTH_EAP_METHOD_MAX' value='4'/>
3573 </enum-decl>
3574- <typedef-decl name='NetplanAuthEAPMethod' type-id='type-id-57' filepath='../src/abi.h' line='118' column='1' id='type-id-56'/>
3575- <class-decl name='authentication_settings' size-in-bits='576' is-struct='yes' visibility='default' filepath='../src/abi.h' line='120' column='1' id='type-id-58'>
3576+ <typedef-decl name='NetplanAuthEAPMethod' type-id='type-id-55' filepath='../src/abi.h' line='120' column='1' id='type-id-54'/>
3577+ <class-decl name='authentication_settings' size-in-bits='576' is-struct='yes' visibility='default' filepath='../src/abi.h' line='122' column='1' id='type-id-56'>
3578 <data-member access='public' layout-offset-in-bits='0'>
3579- <var-decl name='key_management' type-id='type-id-54' visibility='default' filepath='../src/abi.h' line='121' column='1'/>
3580+ <var-decl name='key_management' type-id='type-id-52' visibility='default' filepath='../src/abi.h' line='123' column='1'/>
3581 </data-member>
3582 <data-member access='public' layout-offset-in-bits='32'>
3583- <var-decl name='eap_method' type-id='type-id-56' visibility='default' filepath='../src/abi.h' line='122' column='1'/>
3584+ <var-decl name='eap_method' type-id='type-id-54' visibility='default' filepath='../src/abi.h' line='124' column='1'/>
3585 </data-member>
3586 <data-member access='public' layout-offset-in-bits='64'>
3587- <var-decl name='identity' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='123' column='1'/>
3588+ <var-decl name='identity' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='125' column='1'/>
3589 </data-member>
3590 <data-member access='public' layout-offset-in-bits='128'>
3591- <var-decl name='anonymous_identity' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='124' column='1'/>
3592+ <var-decl name='anonymous_identity' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='126' column='1'/>
3593 </data-member>
3594 <data-member access='public' layout-offset-in-bits='192'>
3595- <var-decl name='password' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='125' column='1'/>
3596+ <var-decl name='password' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='127' column='1'/>
3597 </data-member>
3598 <data-member access='public' layout-offset-in-bits='256'>
3599- <var-decl name='ca_certificate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='126' column='1'/>
3600+ <var-decl name='ca_certificate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='128' column='1'/>
3601 </data-member>
3602 <data-member access='public' layout-offset-in-bits='320'>
3603- <var-decl name='client_certificate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='127' column='1'/>
3604+ <var-decl name='client_certificate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='129' column='1'/>
3605 </data-member>
3606 <data-member access='public' layout-offset-in-bits='384'>
3607- <var-decl name='client_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='128' column='1'/>
3608+ <var-decl name='client_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='130' column='1'/>
3609 </data-member>
3610 <data-member access='public' layout-offset-in-bits='448'>
3611- <var-decl name='client_key_password' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='129' column='1'/>
3612+ <var-decl name='client_key_password' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='131' column='1'/>
3613 </data-member>
3614 <data-member access='public' layout-offset-in-bits='512'>
3615- <var-decl name='phase2_auth' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='130' column='1'/>
3616+ <var-decl name='phase2_auth' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='132' column='1'/>
3617 </data-member>
3618 </class-decl>
3619- <typedef-decl name='NetplanAuthenticationSettings' type-id='type-id-58' filepath='../src/abi.h' line='131' column='1' id='type-id-59'/>
3620- <class-decl name='ovs_controller' size-in-bits='128' is-struct='yes' visibility='default' filepath='../src/abi.h' line='133' column='1' id='type-id-60'>
3621+ <typedef-decl name='NetplanAuthenticationSettings' type-id='type-id-56' filepath='../src/abi.h' line='133' column='1' id='type-id-57'/>
3622+ <class-decl name='ovs_controller' size-in-bits='128' is-struct='yes' visibility='default' filepath='../src/abi.h' line='143' column='1' id='type-id-58'>
3623 <data-member access='public' layout-offset-in-bits='0'>
3624- <var-decl name='connection_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='134' column='1'/>
3625+ <var-decl name='connection_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='144' column='1'/>
3626 </data-member>
3627 <data-member access='public' layout-offset-in-bits='64'>
3628- <var-decl name='addresses' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='135' column='1'/>
3629+ <var-decl name='addresses' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='145' column='1'/>
3630 </data-member>
3631 </class-decl>
3632- <typedef-decl name='NetplanOVSController' type-id='type-id-60' filepath='../src/abi.h' line='136' column='1' id='type-id-62'/>
3633- <class-decl name='ovs_settings' size-in-bits='1152' is-struct='yes' visibility='default' filepath='../src/abi.h' line='138' column='1' id='type-id-63'>
3634+ <typedef-decl name='NetplanOVSController' type-id='type-id-58' filepath='../src/abi.h' line='146' column='1' id='type-id-60'/>
3635+ <class-decl name='ovs_settings' size-in-bits='1152' is-struct='yes' visibility='default' filepath='../src/abi.h' line='148' column='1' id='type-id-61'>
3636 <data-member access='public' layout-offset-in-bits='0'>
3637- <var-decl name='external_ids' type-id='type-id-64' visibility='default' filepath='../src/abi.h' line='139' column='1'/>
3638+ <var-decl name='external_ids' type-id='type-id-62' visibility='default' filepath='../src/abi.h' line='149' column='1'/>
3639 </data-member>
3640 <data-member access='public' layout-offset-in-bits='64'>
3641- <var-decl name='other_config' type-id='type-id-64' visibility='default' filepath='../src/abi.h' line='140' column='1'/>
3642+ <var-decl name='other_config' type-id='type-id-62' visibility='default' filepath='../src/abi.h' line='150' column='1'/>
3643 </data-member>
3644 <data-member access='public' layout-offset-in-bits='128'>
3645- <var-decl name='lacp' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='141' column='1'/>
3646+ <var-decl name='lacp' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='151' column='1'/>
3647 </data-member>
3648 <data-member access='public' layout-offset-in-bits='192'>
3649- <var-decl name='fail_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='142' column='1'/>
3650+ <var-decl name='fail_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='152' column='1'/>
3651 </data-member>
3652 <data-member access='public' layout-offset-in-bits='256'>
3653- <var-decl name='mcast_snooping' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='143' column='1'/>
3654+ <var-decl name='mcast_snooping' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='153' column='1'/>
3655 </data-member>
3656 <data-member access='public' layout-offset-in-bits='320'>
3657- <var-decl name='protocols' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='144' column='1'/>
3658+ <var-decl name='protocols' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='154' column='1'/>
3659 </data-member>
3660 <data-member access='public' layout-offset-in-bits='384'>
3661- <var-decl name='rstp' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='145' column='1'/>
3662+ <var-decl name='rstp' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='155' column='1'/>
3663 </data-member>
3664 <data-member access='public' layout-offset-in-bits='448'>
3665- <var-decl name='controller' type-id='type-id-62' visibility='default' filepath='../src/abi.h' line='146' column='1'/>
3666+ <var-decl name='controller' type-id='type-id-60' visibility='default' filepath='../src/abi.h' line='156' column='1'/>
3667 </data-member>
3668 <data-member access='public' layout-offset-in-bits='576'>
3669- <var-decl name='ssl' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='147' column='1'/>
3670+ <var-decl name='ssl' type-id='type-id-57' visibility='default' filepath='../src/abi.h' line='157' column='1'/>
3671 </data-member>
3672 </class-decl>
3673- <typedef-decl name='NetplanOVSSettings' type-id='type-id-63' filepath='../src/abi.h' line='148' column='1' id='type-id-65'/>
3674- <union-decl name='NetplanBackendSettings' size-in-bits='320' naming-typedef-id='type-id-66' visibility='default' filepath='../src/abi.h' line='150' column='1' id='type-id-67'>
3675- <data-member access='public'>
3676- <var-decl name='nm' type-id='type-id-68' visibility='default' filepath='../src/abi.h' line='157' column='1'/>
3677- </data-member>
3678- <data-member access='public'>
3679- <var-decl name='networkd' type-id='type-id-69' visibility='default' filepath='../src/abi.h' line='160' column='1'/>
3680- </data-member>
3681- </union-decl>
3682- <class-decl name='NetplanNMSettings' size-in-bits='320' is-struct='yes' visibility='default' filepath='../src/abi.h' line='151' column='1' id='type-id-68'>
3683+ <typedef-decl name='NetplanOVSSettings' type-id='type-id-61' filepath='../src/abi.h' line='158' column='1' id='type-id-63'/>
3684+ <class-decl name='netplan_backend_settings' size-in-bits='320' is-struct='yes' visibility='default' filepath='../src/abi.h' line='160' column='1' id='type-id-64'>
3685 <data-member access='public' layout-offset-in-bits='0'>
3686- <var-decl name='name' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='152' column='1'/>
3687+ <var-decl name='name' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='161' column='1'/>
3688 </data-member>
3689 <data-member access='public' layout-offset-in-bits='64'>
3690- <var-decl name='uuid' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='153' column='1'/>
3691+ <var-decl name='uuid' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='162' column='1'/>
3692 </data-member>
3693 <data-member access='public' layout-offset-in-bits='128'>
3694- <var-decl name='stable_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='154' column='1'/>
3695+ <var-decl name='stable_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='163' column='1'/>
3696 </data-member>
3697 <data-member access='public' layout-offset-in-bits='192'>
3698- <var-decl name='device' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='155' column='1'/>
3699+ <var-decl name='device' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='164' column='1'/>
3700 </data-member>
3701 <data-member access='public' layout-offset-in-bits='256'>
3702- <var-decl name='passthrough' type-id='type-id-70' visibility='default' filepath='../src/abi.h' line='156' column='1'/>
3703+ <var-decl name='passthrough' type-id='type-id-65' visibility='default' filepath='../src/abi.h' line='165' column='1'/>
3704 </data-member>
3705 </class-decl>
3706- <class-decl name='NetplanNetworkdSettings' size-in-bits='64' is-struct='yes' visibility='default' filepath='../src/abi.h' line='158' column='1' id='type-id-69'>
3707- <data-member access='public' layout-offset-in-bits='0'>
3708- <var-decl name='unit' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='159' column='1'/>
3709- </data-member>
3710- </class-decl>
3711- <typedef-decl name='NetplanBackendSettings' type-id='type-id-67' filepath='../src/abi.h' line='161' column='1' id='type-id-66'/>
3712- <enum-decl name='NetplanTristate' naming-typedef-id='type-id-71' filepath='../src/abi.h' line='164' column='1' id='type-id-72'>
3713+ <typedef-decl name='NetplanBackendSettings' type-id='type-id-64' filepath='../src/abi.h' line='166' column='1' id='type-id-66'/>
3714+ <enum-decl name='NetplanTristate' naming-typedef-id='type-id-67' filepath='../src/abi.h' line='169' column='1' id='type-id-68'>
3715 <underlying-type type-id='type-id-19'/>
3716 <enumerator name='NETPLAN_TRISTATE_UNSET' value='-1'/>
3717 <enumerator name='NETPLAN_TRISTATE_FALSE' value='0'/>
3718 <enumerator name='NETPLAN_TRISTATE_TRUE' value='1'/>
3719 </enum-decl>
3720- <typedef-decl name='NetplanTristate' type-id='type-id-72' filepath='../src/abi.h' line='182' column='1' id='type-id-71'/>
3721- <typedef-decl name='NetplanVxlan' type-id='type-id-73' filepath='../src/abi.h' line='184' column='1' id='type-id-74'/>
3722- <class-decl name='netplan_net_definition' size-in-bits='9344' is-struct='yes' visibility='default' filepath='../src/abi.h' line='189' column='1' id='type-id-30'>
3723+ <typedef-decl name='NetplanTristate' type-id='type-id-68' filepath='../src/abi.h' line='187' column='1' id='type-id-67'/>
3724+ <typedef-decl name='NetplanVxlan' type-id='type-id-69' filepath='../src/abi.h' line='189' column='1' id='type-id-70'/>
3725+ <class-decl name='netplan_net_definition' size-in-bits='9472' is-struct='yes' visibility='default' filepath='../src/abi.h' line='194' column='1' id='type-id-30'>
3726 <data-member access='public' layout-offset-in-bits='0'>
3727- <var-decl name='type' type-id='type-id-13' visibility='default' filepath='../src/abi.h' line='190' column='1'/>
3728+ <var-decl name='type' type-id='type-id-13' visibility='default' filepath='../src/abi.h' line='195' column='1'/>
3729 </data-member>
3730 <data-member access='public' layout-offset-in-bits='32'>
3731- <var-decl name='backend' type-id='type-id-34' visibility='default' filepath='../src/abi.h' line='191' column='1'/>
3732+ <var-decl name='backend' type-id='type-id-34' visibility='default' filepath='../src/abi.h' line='196' column='1'/>
3733 </data-member>
3734 <data-member access='public' layout-offset-in-bits='64'>
3735- <var-decl name='id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='192' column='1'/>
3736+ <var-decl name='id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='197' column='1'/>
3737 </data-member>
3738 <data-member access='public' layout-offset-in-bits='128'>
3739- <var-decl name='uuid' type-id='type-id-75' visibility='default' filepath='../src/abi.h' line='194' column='1'/>
3740+ <var-decl name='uuid' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='199' column='1'/>
3741 </data-member>
3742 <data-member access='public' layout-offset-in-bits='256'>
3743- <var-decl name='optional' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='197' column='1'/>
3744+ <var-decl name='optional' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='202' column='1'/>
3745 </data-member>
3746 <data-member access='public' layout-offset-in-bits='288'>
3747- <var-decl name='optional_addresses' type-id='type-id-39' visibility='default' filepath='../src/abi.h' line='198' column='1'/>
3748+ <var-decl name='optional_addresses' type-id='type-id-39' visibility='default' filepath='../src/abi.h' line='203' column='1'/>
3749 </data-member>
3750 <data-member access='public' layout-offset-in-bits='320'>
3751- <var-decl name='critical' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='199' column='1'/>
3752+ <var-decl name='critical' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='204' column='1'/>
3753 </data-member>
3754 <data-member access='public' layout-offset-in-bits='352'>
3755- <var-decl name='dhcp4' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='202' column='1'/>
3756+ <var-decl name='dhcp4' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='207' column='1'/>
3757 </data-member>
3758 <data-member access='public' layout-offset-in-bits='384'>
3759- <var-decl name='dhcp6' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='203' column='1'/>
3760+ <var-decl name='dhcp6' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='208' column='1'/>
3761 </data-member>
3762 <data-member access='public' layout-offset-in-bits='448'>
3763- <var-decl name='dhcp_identifier' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='204' column='1'/>
3764+ <var-decl name='dhcp_identifier' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='209' column='1'/>
3765 </data-member>
3766 <data-member access='public' layout-offset-in-bits='512'>
3767- <var-decl name='dhcp4_overrides' type-id='type-id-45' visibility='default' filepath='../src/abi.h' line='205' column='1'/>
3768+ <var-decl name='dhcp4_overrides' type-id='type-id-45' visibility='default' filepath='../src/abi.h' line='210' column='1'/>
3769 </data-member>
3770 <data-member access='public' layout-offset-in-bits='896'>
3771- <var-decl name='dhcp6_overrides' type-id='type-id-45' visibility='default' filepath='../src/abi.h' line='206' column='1'/>
3772+ <var-decl name='dhcp6_overrides' type-id='type-id-45' visibility='default' filepath='../src/abi.h' line='211' column='1'/>
3773 </data-member>
3774 <data-member access='public' layout-offset-in-bits='1280'>
3775- <var-decl name='accept_ra' type-id='type-id-46' visibility='default' filepath='../src/abi.h' line='207' column='1'/>
3776+ <var-decl name='accept_ra' type-id='type-id-46' visibility='default' filepath='../src/abi.h' line='212' column='1'/>
3777 </data-member>
3778 <data-member access='public' layout-offset-in-bits='1344'>
3779- <var-decl name='ip4_addresses' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='208' column='1'/>
3780+ <var-decl name='ip4_addresses' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='213' column='1'/>
3781 </data-member>
3782 <data-member access='public' layout-offset-in-bits='1408'>
3783- <var-decl name='ip6_addresses' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='209' column='1'/>
3784+ <var-decl name='ip6_addresses' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='214' column='1'/>
3785 </data-member>
3786 <data-member access='public' layout-offset-in-bits='1472'>
3787- <var-decl name='address_options' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='210' column='1'/>
3788+ <var-decl name='address_options' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='215' column='1'/>
3789 </data-member>
3790 <data-member access='public' layout-offset-in-bits='1536'>
3791- <var-decl name='ip6_privacy' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='211' column='1'/>
3792+ <var-decl name='ip6_privacy' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='216' column='1'/>
3793 </data-member>
3794 <data-member access='public' layout-offset-in-bits='1568'>
3795- <var-decl name='ip6_addr_gen_mode' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='212' column='1'/>
3796+ <var-decl name='ip6_addr_gen_mode' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='217' column='1'/>
3797 </data-member>
3798 <data-member access='public' layout-offset-in-bits='1600'>
3799- <var-decl name='ip6_addr_gen_token' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='213' column='1'/>
3800+ <var-decl name='ip6_addr_gen_token' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='218' column='1'/>
3801 </data-member>
3802 <data-member access='public' layout-offset-in-bits='1664'>
3803- <var-decl name='gateway4' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='214' column='1'/>
3804+ <var-decl name='gateway4' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='219' column='1'/>
3805 </data-member>
3806 <data-member access='public' layout-offset-in-bits='1728'>
3807- <var-decl name='gateway6' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='215' column='1'/>
3808+ <var-decl name='gateway6' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='220' column='1'/>
3809 </data-member>
3810 <data-member access='public' layout-offset-in-bits='1792'>
3811- <var-decl name='ip4_nameservers' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='216' column='1'/>
3812+ <var-decl name='ip4_nameservers' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='221' column='1'/>
3813 </data-member>
3814 <data-member access='public' layout-offset-in-bits='1856'>
3815- <var-decl name='ip6_nameservers' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='217' column='1'/>
3816+ <var-decl name='ip6_nameservers' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='222' column='1'/>
3817 </data-member>
3818 <data-member access='public' layout-offset-in-bits='1920'>
3819- <var-decl name='search_domains' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='218' column='1'/>
3820+ <var-decl name='search_domains' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='223' column='1'/>
3821 </data-member>
3822 <data-member access='public' layout-offset-in-bits='1984'>
3823- <var-decl name='routes' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='219' column='1'/>
3824+ <var-decl name='routes' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='224' column='1'/>
3825 </data-member>
3826 <data-member access='public' layout-offset-in-bits='2048'>
3827- <var-decl name='ip_rules' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='220' column='1'/>
3828+ <var-decl name='ip_rules' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='225' column='1'/>
3829 </data-member>
3830 <data-member access='public' layout-offset-in-bits='2112'>
3831- <var-decl name='wireguard_peers' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='221' column='1'/>
3832+ <var-decl name='wireguard_peers' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='226' column='1'/>
3833 </data-member>
3834 <data-member access='public' layout-offset-in-bits='2176'>
3835- <var-decl name='linklocal' type-id='type-id-76' visibility='default' filepath='../src/abi.h' line='225' column='1'/>
3836+ <var-decl name='linklocal' type-id='type-id-72' visibility='default' filepath='../src/abi.h' line='230' column='1'/>
3837 </data-member>
3838 <data-member access='public' layout-offset-in-bits='2240'>
3839- <var-decl name='bridge' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='228' column='1'/>
3840+ <var-decl name='bridge' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='233' column='1'/>
3841 </data-member>
3842 <data-member access='public' layout-offset-in-bits='2304'>
3843- <var-decl name='bond' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='229' column='1'/>
3844+ <var-decl name='bond' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='234' column='1'/>
3845 </data-member>
3846 <data-member access='public' layout-offset-in-bits='2368'>
3847- <var-decl name='peer' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='232' column='1'/>
3848+ <var-decl name='peer' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='237' column='1'/>
3849 </data-member>
3850 <data-member access='public' layout-offset-in-bits='2432'>
3851- <var-decl name='vlan_id' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='235' column='1'/>
3852+ <var-decl name='vlan_id' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='240' column='1'/>
3853 </data-member>
3854 <data-member access='public' layout-offset-in-bits='2496'>
3855- <var-decl name='vlan_link' type-id='type-id-77' visibility='default' filepath='../src/abi.h' line='236' column='1'/>
3856+ <var-decl name='vlan_link' type-id='type-id-73' visibility='default' filepath='../src/abi.h' line='241' column='1'/>
3857 </data-member>
3858 <data-member access='public' layout-offset-in-bits='2560'>
3859- <var-decl name='has_vlans' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='237' column='1'/>
3860+ <var-decl name='has_vlans' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='242' column='1'/>
3861 </data-member>
3862 <data-member access='public' layout-offset-in-bits='2624'>
3863- <var-decl name='set_mac' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='240' column='1'/>
3864+ <var-decl name='set_mac' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='245' column='1'/>
3865 </data-member>
3866 <data-member access='public' layout-offset-in-bits='2688'>
3867- <var-decl name='mtubytes' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='243' column='1'/>
3868+ <var-decl name='mtubytes' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='248' column='1'/>
3869 </data-member>
3870 <data-member access='public' layout-offset-in-bits='2720'>
3871- <var-decl name='ipv6_mtubytes' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='246' column='1'/>
3872+ <var-decl name='ipv6_mtubytes' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='251' column='1'/>
3873 </data-member>
3874 <data-member access='public' layout-offset-in-bits='2752'>
3875- <var-decl name='set_name' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='249' column='1'/>
3876+ <var-decl name='set_name' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='254' column='1'/>
3877 </data-member>
3878 <data-member access='public' layout-offset-in-bits='2816'>
3879- <var-decl name='match' type-id='type-id-78' visibility='default' filepath='../src/abi.h' line='255' column='1'/>
3880+ <var-decl name='match' type-id='type-id-74' visibility='default' filepath='../src/abi.h' line='260' column='1'/>
3881 </data-member>
3882 <data-member access='public' layout-offset-in-bits='3008'>
3883- <var-decl name='has_match' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='256' column='1'/>
3884+ <var-decl name='has_match' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='261' column='1'/>
3885 </data-member>
3886 <data-member access='public' layout-offset-in-bits='3040'>
3887- <var-decl name='wake_on_lan' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='257' column='1'/>
3888+ <var-decl name='wake_on_lan' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='262' column='1'/>
3889 </data-member>
3890 <data-member access='public' layout-offset-in-bits='3072'>
3891- <var-decl name='wowlan' type-id='type-id-50' visibility='default' filepath='../src/abi.h' line='258' column='1'/>
3892+ <var-decl name='wowlan' type-id='type-id-75' visibility='default' filepath='../src/abi.h' line='263' column='1'/>
3893 </data-member>
3894 <data-member access='public' layout-offset-in-bits='3104'>
3895- <var-decl name='emit_lldp' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='259' column='1'/>
3896+ <var-decl name='emit_lldp' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='264' column='1'/>
3897 </data-member>
3898 <data-member access='public' layout-offset-in-bits='3136'>
3899- <var-decl name='access_points' type-id='type-id-64' visibility='default' filepath='../src/abi.h' line='262' column='1'/>
3900+ <var-decl name='access_points' type-id='type-id-62' visibility='default' filepath='../src/abi.h' line='267' column='1'/>
3901 </data-member>
3902 <data-member access='public' layout-offset-in-bits='3200'>
3903- <var-decl name='bond_params' type-id='type-id-79' visibility='default' filepath='../src/abi.h' line='286' column='1'/>
3904+ <var-decl name='bond_params' type-id='type-id-76' visibility='default' filepath='../src/abi.h' line='291' column='1'/>
3905 </data-member>
3906 <data-member access='public' layout-offset-in-bits='4416'>
3907- <var-decl name='modem_params' type-id='type-id-80' visibility='default' filepath='../src/abi.h' line='300' column='1'/>
3908+ <var-decl name='modem_params' type-id='type-id-77' visibility='default' filepath='../src/abi.h' line='305' column='1'/>
3909 </data-member>
3910 <data-member access='public' layout-offset-in-bits='5056'>
3911- <var-decl name='bridge_params' type-id='type-id-81' visibility='default' filepath='../src/abi.h' line='311' column='1'/>
3912+ <var-decl name='bridge_params' type-id='type-id-78' visibility='default' filepath='../src/abi.h' line='316' column='1'/>
3913 </data-member>
3914 <data-member access='public' layout-offset-in-bits='5440'>
3915- <var-decl name='custom_bridging' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='312' column='1'/>
3916+ <var-decl name='custom_bridging' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='317' column='1'/>
3917 </data-member>
3918 <data-member access='public' layout-offset-in-bits='5504'>
3919- <var-decl name='tunnel' type-id='type-id-82' visibility='default' filepath='../src/abi.h' line='323' column='1'/>
3920+ <var-decl name='tunnel' type-id='type-id-79' visibility='default' filepath='../src/abi.h' line='328' column='1'/>
3921 </data-member>
3922 <data-member access='public' layout-offset-in-bits='5952'>
3923- <var-decl name='auth' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='325' column='1'/>
3924+ <var-decl name='auth' type-id='type-id-57' visibility='default' filepath='../src/abi.h' line='330' column='1'/>
3925 </data-member>
3926 <data-member access='public' layout-offset-in-bits='6528'>
3927- <var-decl name='has_auth' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='326' column='1'/>
3928+ <var-decl name='has_auth' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='331' column='1'/>
3929 </data-member>
3930 <data-member access='public' layout-offset-in-bits='6592'>
3931- <var-decl name='sriov_link' type-id='type-id-77' visibility='default' filepath='../src/abi.h' line='330' column='1'/>
3932+ <var-decl name='sriov_link' type-id='type-id-73' visibility='default' filepath='../src/abi.h' line='335' column='1'/>
3933 </data-member>
3934 <data-member access='public' layout-offset-in-bits='6656'>
3935- <var-decl name='sriov_vlan_filter' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='331' column='1'/>
3936+ <var-decl name='sriov_vlan_filter' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='336' column='1'/>
3937 </data-member>
3938 <data-member access='public' layout-offset-in-bits='6688'>
3939- <var-decl name='sriov_explicit_vf_count' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='332' column='1'/>
3940+ <var-decl name='sriov_explicit_vf_count' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='337' column='1'/>
3941 </data-member>
3942 <data-member access='public' layout-offset-in-bits='6720'>
3943- <var-decl name='ovs_settings' type-id='type-id-65' visibility='default' filepath='../src/abi.h' line='336' column='1'/>
3944+ <var-decl name='ovs_settings' type-id='type-id-63' visibility='default' filepath='../src/abi.h' line='341' column='1'/>
3945 </data-member>
3946 <data-member access='public' layout-offset-in-bits='7872'>
3947- <var-decl name='backend_settings' type-id='type-id-66' visibility='default' filepath='../src/abi.h' line='338' column='1'/>
3948+ <var-decl name='backend_settings' type-id='type-id-66' visibility='default' filepath='../src/abi.h' line='343' column='1'/>
3949 </data-member>
3950 <data-member access='public' layout-offset-in-bits='8192'>
3951- <var-decl name='filepath' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='340' column='1'/>
3952+ <var-decl name='filepath' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='345' column='1'/>
3953 </data-member>
3954 <data-member access='public' layout-offset-in-bits='8256'>
3955- <var-decl name='tunnel_ttl' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='342' column='1'/>
3956+ <var-decl name='tunnel_ttl' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='347' column='1'/>
3957 </data-member>
3958 <data-member access='public' layout-offset-in-bits='8320'>
3959- <var-decl name='activation_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='345' column='1'/>
3960+ <var-decl name='activation_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='350' column='1'/>
3961 </data-member>
3962 <data-member access='public' layout-offset-in-bits='8384'>
3963- <var-decl name='ignore_carrier' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='348' column='1'/>
3964+ <var-decl name='ignore_carrier' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='353' column='1'/>
3965 </data-member>
3966 <data-member access='public' layout-offset-in-bits='8416'>
3967- <var-decl name='receive_checksum_offload' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='351' column='1'/>
3968+ <var-decl name='receive_checksum_offload' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='356' column='1'/>
3969 </data-member>
3970 <data-member access='public' layout-offset-in-bits='8448'>
3971- <var-decl name='transmit_checksum_offload' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='352' column='1'/>
3972+ <var-decl name='transmit_checksum_offload' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='357' column='1'/>
3973 </data-member>
3974 <data-member access='public' layout-offset-in-bits='8480'>
3975- <var-decl name='tcp_segmentation_offload' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='353' column='1'/>
3976+ <var-decl name='tcp_segmentation_offload' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='358' column='1'/>
3977 </data-member>
3978 <data-member access='public' layout-offset-in-bits='8512'>
3979- <var-decl name='tcp6_segmentation_offload' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='354' column='1'/>
3980+ <var-decl name='tcp6_segmentation_offload' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='359' column='1'/>
3981 </data-member>
3982 <data-member access='public' layout-offset-in-bits='8544'>
3983- <var-decl name='generic_segmentation_offload' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='355' column='1'/>
3984+ <var-decl name='generic_segmentation_offload' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='360' column='1'/>
3985 </data-member>
3986 <data-member access='public' layout-offset-in-bits='8576'>
3987- <var-decl name='generic_receive_offload' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='356' column='1'/>
3988+ <var-decl name='generic_receive_offload' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='361' column='1'/>
3989 </data-member>
3990 <data-member access='public' layout-offset-in-bits='8608'>
3991- <var-decl name='large_receive_offload' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='357' column='1'/>
3992+ <var-decl name='large_receive_offload' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='362' column='1'/>
3993 </data-member>
3994 <data-member access='public' layout-offset-in-bits='8640'>
3995- <var-decl name='_private' type-id='type-id-83' visibility='default' filepath='../src/abi.h' line='359' column='1'/>
3996+ <var-decl name='_private' type-id='type-id-80' visibility='default' filepath='../src/abi.h' line='364' column='1'/>
3997 </data-member>
3998 <data-member access='public' layout-offset-in-bits='8704'>
3999- <var-decl name='embedded_switch_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='362' column='1'/>
4000+ <var-decl name='embedded_switch_mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='367' column='1'/>
4001 </data-member>
4002 <data-member access='public' layout-offset-in-bits='8768'>
4003- <var-decl name='sriov_delay_virtual_functions_rebind' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='363' column='1'/>
4004+ <var-decl name='sriov_delay_virtual_functions_rebind' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='368' column='1'/>
4005 </data-member>
4006 <data-member access='public' layout-offset-in-bits='8800'>
4007- <var-decl name='ib_mode' type-id='type-id-48' visibility='default' filepath='../src/abi.h' line='366' column='1'/>
4008+ <var-decl name='ib_mode' type-id='type-id-48' visibility='default' filepath='../src/abi.h' line='371' column='1'/>
4009 </data-member>
4010 <data-member access='public' layout-offset-in-bits='8832'>
4011- <var-decl name='regulatory_domain' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='369' column='1'/>
4012+ <var-decl name='regulatory_domain' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='374' column='1'/>
4013 </data-member>
4014 <data-member access='public' layout-offset-in-bits='8896'>
4015- <var-decl name='vrf_link' type-id='type-id-77' visibility='default' filepath='../src/abi.h' line='373' column='1'/>
4016+ <var-decl name='vrf_link' type-id='type-id-73' visibility='default' filepath='../src/abi.h' line='378' column='1'/>
4017 </data-member>
4018 <data-member access='public' layout-offset-in-bits='8960'>
4019- <var-decl name='vrf_table' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='374' column='1'/>
4020+ <var-decl name='vrf_table' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='379' column='1'/>
4021 </data-member>
4022 <data-member access='public' layout-offset-in-bits='8992'>
4023- <var-decl name='bridge_neigh_suppress' type-id='type-id-71' visibility='default' filepath='../src/abi.h' line='376' column='1'/>
4024+ <var-decl name='bridge_neigh_suppress' type-id='type-id-67' visibility='default' filepath='../src/abi.h' line='381' column='1'/>
4025 </data-member>
4026 <data-member access='public' layout-offset-in-bits='9024'>
4027- <var-decl name='has_vxlans' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='380' column='1'/>
4028+ <var-decl name='has_vxlans' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='385' column='1'/>
4029 </data-member>
4030 <data-member access='public' layout-offset-in-bits='9088'>
4031- <var-decl name='vxlan' type-id='type-id-84' visibility='default' filepath='../src/abi.h' line='381' column='1'/>
4032+ <var-decl name='vxlan' type-id='type-id-81' visibility='default' filepath='../src/abi.h' line='386' column='1'/>
4033 </data-member>
4034 <data-member access='public' layout-offset-in-bits='9152'>
4035- <var-decl name='bridge_link' type-id='type-id-77' visibility='default' filepath='../src/abi.h' line='383' column='1'/>
4036+ <var-decl name='bridge_link' type-id='type-id-73' visibility='default' filepath='../src/abi.h' line='388' column='1'/>
4037 </data-member>
4038 <data-member access='public' layout-offset-in-bits='9216'>
4039- <var-decl name='bond_link' type-id='type-id-77' visibility='default' filepath='../src/abi.h' line='384' column='1'/>
4040+ <var-decl name='bond_link' type-id='type-id-73' visibility='default' filepath='../src/abi.h' line='389' column='1'/>
4041 </data-member>
4042 <data-member access='public' layout-offset-in-bits='9280'>
4043- <var-decl name='peer_link' type-id='type-id-77' visibility='default' filepath='../src/abi.h' line='385' column='1'/>
4044+ <var-decl name='peer_link' type-id='type-id-73' visibility='default' filepath='../src/abi.h' line='390' column='1'/>
4045+ </data-member>
4046+ <data-member access='public' layout-offset-in-bits='9344'>
4047+ <var-decl name='has_backend_settings_nm' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='393' column='1'/>
4048+ </data-member>
4049+ <data-member access='public' layout-offset-in-bits='9376'>
4050+ <var-decl name='tunnel_private_key_flags' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='395' column='1'/>
4051+ </data-member>
4052+ <data-member access='public' layout-offset-in-bits='9408'>
4053+ <var-decl name='veth_peer_link' type-id='type-id-73' visibility='default' filepath='../src/abi.h' line='399' column='1'/>
4054 </data-member>
4055 </class-decl>
4056- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='222' column='1' id='type-id-76'>
4057+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='227' column='1' id='type-id-72'>
4058 <data-member access='public' layout-offset-in-bits='0'>
4059- <var-decl name='ipv4' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='223' column='1'/>
4060+ <var-decl name='ipv4' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='228' column='1'/>
4061 </data-member>
4062 <data-member access='public' layout-offset-in-bits='32'>
4063- <var-decl name='ipv6' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='224' column='1'/>
4064+ <var-decl name='ipv6' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='229' column='1'/>
4065 </data-member>
4066 </class-decl>
4067- <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='250' column='1' id='type-id-78'>
4068+ <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='255' column='1' id='type-id-74'>
4069 <data-member access='public' layout-offset-in-bits='0'>
4070- <var-decl name='driver' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='252' column='1'/>
4071+ <var-decl name='driver' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='257' column='1'/>
4072 </data-member>
4073 <data-member access='public' layout-offset-in-bits='64'>
4074- <var-decl name='mac' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='253' column='1'/>
4075+ <var-decl name='mac' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='258' column='1'/>
4076 </data-member>
4077 <data-member access='public' layout-offset-in-bits='128'>
4078- <var-decl name='original_name' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='254' column='1'/>
4079+ <var-decl name='original_name' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='259' column='1'/>
4080 </data-member>
4081 </class-decl>
4082- <class-decl name='__anonymous_struct__2' size-in-bits='1216' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='264' column='1' id='type-id-79'>
4083+ <class-decl name='__anonymous_struct__2' size-in-bits='1216' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='269' column='1' id='type-id-76'>
4084 <data-member access='public' layout-offset-in-bits='0'>
4085- <var-decl name='mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='265' column='1'/>
4086+ <var-decl name='mode' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='270' column='1'/>
4087 </data-member>
4088 <data-member access='public' layout-offset-in-bits='64'>
4089- <var-decl name='lacp_rate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='266' column='1'/>
4090+ <var-decl name='lacp_rate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='271' column='1'/>
4091 </data-member>
4092 <data-member access='public' layout-offset-in-bits='128'>
4093- <var-decl name='monitor_interval' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='267' column='1'/>
4094+ <var-decl name='monitor_interval' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='272' column='1'/>
4095 </data-member>
4096 <data-member access='public' layout-offset-in-bits='192'>
4097- <var-decl name='min_links' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='268' column='1'/>
4098+ <var-decl name='min_links' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='273' column='1'/>
4099 </data-member>
4100 <data-member access='public' layout-offset-in-bits='256'>
4101- <var-decl name='transmit_hash_policy' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='269' column='1'/>
4102+ <var-decl name='transmit_hash_policy' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='274' column='1'/>
4103 </data-member>
4104 <data-member access='public' layout-offset-in-bits='320'>
4105- <var-decl name='selection_logic' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='270' column='1'/>
4106+ <var-decl name='selection_logic' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='275' column='1'/>
4107 </data-member>
4108 <data-member access='public' layout-offset-in-bits='384'>
4109- <var-decl name='all_members_active' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='271' column='1'/>
4110+ <var-decl name='all_members_active' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='276' column='1'/>
4111 </data-member>
4112 <data-member access='public' layout-offset-in-bits='448'>
4113- <var-decl name='arp_interval' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='272' column='1'/>
4114+ <var-decl name='arp_interval' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='277' column='1'/>
4115 </data-member>
4116 <data-member access='public' layout-offset-in-bits='512'>
4117- <var-decl name='arp_ip_targets' type-id='type-id-61' visibility='default' filepath='../src/abi.h' line='273' column='1'/>
4118+ <var-decl name='arp_ip_targets' type-id='type-id-59' visibility='default' filepath='../src/abi.h' line='278' column='1'/>
4119 </data-member>
4120 <data-member access='public' layout-offset-in-bits='576'>
4121- <var-decl name='arp_validate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='274' column='1'/>
4122+ <var-decl name='arp_validate' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='279' column='1'/>
4123 </data-member>
4124 <data-member access='public' layout-offset-in-bits='640'>
4125- <var-decl name='arp_all_targets' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='275' column='1'/>
4126+ <var-decl name='arp_all_targets' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='280' column='1'/>
4127 </data-member>
4128 <data-member access='public' layout-offset-in-bits='704'>
4129- <var-decl name='up_delay' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='276' column='1'/>
4130+ <var-decl name='up_delay' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='281' column='1'/>
4131 </data-member>
4132 <data-member access='public' layout-offset-in-bits='768'>
4133- <var-decl name='down_delay' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='277' column='1'/>
4134+ <var-decl name='down_delay' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='282' column='1'/>
4135 </data-member>
4136 <data-member access='public' layout-offset-in-bits='832'>
4137- <var-decl name='fail_over_mac_policy' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='278' column='1'/>
4138+ <var-decl name='fail_over_mac_policy' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='283' column='1'/>
4139 </data-member>
4140 <data-member access='public' layout-offset-in-bits='896'>
4141- <var-decl name='gratuitous_arp' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='279' column='1'/>
4142+ <var-decl name='gratuitous_arp' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='284' column='1'/>
4143 </data-member>
4144 <data-member access='public' layout-offset-in-bits='928'>
4145- <var-decl name='packets_per_member' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='281' column='1'/>
4146+ <var-decl name='packets_per_member' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='286' column='1'/>
4147 </data-member>
4148 <data-member access='public' layout-offset-in-bits='960'>
4149- <var-decl name='primary_reselect_policy' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='282' column='1'/>
4150+ <var-decl name='primary_reselect_policy' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='287' column='1'/>
4151 </data-member>
4152 <data-member access='public' layout-offset-in-bits='1024'>
4153- <var-decl name='resend_igmp' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='283' column='1'/>
4154+ <var-decl name='resend_igmp' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='288' column='1'/>
4155 </data-member>
4156 <data-member access='public' layout-offset-in-bits='1088'>
4157- <var-decl name='learn_interval' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='284' column='1'/>
4158+ <var-decl name='learn_interval' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='289' column='1'/>
4159 </data-member>
4160 <data-member access='public' layout-offset-in-bits='1152'>
4161- <var-decl name='primary_member' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='285' column='1'/>
4162+ <var-decl name='primary_member' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='290' column='1'/>
4163 </data-member>
4164 </class-decl>
4165- <class-decl name='__anonymous_struct__3' size-in-bits='640' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='289' column='1' id='type-id-80'>
4166+ <class-decl name='__anonymous_struct__3' size-in-bits='640' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='294' column='1' id='type-id-77'>
4167 <data-member access='public' layout-offset-in-bits='0'>
4168- <var-decl name='apn' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='290' column='1'/>
4169+ <var-decl name='apn' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='295' column='1'/>
4170 </data-member>
4171 <data-member access='public' layout-offset-in-bits='64'>
4172- <var-decl name='auto_config' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='291' column='1'/>
4173+ <var-decl name='auto_config' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='296' column='1'/>
4174 </data-member>
4175 <data-member access='public' layout-offset-in-bits='128'>
4176- <var-decl name='device_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='292' column='1'/>
4177+ <var-decl name='device_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='297' column='1'/>
4178 </data-member>
4179 <data-member access='public' layout-offset-in-bits='192'>
4180- <var-decl name='network_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='293' column='1'/>
4181+ <var-decl name='network_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='298' column='1'/>
4182 </data-member>
4183 <data-member access='public' layout-offset-in-bits='256'>
4184- <var-decl name='number' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='294' column='1'/>
4185+ <var-decl name='number' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='299' column='1'/>
4186 </data-member>
4187 <data-member access='public' layout-offset-in-bits='320'>
4188- <var-decl name='password' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='295' column='1'/>
4189+ <var-decl name='password' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='300' column='1'/>
4190 </data-member>
4191 <data-member access='public' layout-offset-in-bits='384'>
4192- <var-decl name='pin' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='296' column='1'/>
4193+ <var-decl name='pin' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='301' column='1'/>
4194 </data-member>
4195 <data-member access='public' layout-offset-in-bits='448'>
4196- <var-decl name='sim_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='297' column='1'/>
4197+ <var-decl name='sim_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='302' column='1'/>
4198 </data-member>
4199 <data-member access='public' layout-offset-in-bits='512'>
4200- <var-decl name='sim_operator_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='298' column='1'/>
4201+ <var-decl name='sim_operator_id' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='303' column='1'/>
4202 </data-member>
4203 <data-member access='public' layout-offset-in-bits='576'>
4204- <var-decl name='username' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='299' column='1'/>
4205+ <var-decl name='username' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='304' column='1'/>
4206 </data-member>
4207 </class-decl>
4208- <class-decl name='__anonymous_struct__4' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='302' column='1' id='type-id-81'>
4209+ <class-decl name='__anonymous_struct__4' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='307' column='1' id='type-id-78'>
4210 <data-member access='public' layout-offset-in-bits='0'>
4211- <var-decl name='ageing_time' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='303' column='1'/>
4212+ <var-decl name='ageing_time' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='308' column='1'/>
4213 </data-member>
4214 <data-member access='public' layout-offset-in-bits='64'>
4215- <var-decl name='priority' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='304' column='1'/>
4216+ <var-decl name='priority' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='309' column='1'/>
4217 </data-member>
4218 <data-member access='public' layout-offset-in-bits='96'>
4219- <var-decl name='port_priority' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='305' column='1'/>
4220+ <var-decl name='port_priority' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='310' column='1'/>
4221 </data-member>
4222 <data-member access='public' layout-offset-in-bits='128'>
4223- <var-decl name='forward_delay' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='306' column='1'/>
4224+ <var-decl name='forward_delay' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='311' column='1'/>
4225 </data-member>
4226 <data-member access='public' layout-offset-in-bits='192'>
4227- <var-decl name='hello_time' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='307' column='1'/>
4228+ <var-decl name='hello_time' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='312' column='1'/>
4229 </data-member>
4230 <data-member access='public' layout-offset-in-bits='256'>
4231- <var-decl name='max_age' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='308' column='1'/>
4232+ <var-decl name='max_age' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='313' column='1'/>
4233 </data-member>
4234 <data-member access='public' layout-offset-in-bits='320'>
4235- <var-decl name='path_cost' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='309' column='1'/>
4236+ <var-decl name='path_cost' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='314' column='1'/>
4237 </data-member>
4238 <data-member access='public' layout-offset-in-bits='352'>
4239- <var-decl name='stp' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='310' column='1'/>
4240+ <var-decl name='stp' type-id='type-id-42' visibility='default' filepath='../src/abi.h' line='315' column='1'/>
4241 </data-member>
4242 </class-decl>
4243- <class-decl name='__anonymous_struct__5' size-in-bits='448' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='314' column='1' id='type-id-82'>
4244+ <class-decl name='__anonymous_struct__5' size-in-bits='448' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/abi.h' line='319' column='1' id='type-id-79'>
4245 <data-member access='public' layout-offset-in-bits='0'>
4246- <var-decl name='mode' type-id='type-id-52' visibility='default' filepath='../src/abi.h' line='315' column='1'/>
4247+ <var-decl name='mode' type-id='type-id-50' visibility='default' filepath='../src/abi.h' line='320' column='1'/>
4248 </data-member>
4249 <data-member access='public' layout-offset-in-bits='64'>
4250- <var-decl name='local_ip' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='316' column='1'/>
4251+ <var-decl name='local_ip' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='321' column='1'/>
4252 </data-member>
4253 <data-member access='public' layout-offset-in-bits='128'>
4254- <var-decl name='remote_ip' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='317' column='1'/>
4255+ <var-decl name='remote_ip' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='322' column='1'/>
4256 </data-member>
4257 <data-member access='public' layout-offset-in-bits='192'>
4258- <var-decl name='input_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='318' column='1'/>
4259+ <var-decl name='input_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='323' column='1'/>
4260 </data-member>
4261 <data-member access='public' layout-offset-in-bits='256'>
4262- <var-decl name='output_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='319' column='1'/>
4263+ <var-decl name='output_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='324' column='1'/>
4264 </data-member>
4265 <data-member access='public' layout-offset-in-bits='320'>
4266- <var-decl name='private_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='320' column='1'/>
4267+ <var-decl name='private_key' type-id='type-id-43' visibility='default' filepath='../src/abi.h' line='325' column='1'/>
4268 </data-member>
4269 <data-member access='public' layout-offset-in-bits='384'>
4270- <var-decl name='fwmark' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='321' column='1'/>
4271+ <var-decl name='fwmark' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='326' column='1'/>
4272 </data-member>
4273 <data-member access='public' layout-offset-in-bits='416'>
4274- <var-decl name='port' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='322' column='1'/>
4275+ <var-decl name='port' type-id='type-id-44' visibility='default' filepath='../src/abi.h' line='327' column='1'/>
4276 </data-member>
4277 </class-decl>
4278- <class-decl name='private_netdef_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='70' column='1' id='type-id-85'>
4279+ <class-decl name='private_netdef_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='70' column='1' id='type-id-82'>
4280 <data-member access='public' layout-offset-in-bits='0'>
4281- <var-decl name='dirty_fields' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='71' column='1'/>
4282+ <var-decl name='dirty_fields' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='71' column='1'/>
4283 </data-member>
4284 </class-decl>
4285- <enum-decl name='NetplanWifiMode' naming-typedef-id='type-id-86' filepath='../src/types-internal.h' line='74' column='1' id='type-id-87'>
4286+ <enum-decl name='NetplanWifiMode' naming-typedef-id='type-id-83' filepath='../src/types-internal.h' line='74' column='1' id='type-id-84'>
4287 <underlying-type type-id='type-id-19'/>
4288 <enumerator name='NETPLAN_WIFI_MODE_INFRASTRUCTURE' value='0'/>
4289 <enumerator name='NETPLAN_WIFI_MODE_ADHOC' value='1'/>
4290@@ -825,8 +830,8 @@
4291 <enumerator name='NETPLAN_WIFI_MODE_OTHER' value='3'/>
4292 <enumerator name='NETPLAN_WIFI_MODE_MAX_' value='4'/>
4293 </enum-decl>
4294- <typedef-decl name='NetplanWifiMode' type-id='type-id-87' filepath='../src/types-internal.h' line='80' column='1' id='type-id-86'/>
4295- <class-decl name='NetplanWireguardPeer' size-in-bits='320' is-struct='yes' naming-typedef-id='type-id-88' visibility='default' filepath='../src/types-internal.h' line='82' column='1' id='type-id-89'>
4296+ <typedef-decl name='NetplanWifiMode' type-id='type-id-84' filepath='../src/types-internal.h' line='80' column='1' id='type-id-83'/>
4297+ <class-decl name='NetplanWireguardPeer' size-in-bits='320' is-struct='yes' naming-typedef-id='type-id-85' visibility='default' filepath='../src/types-internal.h' line='82' column='1' id='type-id-86'>
4298 <data-member access='public' layout-offset-in-bits='0'>
4299 <var-decl name='endpoint' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='83' column='1'/>
4300 </data-member>
4301@@ -837,21 +842,21 @@
4302 <var-decl name='preshared_key' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='85' column='1'/>
4303 </data-member>
4304 <data-member access='public' layout-offset-in-bits='192'>
4305- <var-decl name='allowed_ips' type-id='type-id-61' visibility='default' filepath='../src/types-internal.h' line='86' column='1'/>
4306+ <var-decl name='allowed_ips' type-id='type-id-59' visibility='default' filepath='../src/types-internal.h' line='86' column='1'/>
4307 </data-member>
4308 <data-member access='public' layout-offset-in-bits='256'>
4309 <var-decl name='keepalive' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='87' column='1'/>
4310 </data-member>
4311 </class-decl>
4312- <typedef-decl name='NetplanWireguardPeer' type-id='type-id-89' filepath='../src/types-internal.h' line='88' column='1' id='type-id-88'/>
4313- <enum-decl name='NetplanWifiBand' naming-typedef-id='type-id-90' filepath='../src/types-internal.h' line='90' column='1' id='type-id-91'>
4314+ <typedef-decl name='NetplanWireguardPeer' type-id='type-id-86' filepath='../src/types-internal.h' line='88' column='1' id='type-id-85'/>
4315+ <enum-decl name='NetplanWifiBand' naming-typedef-id='type-id-87' filepath='../src/types-internal.h' line='90' column='1' id='type-id-88'>
4316 <underlying-type type-id='type-id-19'/>
4317 <enumerator name='NETPLAN_WIFI_BAND_DEFAULT' value='0'/>
4318 <enumerator name='NETPLAN_WIFI_BAND_5' value='1'/>
4319 <enumerator name='NETPLAN_WIFI_BAND_24' value='2'/>
4320 </enum-decl>
4321- <typedef-decl name='NetplanWifiBand' type-id='type-id-91' filepath='../src/types-internal.h' line='94' column='1' id='type-id-90'/>
4322- <class-decl name='NetplanAddressOptions' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-92' visibility='default' filepath='../src/types-internal.h' line='96' column='1' id='type-id-93'>
4323+ <typedef-decl name='NetplanWifiBand' type-id='type-id-88' filepath='../src/types-internal.h' line='94' column='1' id='type-id-87'/>
4324+ <class-decl name='NetplanAddressOptions' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-89' visibility='default' filepath='../src/types-internal.h' line='96' column='1' id='type-id-90'>
4325 <data-member access='public' layout-offset-in-bits='0'>
4326 <var-decl name='address' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='97' column='1'/>
4327 </data-member>
4328@@ -862,279 +867,279 @@
4329 <var-decl name='label' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='99' column='1'/>
4330 </data-member>
4331 </class-decl>
4332- <typedef-decl name='NetplanAddressOptions' type-id='type-id-93' filepath='../src/types-internal.h' line='100' column='1' id='type-id-92'/>
4333- <class-decl name='NetplanWifiAccessPoint' size-in-bits='1280' is-struct='yes' naming-typedef-id='type-id-94' visibility='default' filepath='../src/types-internal.h' line='102' column='1' id='type-id-95'>
4334+ <typedef-decl name='NetplanAddressOptions' type-id='type-id-90' filepath='../src/types-internal.h' line='100' column='1' id='type-id-89'/>
4335+ <class-decl name='NetplanWifiAccessPoint' size-in-bits='1280' is-struct='yes' naming-typedef-id='type-id-91' visibility='default' filepath='../src/types-internal.h' line='122' column='1' id='type-id-92'>
4336 <data-member access='public' layout-offset-in-bits='0'>
4337- <var-decl name='mode' type-id='type-id-86' visibility='default' filepath='../src/types-internal.h' line='103' column='1'/>
4338+ <var-decl name='mode' type-id='type-id-83' visibility='default' filepath='../src/types-internal.h' line='123' column='1'/>
4339 </data-member>
4340 <data-member access='public' layout-offset-in-bits='64'>
4341- <var-decl name='ssid' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='104' column='1'/>
4342+ <var-decl name='ssid' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='124' column='1'/>
4343 </data-member>
4344 <data-member access='public' layout-offset-in-bits='128'>
4345- <var-decl name='band' type-id='type-id-90' visibility='default' filepath='../src/types-internal.h' line='105' column='1'/>
4346+ <var-decl name='band' type-id='type-id-87' visibility='default' filepath='../src/types-internal.h' line='125' column='1'/>
4347 </data-member>
4348 <data-member access='public' layout-offset-in-bits='192'>
4349- <var-decl name='bssid' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='106' column='1'/>
4350+ <var-decl name='bssid' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='126' column='1'/>
4351 </data-member>
4352 <data-member access='public' layout-offset-in-bits='256'>
4353- <var-decl name='hidden' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='107' column='1'/>
4354+ <var-decl name='hidden' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='127' column='1'/>
4355 </data-member>
4356 <data-member access='public' layout-offset-in-bits='288'>
4357- <var-decl name='channel' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='108' column='1'/>
4358+ <var-decl name='channel' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='128' column='1'/>
4359 </data-member>
4360 <data-member access='public' layout-offset-in-bits='320'>
4361- <var-decl name='auth' type-id='type-id-59' visibility='default' filepath='../src/types-internal.h' line='110' column='1'/>
4362+ <var-decl name='auth' type-id='type-id-57' visibility='default' filepath='../src/types-internal.h' line='130' column='1'/>
4363 </data-member>
4364 <data-member access='public' layout-offset-in-bits='896'>
4365- <var-decl name='has_auth' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='111' column='1'/>
4366+ <var-decl name='has_auth' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='131' column='1'/>
4367 </data-member>
4368 <data-member access='public' layout-offset-in-bits='960'>
4369- <var-decl name='backend_settings' type-id='type-id-66' visibility='default' filepath='../src/types-internal.h' line='113' column='1'/>
4370+ <var-decl name='backend_settings' type-id='type-id-66' visibility='default' filepath='../src/types-internal.h' line='133' column='1'/>
4371 </data-member>
4372 </class-decl>
4373- <typedef-decl name='NetplanWifiAccessPoint' type-id='type-id-95' filepath='../src/types-internal.h' line='114' column='1' id='type-id-94'/>
4374- <class-decl name='NetplanIPRoute' size-in-bits='640' is-struct='yes' naming-typedef-id='type-id-96' visibility='default' filepath='../src/types-internal.h' line='116' column='1' id='type-id-97'>
4375+ <typedef-decl name='NetplanWifiAccessPoint' type-id='type-id-92' filepath='../src/types-internal.h' line='134' column='1' id='type-id-91'/>
4376+ <class-decl name='NetplanIPRoute' size-in-bits='640' is-struct='yes' naming-typedef-id='type-id-93' visibility='default' filepath='../src/types-internal.h' line='136' column='1' id='type-id-94'>
4377 <data-member access='public' layout-offset-in-bits='0'>
4378- <var-decl name='family' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='117' column='1'/>
4379+ <var-decl name='family' type-id='type-id-75' visibility='default' filepath='../src/types-internal.h' line='137' column='1'/>
4380 </data-member>
4381 <data-member access='public' layout-offset-in-bits='64'>
4382- <var-decl name='type' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='118' column='1'/>
4383+ <var-decl name='type' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='138' column='1'/>
4384 </data-member>
4385 <data-member access='public' layout-offset-in-bits='128'>
4386- <var-decl name='scope' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='119' column='1'/>
4387+ <var-decl name='scope' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='139' column='1'/>
4388 </data-member>
4389 <data-member access='public' layout-offset-in-bits='192'>
4390- <var-decl name='table' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='120' column='1'/>
4391+ <var-decl name='table' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='140' column='1'/>
4392 </data-member>
4393 <data-member access='public' layout-offset-in-bits='256'>
4394- <var-decl name='from' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='122' column='1'/>
4395+ <var-decl name='from' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='142' column='1'/>
4396 </data-member>
4397 <data-member access='public' layout-offset-in-bits='320'>
4398- <var-decl name='to' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='123' column='1'/>
4399+ <var-decl name='to' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='143' column='1'/>
4400 </data-member>
4401 <data-member access='public' layout-offset-in-bits='384'>
4402- <var-decl name='via' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='124' column='1'/>
4403+ <var-decl name='via' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='144' column='1'/>
4404 </data-member>
4405 <data-member access='public' layout-offset-in-bits='448'>
4406- <var-decl name='onlink' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='126' column='1'/>
4407+ <var-decl name='onlink' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='146' column='1'/>
4408 </data-member>
4409 <data-member access='public' layout-offset-in-bits='480'>
4410- <var-decl name='metric' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='130' column='1'/>
4411+ <var-decl name='metric' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='150' column='1'/>
4412 </data-member>
4413 <data-member access='public' layout-offset-in-bits='512'>
4414- <var-decl name='mtubytes' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='132' column='1'/>
4415+ <var-decl name='mtubytes' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='152' column='1'/>
4416 </data-member>
4417 <data-member access='public' layout-offset-in-bits='544'>
4418- <var-decl name='congestion_window' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='133' column='1'/>
4419+ <var-decl name='congestion_window' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='153' column='1'/>
4420 </data-member>
4421 <data-member access='public' layout-offset-in-bits='576'>
4422- <var-decl name='advertised_receive_window' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='134' column='1'/>
4423+ <var-decl name='advertised_receive_window' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='154' column='1'/>
4424 </data-member>
4425 </class-decl>
4426- <typedef-decl name='NetplanIPRoute' type-id='type-id-97' filepath='../src/types-internal.h' line='135' column='1' id='type-id-96'/>
4427- <class-decl name='NetplanIPRule' size-in-bits='320' is-struct='yes' naming-typedef-id='type-id-98' visibility='default' filepath='../src/types-internal.h' line='137' column='1' id='type-id-99'>
4428+ <typedef-decl name='NetplanIPRoute' type-id='type-id-94' filepath='../src/types-internal.h' line='155' column='1' id='type-id-93'/>
4429+ <class-decl name='NetplanIPRule' size-in-bits='320' is-struct='yes' naming-typedef-id='type-id-95' visibility='default' filepath='../src/types-internal.h' line='157' column='1' id='type-id-96'>
4430 <data-member access='public' layout-offset-in-bits='0'>
4431- <var-decl name='family' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='138' column='1'/>
4432+ <var-decl name='family' type-id='type-id-75' visibility='default' filepath='../src/types-internal.h' line='158' column='1'/>
4433 </data-member>
4434 <data-member access='public' layout-offset-in-bits='64'>
4435- <var-decl name='from' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='140' column='1'/>
4436+ <var-decl name='from' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='160' column='1'/>
4437 </data-member>
4438 <data-member access='public' layout-offset-in-bits='128'>
4439- <var-decl name='to' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='141' column='1'/>
4440+ <var-decl name='to' type-id='type-id-43' visibility='default' filepath='../src/types-internal.h' line='161' column='1'/>
4441 </data-member>
4442 <data-member access='public' layout-offset-in-bits='192'>
4443- <var-decl name='table' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='144' column='1'/>
4444+ <var-decl name='table' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='164' column='1'/>
4445 </data-member>
4446 <data-member access='public' layout-offset-in-bits='224'>
4447- <var-decl name='priority' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='145' column='1'/>
4448+ <var-decl name='priority' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='165' column='1'/>
4449 </data-member>
4450 <data-member access='public' layout-offset-in-bits='256'>
4451- <var-decl name='fwmark' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='147' column='1'/>
4452+ <var-decl name='fwmark' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='167' column='1'/>
4453 </data-member>
4454 <data-member access='public' layout-offset-in-bits='288'>
4455- <var-decl name='tos' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='149' column='1'/>
4456+ <var-decl name='tos' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='169' column='1'/>
4457 </data-member>
4458 </class-decl>
4459- <typedef-decl name='NetplanIPRule' type-id='type-id-99' filepath='../src/types-internal.h' line='150' column='1' id='type-id-98'/>
4460- <class-decl name='netplan_vxlan' size-in-bits='576' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='152' column='1' id='type-id-73'>
4461+ <typedef-decl name='NetplanIPRule' type-id='type-id-96' filepath='../src/types-internal.h' line='170' column='1' id='type-id-95'/>
4462+ <class-decl name='netplan_vxlan' size-in-bits='576' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='172' column='1' id='type-id-69'>
4463 <data-member access='public' layout-offset-in-bits='0'>
4464- <var-decl name='link' type-id='type-id-77' visibility='default' filepath='../src/types-internal.h' line='153' column='1'/>
4465+ <var-decl name='link' type-id='type-id-73' visibility='default' filepath='../src/types-internal.h' line='173' column='1'/>
4466 </data-member>
4467 <data-member access='public' layout-offset-in-bits='64'>
4468- <var-decl name='vni' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='154' column='1'/>
4469+ <var-decl name='vni' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='174' column='1'/>
4470 </data-member>
4471 <data-member access='public' layout-offset-in-bits='96'>
4472- <var-decl name='ageing' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='155' column='1'/>
4473+ <var-decl name='ageing' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='175' column='1'/>
4474 </data-member>
4475 <data-member access='public' layout-offset-in-bits='128'>
4476- <var-decl name='limit' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='156' column='1'/>
4477+ <var-decl name='limit' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='176' column='1'/>
4478 </data-member>
4479 <data-member access='public' layout-offset-in-bits='160'>
4480- <var-decl name='tos' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='157' column='1'/>
4481+ <var-decl name='tos' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='177' column='1'/>
4482 </data-member>
4483 <data-member access='public' layout-offset-in-bits='192'>
4484- <var-decl name='flow_label' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='158' column='1'/>
4485+ <var-decl name='flow_label' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='178' column='1'/>
4486 </data-member>
4487 <data-member access='public' layout-offset-in-bits='224'>
4488- <var-decl name='source_port_min' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='159' column='1'/>
4489+ <var-decl name='source_port_min' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='179' column='1'/>
4490 </data-member>
4491 <data-member access='public' layout-offset-in-bits='256'>
4492- <var-decl name='source_port_max' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='160' column='1'/>
4493+ <var-decl name='source_port_max' type-id='type-id-44' visibility='default' filepath='../src/types-internal.h' line='180' column='1'/>
4494 </data-member>
4495 <data-member access='public' layout-offset-in-bits='288'>
4496- <var-decl name='mac_learning' type-id='type-id-71' visibility='default' filepath='../src/types-internal.h' line='161' column='1'/>
4497+ <var-decl name='mac_learning' type-id='type-id-67' visibility='default' filepath='../src/types-internal.h' line='181' column='1'/>
4498 </data-member>
4499 <data-member access='public' layout-offset-in-bits='320'>
4500- <var-decl name='arp_proxy' type-id='type-id-71' visibility='default' filepath='../src/types-internal.h' line='162' column='1'/>
4501+ <var-decl name='arp_proxy' type-id='type-id-67' visibility='default' filepath='../src/types-internal.h' line='182' column='1'/>
4502 </data-member>
4503 <data-member access='public' layout-offset-in-bits='352'>
4504- <var-decl name='short_circuit' type-id='type-id-71' visibility='default' filepath='../src/types-internal.h' line='163' column='1'/>
4505+ <var-decl name='short_circuit' type-id='type-id-67' visibility='default' filepath='../src/types-internal.h' line='183' column='1'/>
4506 </data-member>
4507 <data-member access='public' layout-offset-in-bits='384'>
4508- <var-decl name='independent' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='164' column='1'/>
4509+ <var-decl name='independent' type-id='type-id-42' visibility='default' filepath='../src/types-internal.h' line='184' column='1'/>
4510 </data-member>
4511 <data-member access='public' layout-offset-in-bits='416'>
4512- <var-decl name='notifications' type-id='type-id-38' visibility='default' filepath='../src/types-internal.h' line='165' column='1'/>
4513+ <var-decl name='notifications' type-id='type-id-38' visibility='default' filepath='../src/types-internal.h' line='185' column='1'/>
4514 </data-member>
4515 <data-member access='public' layout-offset-in-bits='448'>
4516- <var-decl name='checksums' type-id='type-id-38' visibility='default' filepath='../src/types-internal.h' line='166' column='1'/>
4517+ <var-decl name='checksums' type-id='type-id-38' visibility='default' filepath='../src/types-internal.h' line='186' column='1'/>
4518 </data-member>
4519 <data-member access='public' layout-offset-in-bits='480'>
4520- <var-decl name='extensions' type-id='type-id-38' visibility='default' filepath='../src/types-internal.h' line='167' column='1'/>
4521+ <var-decl name='extensions' type-id='type-id-38' visibility='default' filepath='../src/types-internal.h' line='187' column='1'/>
4522 </data-member>
4523 <data-member access='public' layout-offset-in-bits='512'>
4524- <var-decl name='do_not_fragment' type-id='type-id-71' visibility='default' filepath='../src/types-internal.h' line='168' column='1'/>
4525+ <var-decl name='do_not_fragment' type-id='type-id-67' visibility='default' filepath='../src/types-internal.h' line='188' column='1'/>
4526 </data-member>
4527 </class-decl>
4528- <class-decl name='netplan_state' size-in-bits='1472' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='171' column='1' id='type-id-32'>
4529+ <class-decl name='netplan_state' size-in-bits='1472' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='191' column='1' id='type-id-32'>
4530 <data-member access='public' layout-offset-in-bits='0'>
4531- <var-decl name='netdefs' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='177' column='1'/>
4532+ <var-decl name='netdefs' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='197' column='1'/>
4533 </data-member>
4534 <data-member access='public' layout-offset-in-bits='64'>
4535- <var-decl name='netdefs_ordered' type-id='type-id-100' visibility='default' filepath='../src/types-internal.h' line='178' column='1'/>
4536+ <var-decl name='netdefs_ordered' type-id='type-id-97' visibility='default' filepath='../src/types-internal.h' line='198' column='1'/>
4537 </data-member>
4538 <data-member access='public' layout-offset-in-bits='128'>
4539- <var-decl name='backend' type-id='type-id-34' visibility='default' filepath='../src/types-internal.h' line='179' column='1'/>
4540+ <var-decl name='backend' type-id='type-id-34' visibility='default' filepath='../src/types-internal.h' line='199' column='1'/>
4541 </data-member>
4542 <data-member access='public' layout-offset-in-bits='192'>
4543- <var-decl name='ovs_settings' type-id='type-id-65' visibility='default' filepath='../src/types-internal.h' line='180' column='1'/>
4544+ <var-decl name='ovs_settings' type-id='type-id-63' visibility='default' filepath='../src/types-internal.h' line='200' column='1'/>
4545 </data-member>
4546 <data-member access='public' layout-offset-in-bits='1344'>
4547- <var-decl name='sources' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='184' column='1'/>
4548+ <var-decl name='sources' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='204' column='1'/>
4549 </data-member>
4550 <data-member access='public' layout-offset-in-bits='1408'>
4551- <var-decl name='global_renderer' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='185' column='1'/>
4552+ <var-decl name='global_renderer' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='205' column='1'/>
4553 </data-member>
4554 </class-decl>
4555- <class-decl name='netplan_parser' size-in-bits='3264' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='188' column='1' id='type-id-28'>
4556+ <class-decl name='netplan_parser' size-in-bits='3264' is-struct='yes' visibility='default' filepath='../src/types-internal.h' line='208' column='1' id='type-id-28'>
4557 <data-member access='public' layout-offset-in-bits='0'>
4558- <var-decl name='doc' type-id='type-id-101' visibility='default' filepath='../src/types-internal.h' line='189' column='1'/>
4559+ <var-decl name='doc' type-id='type-id-98' visibility='default' filepath='../src/types-internal.h' line='209' column='1'/>
4560 </data-member>
4561 <data-member access='public' layout-offset-in-bits='832'>
4562- <var-decl name='parsed_defs' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='192' column='1'/>
4563+ <var-decl name='parsed_defs' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='212' column='1'/>
4564 </data-member>
4565 <data-member access='public' layout-offset-in-bits='896'>
4566- <var-decl name='ordered' type-id='type-id-100' visibility='default' filepath='../src/types-internal.h' line='195' column='1'/>
4567+ <var-decl name='ordered' type-id='type-id-97' visibility='default' filepath='../src/types-internal.h' line='215' column='1'/>
4568 </data-member>
4569 <data-member access='public' layout-offset-in-bits='960'>
4570- <var-decl name='global_backend' type-id='type-id-34' visibility='default' filepath='../src/types-internal.h' line='196' column='1'/>
4571+ <var-decl name='global_backend' type-id='type-id-34' visibility='default' filepath='../src/types-internal.h' line='216' column='1'/>
4572 </data-member>
4573 <data-member access='public' layout-offset-in-bits='1024'>
4574- <var-decl name='global_ovs_settings' type-id='type-id-65' visibility='default' filepath='../src/types-internal.h' line='197' column='1'/>
4575+ <var-decl name='global_ovs_settings' type-id='type-id-63' visibility='default' filepath='../src/types-internal.h' line='217' column='1'/>
4576 </data-member>
4577 <data-member access='public' layout-offset-in-bits='2176'>
4578- <var-decl name='sources' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='200' column='1'/>
4579+ <var-decl name='sources' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='220' column='1'/>
4580 </data-member>
4581 <data-member access='public' layout-offset-in-bits='2240'>
4582- <var-decl name='current' type-id='type-id-102' visibility='default' filepath='../src/types-internal.h' line='221' column='1'/>
4583+ <var-decl name='current' type-id='type-id-99' visibility='default' filepath='../src/types-internal.h' line='241' column='1'/>
4584 </data-member>
4585 <data-member access='public' layout-offset-in-bits='2880'>
4586- <var-decl name='missing_id' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='231' column='1'/>
4587+ <var-decl name='missing_id' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='251' column='1'/>
4588 </data-member>
4589 <data-member access='public' layout-offset-in-bits='2944'>
4590- <var-decl name='ids_in_file' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='239' column='1'/>
4591+ <var-decl name='ids_in_file' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='259' column='1'/>
4592 </data-member>
4593 <data-member access='public' layout-offset-in-bits='3008'>
4594- <var-decl name='missing_ids_found' type-id='type-id-16' visibility='default' filepath='../src/types-internal.h' line='240' column='1'/>
4595+ <var-decl name='missing_ids_found' type-id='type-id-16' visibility='default' filepath='../src/types-internal.h' line='260' column='1'/>
4596 </data-member>
4597 <data-member access='public' layout-offset-in-bits='3072'>
4598- <var-decl name='null_fields' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='243' column='1'/>
4599+ <var-decl name='null_fields' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='263' column='1'/>
4600 </data-member>
4601 <data-member access='public' layout-offset-in-bits='3136'>
4602- <var-decl name='null_overrides' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='244' column='1'/>
4603+ <var-decl name='null_overrides' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='264' column='1'/>
4604 </data-member>
4605 <data-member access='public' layout-offset-in-bits='3200'>
4606- <var-decl name='global_renderer' type-id='type-id-64' visibility='default' filepath='../src/types-internal.h' line='245' column='1'/>
4607+ <var-decl name='global_renderer' type-id='type-id-62' visibility='default' filepath='../src/types-internal.h' line='265' column='1'/>
4608 </data-member>
4609 </class-decl>
4610- <class-decl name='__anonymous_struct__13' size-in-bits='640' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/types-internal.h' line='203' column='1' id='type-id-102'>
4611+ <class-decl name='__anonymous_struct__13' size-in-bits='640' is-struct='yes' is-anonymous='yes' visibility='default' filepath='../src/types-internal.h' line='223' column='1' id='type-id-99'>
4612 <data-member access='public' layout-offset-in-bits='0'>
4613- <var-decl name='netdef' type-id='type-id-77' visibility='default' filepath='../src/types-internal.h' line='205' column='1'/>
4614+ <var-decl name='netdef' type-id='type-id-73' visibility='default' filepath='../src/types-internal.h' line='225' column='1'/>
4615 </data-member>
4616 <data-member access='public' layout-offset-in-bits='64'>
4617- <var-decl name='auth' type-id='type-id-103' visibility='default' filepath='../src/types-internal.h' line='206' column='1'/>
4618+ <var-decl name='auth' type-id='type-id-100' visibility='default' filepath='../src/types-internal.h' line='226' column='1'/>
4619 </data-member>
4620 <data-member access='public' layout-offset-in-bits='128'>
4621- <var-decl name='access_point' type-id='type-id-104' visibility='default' filepath='../src/types-internal.h' line='209' column='1'/>
4622+ <var-decl name='access_point' type-id='type-id-101' visibility='default' filepath='../src/types-internal.h' line='229' column='1'/>
4623 </data-member>
4624 <data-member access='public' layout-offset-in-bits='192'>
4625- <var-decl name='wireguard_peer' type-id='type-id-105' visibility='default' filepath='../src/types-internal.h' line='210' column='1'/>
4626+ <var-decl name='wireguard_peer' type-id='type-id-102' visibility='default' filepath='../src/types-internal.h' line='230' column='1'/>
4627 </data-member>
4628 <data-member access='public' layout-offset-in-bits='256'>
4629- <var-decl name='addr_options' type-id='type-id-106' visibility='default' filepath='../src/types-internal.h' line='211' column='1'/>
4630+ <var-decl name='addr_options' type-id='type-id-103' visibility='default' filepath='../src/types-internal.h' line='231' column='1'/>
4631 </data-member>
4632 <data-member access='public' layout-offset-in-bits='320'>
4633- <var-decl name='route' type-id='type-id-107' visibility='default' filepath='../src/types-internal.h' line='212' column='1'/>
4634+ <var-decl name='route' type-id='type-id-104' visibility='default' filepath='../src/types-internal.h' line='232' column='1'/>
4635 </data-member>
4636 <data-member access='public' layout-offset-in-bits='384'>
4637- <var-decl name='ip_rule' type-id='type-id-108' visibility='default' filepath='../src/types-internal.h' line='213' column='1'/>
4638+ <var-decl name='ip_rule' type-id='type-id-105' visibility='default' filepath='../src/types-internal.h' line='233' column='1'/>
4639 </data-member>
4640 <data-member access='public' layout-offset-in-bits='448'>
4641- <var-decl name='vxlan' type-id='type-id-84' visibility='default' filepath='../src/types-internal.h' line='214' column='1'/>
4642+ <var-decl name='vxlan' type-id='type-id-81' visibility='default' filepath='../src/types-internal.h' line='234' column='1'/>
4643 </data-member>
4644 <data-member access='public' layout-offset-in-bits='512'>
4645- <var-decl name='filepath' type-id='type-id-109' visibility='default' filepath='../src/types-internal.h' line='215' column='1'/>
4646+ <var-decl name='filepath' type-id='type-id-106' visibility='default' filepath='../src/types-internal.h' line='235' column='1'/>
4647 </data-member>
4648 <data-member access='public' layout-offset-in-bits='576'>
4649- <var-decl name='backend' type-id='type-id-34' visibility='default' filepath='../src/types-internal.h' line='220' column='1'/>
4650+ <var-decl name='backend' type-id='type-id-34' visibility='default' filepath='../src/types-internal.h' line='240' column='1'/>
4651 </data-member>
4652 </class-decl>
4653- <typedef-decl name='GArray' type-id='type-id-110' filepath='/usr/include/glib-2.0/glib/garray.h' line='37' column='1' id='type-id-111'/>
4654- <class-decl name='_GArray' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/glib-2.0/glib/garray.h' line='41' column='1' id='type-id-110'>
4655+ <typedef-decl name='GArray' type-id='type-id-107' filepath='/usr/include/glib-2.0/glib/garray.h' line='37' column='1' id='type-id-108'/>
4656+ <class-decl name='_GArray' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/glib-2.0/glib/garray.h' line='41' column='1' id='type-id-107'>
4657 <data-member access='public' layout-offset-in-bits='0'>
4658- <var-decl name='data' type-id='type-id-112' visibility='default' filepath='/usr/include/glib-2.0/glib/garray.h' line='43' column='1'/>
4659+ <var-decl name='data' type-id='type-id-109' visibility='default' filepath='/usr/include/glib-2.0/glib/garray.h' line='43' column='1'/>
4660 </data-member>
4661 <data-member access='public' layout-offset-in-bits='64'>
4662 <var-decl name='len' type-id='type-id-44' visibility='default' filepath='/usr/include/glib-2.0/glib/garray.h' line='44' column='1'/>
4663 </data-member>
4664 </class-decl>
4665- <typedef-decl name='GData' type-id='type-id-7' filepath='/usr/include/glib-2.0/glib/gdataset.h' line='36' column='1' id='type-id-113'/>
4666- <typedef-decl name='GError' type-id='type-id-114' filepath='/usr/include/glib-2.0/glib/gerror.h' line='41' column='1' id='type-id-36'/>
4667- <class-decl name='_GError' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='43' column='1' id='type-id-114'>
4668+ <typedef-decl name='GData' type-id='type-id-7' filepath='/usr/include/glib-2.0/glib/gdataset.h' line='36' column='1' id='type-id-110'/>
4669+ <typedef-decl name='GError' type-id='type-id-111' filepath='/usr/include/glib-2.0/glib/gerror.h' line='41' column='1' id='type-id-36'/>
4670+ <class-decl name='_GError' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='43' column='1' id='type-id-111'>
4671 <data-member access='public' layout-offset-in-bits='0'>
4672- <var-decl name='domain' type-id='type-id-115' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='45' column='1'/>
4673+ <var-decl name='domain' type-id='type-id-112' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='45' column='1'/>
4674 </data-member>
4675 <data-member access='public' layout-offset-in-bits='32'>
4676- <var-decl name='code' type-id='type-id-116' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='46' column='1'/>
4677+ <var-decl name='code' type-id='type-id-75' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='46' column='1'/>
4678 </data-member>
4679 <data-member access='public' layout-offset-in-bits='64'>
4680- <var-decl name='message' type-id='type-id-112' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='47' column='1'/>
4681+ <var-decl name='message' type-id='type-id-109' visibility='default' filepath='/usr/include/glib-2.0/glib/gerror.h' line='47' column='1'/>
4682 </data-member>
4683 </class-decl>
4684- <typedef-decl name='GHashTable' type-id='type-id-8' filepath='/usr/include/glib-2.0/glib/ghash.h' line='37' column='1' id='type-id-117'/>
4685- <typedef-decl name='GList' type-id='type-id-118' filepath='/usr/include/glib-2.0/glib/glist.h' line='37' column='1' id='type-id-119'/>
4686- <class-decl name='_GList' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='39' column='1' id='type-id-118'>
4687+ <typedef-decl name='GHashTable' type-id='type-id-8' filepath='/usr/include/glib-2.0/glib/ghash.h' line='37' column='1' id='type-id-113'/>
4688+ <typedef-decl name='GList' type-id='type-id-114' filepath='/usr/include/glib-2.0/glib/glist.h' line='37' column='1' id='type-id-115'/>
4689+ <class-decl name='_GList' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='39' column='1' id='type-id-114'>
4690 <data-member access='public' layout-offset-in-bits='0'>
4691- <var-decl name='data' type-id='type-id-120' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='41' column='1'/>
4692+ <var-decl name='data' type-id='type-id-116' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='41' column='1'/>
4693 </data-member>
4694 <data-member access='public' layout-offset-in-bits='64'>
4695- <var-decl name='next' type-id='type-id-100' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='42' column='1'/>
4696+ <var-decl name='next' type-id='type-id-97' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='42' column='1'/>
4697 </data-member>
4698 <data-member access='public' layout-offset-in-bits='128'>
4699- <var-decl name='prev' type-id='type-id-100' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='43' column='1'/>
4700+ <var-decl name='prev' type-id='type-id-97' visibility='default' filepath='/usr/include/glib-2.0/glib/glist.h' line='43' column='1'/>
4701 </data-member>
4702 </class-decl>
4703- <enum-decl name='GLogLevelFlags' naming-typedef-id='type-id-121' filepath='/usr/include/glib-2.0/glib/gmessages.h' line='54' column='1' id='type-id-122'>
4704+ <enum-decl name='GLogLevelFlags' naming-typedef-id='type-id-117' filepath='/usr/include/glib-2.0/glib/gmessages.h' line='54' column='1' id='type-id-118'>
4705 <underlying-type type-id='type-id-19'/>
4706 <enumerator name='G_LOG_FLAG_RECURSION' value='1'/>
4707 <enumerator name='G_LOG_FLAG_FATAL' value='2'/>
4708@@ -1146,21 +1151,21 @@
4709 <enumerator name='G_LOG_LEVEL_DEBUG' value='128'/>
4710 <enumerator name='G_LOG_LEVEL_MASK' value='-4'/>
4711 </enum-decl>
4712- <typedef-decl name='GLogLevelFlags' type-id='type-id-122' filepath='/usr/include/glib-2.0/glib/gmessages.h' line='68' column='1' id='type-id-121'/>
4713- <typedef-decl name='GQuark' type-id='type-id-123' filepath='/usr/include/glib-2.0/glib/gquark.h' line='36' column='1' id='type-id-115'/>
4714- <typedef-decl name='gchar' type-id='type-id-1' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='46' column='1' id='type-id-124'/>
4715- <typedef-decl name='gint' type-id='type-id-16' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='49' column='1' id='type-id-116'/>
4716- <typedef-decl name='gboolean' type-id='type-id-116' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='50' column='1' id='type-id-42'/>
4717+ <typedef-decl name='GLogLevelFlags' type-id='type-id-118' filepath='/usr/include/glib-2.0/glib/gmessages.h' line='68' column='1' id='type-id-117'/>
4718+ <typedef-decl name='GQuark' type-id='type-id-119' filepath='/usr/include/glib-2.0/glib/gquark.h' line='36' column='1' id='type-id-112'/>
4719+ <typedef-decl name='gchar' type-id='type-id-1' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='46' column='1' id='type-id-120'/>
4720+ <typedef-decl name='gint' type-id='type-id-16' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='49' column='1' id='type-id-75'/>
4721+ <typedef-decl name='gboolean' type-id='type-id-75' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='50' column='1' id='type-id-42'/>
4722 <typedef-decl name='guint' type-id='type-id-23' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='55' column='1' id='type-id-44'/>
4723- <typedef-decl name='gpointer' type-id='type-id-125' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='103' column='1' id='type-id-120'/>
4724- <typedef-decl name='gconstpointer' type-id='type-id-125' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='104' column='1' id='type-id-126'/>
4725- <typedef-decl name='uuid_t' type-id='type-id-21' filepath='/usr/include/uuid/uuid.h' line='44' column='1' id='type-id-75'/>
4726- <typedef-decl name='__off_t' type-id='type-id-17' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='152' column='1' id='type-id-127'/>
4727- <typedef-decl name='__off64_t' type-id='type-id-17' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='153' column='1' id='type-id-128'/>
4728- <typedef-decl name='__ssize_t' type-id='type-id-17' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='194' column='1' id='type-id-129'/>
4729- <typedef-decl name='FILE' type-id='type-id-130' filepath='/usr/include/x86_64-linux-gnu/bits/types/FILE.h' line='7' column='1' id='type-id-131'/>
4730- <typedef-decl name='_IO_lock_t' type-id='type-id-26' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='43' column='1' id='type-id-132'/>
4731- <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='49' column='1' id='type-id-130'>
4732+ <typedef-decl name='gpointer' type-id='type-id-121' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='103' column='1' id='type-id-116'/>
4733+ <typedef-decl name='gconstpointer' type-id='type-id-121' filepath='/usr/include/glib-2.0/glib/gtypes.h' line='104' column='1' id='type-id-122'/>
4734+ <typedef-decl name='uuid_t' type-id='type-id-21' filepath='/usr/include/uuid/uuid.h' line='44' column='1' id='type-id-71'/>
4735+ <typedef-decl name='__off_t' type-id='type-id-17' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='152' column='1' id='type-id-123'/>
4736+ <typedef-decl name='__off64_t' type-id='type-id-17' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='153' column='1' id='type-id-124'/>
4737+ <typedef-decl name='__ssize_t' type-id='type-id-17' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='194' column='1' id='type-id-125'/>
4738+ <typedef-decl name='FILE' type-id='type-id-126' filepath='/usr/include/x86_64-linux-gnu/bits/types/FILE.h' line='7' column='1' id='type-id-127'/>
4739+ <typedef-decl name='_IO_lock_t' type-id='type-id-26' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='43' column='1' id='type-id-128'/>
4740+ <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='49' column='1' id='type-id-126'>
4741 <data-member access='public' layout-offset-in-bits='0'>
4742 <var-decl name='_flags' type-id='type-id-16' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='51' column='1'/>
4743 </data-member>
4744@@ -1198,10 +1203,10 @@
4745 <var-decl name='_IO_save_end' type-id='type-id-43' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='66' column='1'/>
4746 </data-member>
4747 <data-member access='public' layout-offset-in-bits='768'>
4748- <var-decl name='_markers' type-id='type-id-133' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='68' column='1'/>
4749+ <var-decl name='_markers' type-id='type-id-129' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='68' column='1'/>
4750 </data-member>
4751 <data-member access='public' layout-offset-in-bits='832'>
4752- <var-decl name='_chain' type-id='type-id-134' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='70' column='1'/>
4753+ <var-decl name='_chain' type-id='type-id-130' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='70' column='1'/>
4754 </data-member>
4755 <data-member access='public' layout-offset-in-bits='896'>
4756 <var-decl name='_fileno' type-id='type-id-16' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='72' column='1'/>
4757@@ -1210,7 +1215,7 @@
4758 <var-decl name='_flags2' type-id='type-id-16' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='73' column='1'/>
4759 </data-member>
4760 <data-member access='public' layout-offset-in-bits='960'>
4761- <var-decl name='_old_offset' type-id='type-id-127' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='74' column='1'/>
4762+ <var-decl name='_old_offset' type-id='type-id-123' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='74' column='1'/>
4763 </data-member>
4764 <data-member access='public' layout-offset-in-bits='1024'>
4765 <var-decl name='_cur_column' type-id='type-id-24' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='77' column='1'/>
4766@@ -1222,25 +1227,25 @@
4767 <var-decl name='_shortbuf' type-id='type-id-2' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='79' column='1'/>
4768 </data-member>
4769 <data-member access='public' layout-offset-in-bits='1088'>
4770- <var-decl name='_lock' type-id='type-id-135' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='81' column='1'/>
4771+ <var-decl name='_lock' type-id='type-id-131' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='81' column='1'/>
4772 </data-member>
4773 <data-member access='public' layout-offset-in-bits='1152'>
4774- <var-decl name='_offset' type-id='type-id-128' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='89' column='1'/>
4775+ <var-decl name='_offset' type-id='type-id-124' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='89' column='1'/>
4776 </data-member>
4777 <data-member access='public' layout-offset-in-bits='1216'>
4778- <var-decl name='_codecvt' type-id='type-id-136' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='91' column='1'/>
4779+ <var-decl name='_codecvt' type-id='type-id-132' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='91' column='1'/>
4780 </data-member>
4781 <data-member access='public' layout-offset-in-bits='1280'>
4782- <var-decl name='_wide_data' type-id='type-id-137' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='92' column='1'/>
4783+ <var-decl name='_wide_data' type-id='type-id-133' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='92' column='1'/>
4784 </data-member>
4785 <data-member access='public' layout-offset-in-bits='1344'>
4786- <var-decl name='_freeres_list' type-id='type-id-134' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='93' column='1'/>
4787+ <var-decl name='_freeres_list' type-id='type-id-130' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='93' column='1'/>
4788 </data-member>
4789 <data-member access='public' layout-offset-in-bits='1408'>
4790- <var-decl name='_freeres_buf' type-id='type-id-125' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='94' column='1'/>
4791+ <var-decl name='_freeres_buf' type-id='type-id-121' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='94' column='1'/>
4792 </data-member>
4793 <data-member access='public' layout-offset-in-bits='1472'>
4794- <var-decl name='__pad5' type-id='type-id-138' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='95' column='1'/>
4795+ <var-decl name='__pad5' type-id='type-id-134' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='95' column='1'/>
4796 </data-member>
4797 <data-member access='public' layout-offset-in-bits='1536'>
4798 <var-decl name='_mode' type-id='type-id-16' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='96' column='1'/>
4799@@ -1249,9 +1254,9 @@
4800 <var-decl name='_unused2' type-id='type-id-5' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h' line='98' column='1'/>
4801 </data-member>
4802 </class-decl>
4803- <typedef-decl name='ssize_t' type-id='type-id-129' filepath='/usr/include/x86_64-linux-gnu/sys/types.h' line='108' column='1' id='type-id-139'/>
4804- <typedef-decl name='yaml_char_t' type-id='type-id-20' filepath='/usr/include/yaml.h' line='80' column='1' id='type-id-140'/>
4805- <class-decl name='yaml_version_directive_s' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='83' column='1' id='type-id-141'>
4806+ <typedef-decl name='ssize_t' type-id='type-id-125' filepath='/usr/include/x86_64-linux-gnu/sys/types.h' line='108' column='1' id='type-id-135'/>
4807+ <typedef-decl name='yaml_char_t' type-id='type-id-20' filepath='/usr/include/yaml.h' line='80' column='1' id='type-id-136'/>
4808+ <class-decl name='yaml_version_directive_s' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='83' column='1' id='type-id-137'>
4809 <data-member access='public' layout-offset-in-bits='0'>
4810 <var-decl name='major' type-id='type-id-16' visibility='default' filepath='/usr/include/yaml.h' line='85' column='1'/>
4811 </data-member>
4812@@ -1259,29 +1264,29 @@
4813 <var-decl name='minor' type-id='type-id-16' visibility='default' filepath='/usr/include/yaml.h' line='87' column='1'/>
4814 </data-member>
4815 </class-decl>
4816- <typedef-decl name='yaml_version_directive_t' type-id='type-id-141' filepath='/usr/include/yaml.h' line='88' column='1' id='type-id-142'/>
4817- <class-decl name='yaml_tag_directive_s' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='91' column='1' id='type-id-143'>
4818+ <typedef-decl name='yaml_version_directive_t' type-id='type-id-137' filepath='/usr/include/yaml.h' line='88' column='1' id='type-id-138'/>
4819+ <class-decl name='yaml_tag_directive_s' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='91' column='1' id='type-id-139'>
4820 <data-member access='public' layout-offset-in-bits='0'>
4821- <var-decl name='handle' type-id='type-id-144' visibility='default' filepath='/usr/include/yaml.h' line='93' column='1'/>
4822+ <var-decl name='handle' type-id='type-id-140' visibility='default' filepath='/usr/include/yaml.h' line='93' column='1'/>
4823 </data-member>
4824 <data-member access='public' layout-offset-in-bits='64'>
4825- <var-decl name='prefix' type-id='type-id-144' visibility='default' filepath='/usr/include/yaml.h' line='95' column='1'/>
4826+ <var-decl name='prefix' type-id='type-id-140' visibility='default' filepath='/usr/include/yaml.h' line='95' column='1'/>
4827 </data-member>
4828 </class-decl>
4829- <typedef-decl name='yaml_tag_directive_t' type-id='type-id-143' filepath='/usr/include/yaml.h' line='96' column='1' id='type-id-145'/>
4830- <class-decl name='yaml_mark_s' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='147' column='1' id='type-id-146'>
4831+ <typedef-decl name='yaml_tag_directive_t' type-id='type-id-139' filepath='/usr/include/yaml.h' line='96' column='1' id='type-id-141'/>
4832+ <class-decl name='yaml_mark_s' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='147' column='1' id='type-id-142'>
4833 <data-member access='public' layout-offset-in-bits='0'>
4834- <var-decl name='index' type-id='type-id-138' visibility='default' filepath='/usr/include/yaml.h' line='149' column='1'/>
4835+ <var-decl name='index' type-id='type-id-134' visibility='default' filepath='/usr/include/yaml.h' line='149' column='1'/>
4836 </data-member>
4837 <data-member access='public' layout-offset-in-bits='64'>
4838- <var-decl name='line' type-id='type-id-138' visibility='default' filepath='/usr/include/yaml.h' line='152' column='1'/>
4839+ <var-decl name='line' type-id='type-id-134' visibility='default' filepath='/usr/include/yaml.h' line='152' column='1'/>
4840 </data-member>
4841 <data-member access='public' layout-offset-in-bits='128'>
4842- <var-decl name='column' type-id='type-id-138' visibility='default' filepath='/usr/include/yaml.h' line='155' column='1'/>
4843+ <var-decl name='column' type-id='type-id-134' visibility='default' filepath='/usr/include/yaml.h' line='155' column='1'/>
4844 </data-member>
4845 </class-decl>
4846- <typedef-decl name='yaml_mark_t' type-id='type-id-146' filepath='/usr/include/yaml.h' line='156' column='1' id='type-id-147'/>
4847- <enum-decl name='yaml_scalar_style_e' filepath='/usr/include/yaml.h' line='166' column='1' id='type-id-148'>
4848+ <typedef-decl name='yaml_mark_t' type-id='type-id-142' filepath='/usr/include/yaml.h' line='156' column='1' id='type-id-143'/>
4849+ <enum-decl name='yaml_scalar_style_e' filepath='/usr/include/yaml.h' line='166' column='1' id='type-id-144'>
4850 <underlying-type type-id='type-id-19'/>
4851 <enumerator name='YAML_ANY_SCALAR_STYLE' value='0'/>
4852 <enumerator name='YAML_PLAIN_SCALAR_STYLE' value='1'/>
4853@@ -1290,32 +1295,32 @@
4854 <enumerator name='YAML_LITERAL_SCALAR_STYLE' value='4'/>
4855 <enumerator name='YAML_FOLDED_SCALAR_STYLE' value='5'/>
4856 </enum-decl>
4857- <typedef-decl name='yaml_scalar_style_t' type-id='type-id-148' filepath='/usr/include/yaml.h' line='182' column='1' id='type-id-149'/>
4858- <enum-decl name='yaml_sequence_style_e' filepath='/usr/include/yaml.h' line='185' column='1' id='type-id-150'>
4859+ <typedef-decl name='yaml_scalar_style_t' type-id='type-id-144' filepath='/usr/include/yaml.h' line='182' column='1' id='type-id-145'/>
4860+ <enum-decl name='yaml_sequence_style_e' filepath='/usr/include/yaml.h' line='185' column='1' id='type-id-146'>
4861 <underlying-type type-id='type-id-19'/>
4862 <enumerator name='YAML_ANY_SEQUENCE_STYLE' value='0'/>
4863 <enumerator name='YAML_BLOCK_SEQUENCE_STYLE' value='1'/>
4864 <enumerator name='YAML_FLOW_SEQUENCE_STYLE' value='2'/>
4865 </enum-decl>
4866- <typedef-decl name='yaml_sequence_style_t' type-id='type-id-150' filepath='/usr/include/yaml.h' line='193' column='1' id='type-id-151'/>
4867- <enum-decl name='yaml_mapping_style_e' filepath='/usr/include/yaml.h' line='196' column='1' id='type-id-152'>
4868+ <typedef-decl name='yaml_sequence_style_t' type-id='type-id-146' filepath='/usr/include/yaml.h' line='193' column='1' id='type-id-147'/>
4869+ <enum-decl name='yaml_mapping_style_e' filepath='/usr/include/yaml.h' line='196' column='1' id='type-id-148'>
4870 <underlying-type type-id='type-id-19'/>
4871 <enumerator name='YAML_ANY_MAPPING_STYLE' value='0'/>
4872 <enumerator name='YAML_BLOCK_MAPPING_STYLE' value='1'/>
4873 <enumerator name='YAML_FLOW_MAPPING_STYLE' value='2'/>
4874 </enum-decl>
4875- <typedef-decl name='yaml_mapping_style_t' type-id='type-id-152' filepath='/usr/include/yaml.h' line='205' column='1' id='type-id-153'/>
4876- <enum-decl name='yaml_node_type_e' filepath='/usr/include/yaml.h' line='692' column='1' id='type-id-154'>
4877+ <typedef-decl name='yaml_mapping_style_t' type-id='type-id-148' filepath='/usr/include/yaml.h' line='205' column='1' id='type-id-149'/>
4878+ <enum-decl name='yaml_node_type_e' filepath='/usr/include/yaml.h' line='692' column='1' id='type-id-150'>
4879 <underlying-type type-id='type-id-19'/>
4880 <enumerator name='YAML_NO_NODE' value='0'/>
4881 <enumerator name='YAML_SCALAR_NODE' value='1'/>
4882 <enumerator name='YAML_SEQUENCE_NODE' value='2'/>
4883 <enumerator name='YAML_MAPPING_NODE' value='3'/>
4884 </enum-decl>
4885- <typedef-decl name='yaml_node_type_t' type-id='type-id-154' filepath='/usr/include/yaml.h' line='702' column='1' id='type-id-155'/>
4886- <typedef-decl name='yaml_node_t' type-id='type-id-156' filepath='/usr/include/yaml.h' line='705' column='1' id='type-id-157'/>
4887- <typedef-decl name='yaml_node_item_t' type-id='type-id-16' filepath='/usr/include/yaml.h' line='708' column='1' id='type-id-158'/>
4888- <class-decl name='yaml_node_pair_s' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='711' column='1' id='type-id-159'>
4889+ <typedef-decl name='yaml_node_type_t' type-id='type-id-150' filepath='/usr/include/yaml.h' line='702' column='1' id='type-id-151'/>
4890+ <typedef-decl name='yaml_node_t' type-id='type-id-152' filepath='/usr/include/yaml.h' line='705' column='1' id='type-id-153'/>
4891+ <typedef-decl name='yaml_node_item_t' type-id='type-id-16' filepath='/usr/include/yaml.h' line='708' column='1' id='type-id-154'/>
4892+ <class-decl name='yaml_node_pair_s' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='711' column='1' id='type-id-155'>
4893 <data-member access='public' layout-offset-in-bits='0'>
4894 <var-decl name='key' type-id='type-id-16' visibility='default' filepath='/usr/include/yaml.h' line='713' column='1'/>
4895 </data-member>
4896@@ -1323,93 +1328,93 @@
4897 <var-decl name='value' type-id='type-id-16' visibility='default' filepath='/usr/include/yaml.h' line='715' column='1'/>
4898 </data-member>
4899 </class-decl>
4900- <typedef-decl name='yaml_node_pair_t' type-id='type-id-159' filepath='/usr/include/yaml.h' line='716' column='1' id='type-id-160'/>
4901- <class-decl name='yaml_node_s' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='719' column='1' id='type-id-156'>
4902+ <typedef-decl name='yaml_node_pair_t' type-id='type-id-155' filepath='/usr/include/yaml.h' line='716' column='1' id='type-id-156'/>
4903+ <class-decl name='yaml_node_s' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/yaml.h' line='719' column='1' id='type-id-152'>
4904 <data-member access='public' layout-offset-in-bits='0'>
4905- <var-decl name='type' type-id='type-id-155' visibility='default' filepath='/usr/include/yaml.h' line='722' column='1'/>
4906+ <var-decl name='type' type-id='type-id-151' visibility='default' filepath='/usr/include/yaml.h' line='722' column='1'/>
4907 </data-member>
4908 <data-member access='public' layout-offset-in-bits='64'>
4909- <var-decl name='tag' type-id='type-id-144' visibility='default' filepath='/usr/include/yaml.h' line='725' column='1'/>
4910+ <var-decl name='tag' type-id='type-id-140' visibility='default' filepath='/usr/include/yaml.h' line='725' column='1'/>
4911 </data-member>
4912 <data-member access='public' layout-offset-in-bits='128'>
4913- <var-decl name='data' type-id='type-id-161' visibility='default' filepath='/usr/include/yaml.h' line='770' column='1'/>
4914+ <var-decl name='data' type-id='type-id-157' visibility='default' filepath='/usr/include/yaml.h' line='770' column='1'/>
4915 </data-member>
4916 <data-member access='public' layout-offset-in-bits='384'>
4917- <var-decl name='start_mark' type-id='type-id-147' visibility='default' filepath='/usr/include/yaml.h' line='773' column='1'/>
4918+ <var-decl name='start_mark' type-id='type-id-143' visibility='default' filepath='/usr/include/yaml.h' line='773' column='1'/>
4919 </data-member>
4920 <data-member access='public' layout-offset-in-bits='576'>
4921- <var-decl name='end_mark' type-id='type-id-147' visibility='default' filepath='/usr/include/yaml.h' line='775' column='1'/>
4922+ <var-decl name='end_mark' type-id='type-id-143' visibility='default' filepath='/usr/include/yaml.h' line='775' column='1'/>
4923 </data-member>
4924 </class-decl>
4925- <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='728' column='1' id='type-id-161'>
4926+ <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='728' column='1' id='type-id-157'>
4927 <data-member access='public'>
4928- <var-decl name='scalar' type-id='type-id-162' visibility='default' filepath='/usr/include/yaml.h' line='738' column='1'/>
4929+ <var-decl name='scalar' type-id='type-id-158' visibility='default' filepath='/usr/include/yaml.h' line='738' column='1'/>
4930 </data-member>
4931 <data-member access='public'>
4932- <var-decl name='sequence' type-id='type-id-163' visibility='default' filepath='/usr/include/yaml.h' line='753' column='1'/>
4933+ <var-decl name='sequence' type-id='type-id-159' visibility='default' filepath='/usr/include/yaml.h' line='753' column='1'/>
4934 </data-member>
4935 <data-member access='public'>
4936- <var-decl name='mapping' type-id='type-id-164' visibility='default' filepath='/usr/include/yaml.h' line='768' column='1'/>
4937+ <var-decl name='mapping' type-id='type-id-160' visibility='default' filepath='/usr/include/yaml.h' line='768' column='1'/>
4938 </data-member>
4939 </union-decl>
4940- <class-decl name='__anonymous_struct__7' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='731' column='1' id='type-id-162'>
4941+ <class-decl name='__anonymous_struct__7' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='731' column='1' id='type-id-158'>
4942 <data-member access='public' layout-offset-in-bits='0'>
4943- <var-decl name='value' type-id='type-id-144' visibility='default' filepath='/usr/include/yaml.h' line='733' column='1'/>
4944+ <var-decl name='value' type-id='type-id-140' visibility='default' filepath='/usr/include/yaml.h' line='733' column='1'/>
4945 </data-member>
4946 <data-member access='public' layout-offset-in-bits='64'>
4947- <var-decl name='length' type-id='type-id-138' visibility='default' filepath='/usr/include/yaml.h' line='735' column='1'/>
4948+ <var-decl name='length' type-id='type-id-134' visibility='default' filepath='/usr/include/yaml.h' line='735' column='1'/>
4949 </data-member>
4950 <data-member access='public' layout-offset-in-bits='128'>
4951- <var-decl name='style' type-id='type-id-149' visibility='default' filepath='/usr/include/yaml.h' line='737' column='1'/>
4952+ <var-decl name='style' type-id='type-id-145' visibility='default' filepath='/usr/include/yaml.h' line='737' column='1'/>
4953 </data-member>
4954 </class-decl>
4955- <class-decl name='__anonymous_struct__8' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='741' column='1' id='type-id-163'>
4956+ <class-decl name='__anonymous_struct__8' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='741' column='1' id='type-id-159'>
4957 <data-member access='public' layout-offset-in-bits='0'>
4958- <var-decl name='items' type-id='type-id-165' visibility='default' filepath='/usr/include/yaml.h' line='750' column='1'/>
4959+ <var-decl name='items' type-id='type-id-161' visibility='default' filepath='/usr/include/yaml.h' line='750' column='1'/>
4960 </data-member>
4961 <data-member access='public' layout-offset-in-bits='192'>
4962- <var-decl name='style' type-id='type-id-151' visibility='default' filepath='/usr/include/yaml.h' line='752' column='1'/>
4963+ <var-decl name='style' type-id='type-id-147' visibility='default' filepath='/usr/include/yaml.h' line='752' column='1'/>
4964 </data-member>
4965 </class-decl>
4966- <class-decl name='__anonymous_struct__9' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='743' column='1' id='type-id-165'>
4967+ <class-decl name='__anonymous_struct__9' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='743' column='1' id='type-id-161'>
4968 <data-member access='public' layout-offset-in-bits='0'>
4969- <var-decl name='start' type-id='type-id-166' visibility='default' filepath='/usr/include/yaml.h' line='745' column='1'/>
4970+ <var-decl name='start' type-id='type-id-162' visibility='default' filepath='/usr/include/yaml.h' line='745' column='1'/>
4971 </data-member>
4972 <data-member access='public' layout-offset-in-bits='64'>
4973- <var-decl name='end' type-id='type-id-166' visibility='default' filepath='/usr/include/yaml.h' line='747' column='1'/>
4974+ <var-decl name='end' type-id='type-id-162' visibility='default' filepath='/usr/include/yaml.h' line='747' column='1'/>
4975 </data-member>
4976 <data-member access='public' layout-offset-in-bits='128'>
4977- <var-decl name='top' type-id='type-id-166' visibility='default' filepath='/usr/include/yaml.h' line='749' column='1'/>
4978+ <var-decl name='top' type-id='type-id-162' visibility='default' filepath='/usr/include/yaml.h' line='749' column='1'/>
4979 </data-member>
4980 </class-decl>
4981- <class-decl name='__anonymous_struct__10' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='756' column='1' id='type-id-164'>
4982+ <class-decl name='__anonymous_struct__10' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='756' column='1' id='type-id-160'>
4983 <data-member access='public' layout-offset-in-bits='0'>
4984- <var-decl name='pairs' type-id='type-id-167' visibility='default' filepath='/usr/include/yaml.h' line='765' column='1'/>
4985+ <var-decl name='pairs' type-id='type-id-163' visibility='default' filepath='/usr/include/yaml.h' line='765' column='1'/>
4986 </data-member>
4987 <data-member access='public' layout-offset-in-bits='192'>
4988- <var-decl name='style' type-id='type-id-153' visibility='default' filepath='/usr/include/yaml.h' line='767' column='1'/>
4989+ <var-decl name='style' type-id='type-id-149' visibility='default' filepath='/usr/include/yaml.h' line='767' column='1'/>
4990 </data-member>
4991 </class-decl>
4992- <class-decl name='__anonymous_struct__11' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='758' column='1' id='type-id-167'>
4993+ <class-decl name='__anonymous_struct__11' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/yaml.h' line='758' column='1' id='type-id-163'>
4994 <data-member access='public' layout-offset-in-bits='0'>
4995- <var-decl name='start' type-id='type-id-168' visibility='default' filepath='/usr/include/yaml.h' line='760' column='1'/>
4996+ <var-decl name='start' type-id='type-id-164' visibility='default' filepath='/usr/include/yaml.h' line='760' column='1'/>
4997 </data-member>
4998 <data-member access='public' layout-offset-in-bits='64'>
4999- <var-decl name='end' type-id='type-id-168' visibility='default' filepath='/usr/include/yaml.h' line='762' column='1'/>
5000+ <var-decl name='end' type-id='type-id-164' visibility='default' filepath='/usr/include/yaml.h' line='762' column='1'/>
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches