[ipsec][strongswan] strongswan源碼分析--(五)plugin的配置文件的添加方法與管理架構解析

前言

咱們知道,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

就能夠了。

相關文章
相關標籤/搜索