咱們知道,strongswan是基於插件式管理的。不一樣的插件有不一樣的配置文件,在這下面,html
咱們以netlink的插件爲例:etc/strongswan.d/charon/kernel-netlink.confgit
在這個文件裏,提供了不一樣的針對插件的配置項。接下來咱們將講解,如何開發這些配置項。函數
在開始以前,先了解一下strongswan的配置文件組織結構,學習
strongswan的全部配置項都是層級結構組織的,如:charon.plugins.kernel-netlink.force_receive_buffer_sizeui
樹狀結構,它們擁有共同的父節點,charon。this
在配置文件裏面,能夠include其餘的配置文件。spa
strongswan的全部配置文件,也都是樹型引用的,它們擁有同一個共同的父節點,也就是全部配置文件的入口:etc/strongswan.conf插件
全部的plugin的配置文件,都在目錄etc/strongswan.d/charon/下,並以插件的名字命令,形如kernel-netlink.confcode
作了簡單的代碼分析,如 [dev][ipsec] strongswan plugin加載優先級原理 中提到的,orm
charon程序的一開始,便進行了全部配置文件的加載。在library_init()函數裏。
做爲開發者,咱們將經過netlink plugin,來學習如何正確的爲plugin設置配置文件。
在strongswan的代碼裏,全部的配置文件管理,都在這個目錄下
strongswan.git/conf
plugin在它的子目錄裏,strongswan.git/conf/plugins
配置文件是自動生成的,經過模塊,和腳本的輔助。
兩個模版文件:
default.conf, default.opt
配置文件的生成過程,在Makefile中:Makefile.am
大該的過程以下:
1. 讀取configure階段開啓的因此plugin列表。
2. 在plugins目前下讀取每個plugin的自定義配置項,如kernel-netlink.opt
3. 若是沒有默認配置項的,將使用默認的配置項配置文件:default.opt
4. 將自定義配置項中的配置,經過配置文件魔板整合生成對應plugin的配置文件 如:kernel-netlink.conf
這個配置文件在代碼倉庫中是沒有的,而是在編譯安裝過程當中生成的。
5. 爲其餘plugin重複以上步驟。
幾段關鍵的代碼:
1. 指定全部配置文件做爲target的宏
# we only install snippets for enabled plugins plugins_install_tmp = $(charon_plugins:%=plugins/%.tmp) plugins_install_src = $(charon_plugins:%=plugins/%.conf)
2。整合魔板與定製內容的target
.opt.conf: $(AM_V_GEN) \ case "$<" in \ *plugins/*) \ sed \ -e "s:\@PLUGIN_NAME\@:`basename $< .opt`:" \ $(srcdir)/default.opt | cat - $< | \ $(PYTHON) $(srcdir)/format-options.py -f conf -r charon.plugins > $(srcdir)/$@ \ ;; \ *) \ $(PYTHON) $(srcdir)/format-options.py -f conf -r charon.plugins $< > $(srcdir)/$@ \ ;; \ esac # we need another implicit rule to generate files from the generic template only # if the rules above did not catch it. this requires an intermediate step that # generates a copy of the generic config template. $(plugins_install_tmp): @mkdir -p $(builddir)/plugins @cp $(srcdir)/default.conf $(builddir)/$@ .tmp.conf: $(AM_V_GEN) \ sed \ -e "s:\@PLUGIN_NAME\@:`basename $< .tmp`:" \ $(builddir)/$< > $(builddir)/$@
假設咱們如今要自開發一個plugin,classic-tong併爲其指定如下配置項,只須要在目錄
plugins下,添加一個文件,classic-tong.opt
並編輯內容:
charon.plugins.classic-tong.timeout = 0
就能夠了。