[ipsec][strongswan] strongswan源碼分析--(五)plugin的配置文件的添加方法與管理架構(gòu)解析
前言
我們知道,strongswan是基于插件式管理的。不同的插件有不同的配置文件,在這下面,
我們以netlink的插件為例:etc/strongswan.d/charon/kernel-netlink.conf
在這個(gè)文件里,提供了不同的針對(duì)插件的配置項(xiàng)。接下來(lái)我們將講解,如何開(kāi)發(fā)這些配置項(xiàng)。
配置文件結(jié)構(gòu)
在開(kāi)始之前,先了解一下strongswan的配置文件組織結(jié)構(gòu),
strongswan的所有配置項(xiàng)都是層級(jí)結(jié)構(gòu)組織的,如:charon.plugins.kernel-netlink.force_receive_buffer_size
樹(shù)狀結(jié)構(gòu),它們擁有共同的父節(jié)點(diǎn),charon。
在配置文件里面,可以include其他的配置文件。
strongswan的所有配置文件,也都是樹(shù)型引用的,它們擁有同一個(gè)共同的父節(jié)點(diǎn),也就是所有配置文件的入口:etc/strongswan.conf
所有的plugin的配置文件,都在目錄etc/strongswan.d/charon/下,并以插件的名字命令,形如kernel-netlink.conf
配置文件的讀取和使用
做了簡(jiǎn)單的代碼分析,如 [dev][ipsec] strongswan plugin加載優(yōu)先級(jí)原理 中提到的,
charon程序的一開(kāi)始,便進(jìn)行了所有配置文件的加載。在library_init()函數(shù)里。

配置文件的生成
作為開(kāi)發(fā)者,我們將通過(guò)netlink plugin,來(lái)學(xué)習(xí)如何正確的為plugin設(shè)置配置文件。
在strongswan的代碼里,所有的配置文件管理,都在這個(gè)目錄下
strongswan.git/conf
plugin在它的子目錄里,strongswan.git/conf/plugins
配置文件是自動(dòng)生成的,通過(guò)模塊,和腳本的輔助。
兩個(gè)模版文件:
default.conf, default.opt
配置文件的生成過(guò)程,在Makefile中:Makefile.am
大該的過(guò)程如下:
1. 讀取configure階段開(kāi)啟的所以plugin列表。
2. 在plugins目前下讀取每一個(gè)plugin的自定義配置項(xiàng),如kernel-netlink.opt
3. 如果沒(méi)有默認(rèn)配置項(xiàng)的,將使用默認(rèn)的配置項(xiàng)配置文件:default.opt
4. 將自定義配置項(xiàng)中的配置,通過(guò)配置文件魔板整合生成對(duì)應(yīng)plugin的配置文件 如:kernel-netlink.conf
這個(gè)配置文件在代碼倉(cāng)庫(kù)中是沒(méi)有的,而是在編譯安裝過(guò)程中生成的。
5. 為其他plugin重復(fù)以上步驟。
幾段關(guān)鍵的代碼:
1. 指定所有配置文件作為target的宏
# we only install snippets for enabled plugins plugins_install_tmp = $(charon_plugins:%=plugins/%.tmp) plugins_install_src = $(charon_plugins:%=plugins/%.conf)
2。整合魔板與定制內(nèi)容的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)/$@
舉例:
假設(shè)我們現(xiàn)在要自開(kāi)發(fā)一個(gè)plugin,classic-tong并為其指定以下配置項(xiàng),只需要在目錄
plugins下,添加一個(gè)文件,classic-tong.opt
并編輯內(nèi)容:
charon.plugins.classic-tong.timeout = 0
就可以了。
posted on 2019-06-05 18:55 toong 閱讀(3263) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)