Openswan Porting to Pronghorn-Metro 實務經驗分享 02

首先,先編出一個可以動的系統吧~

這部份倒是很簡單,按照下面的步驟即可:

1. tar zxvf ADILinuxDistribution-adi3.tgz
2. Get the cross compiler tool chain (http://www.snapgear.org/snapgear/downloads.html)
3. Intel Access Library Integration
4. make menuconfig
...4.1 Vendor/Product Selection -> ADI, PronghornMetro
...4.2 Kernel/Library/Defaults Selection -> linux-2.6.x, uClibc
5. make
6. 將編出來的 image 和 ramdisk 放到版子上 ( 於 boot loader 執行下面的 command )
...6.1 ip_address -l 192.168.8.234 -h 192.168.8.239
...6.2 load -r -v -b 0x01600000 zImage
...6.3 load -r -v -b 0x00800000 ramdisk.gz
...6.4 go -n 0x01600000

這樣就完成了~
那接下來,要開始進入重頭戲了(或是說,我的一連串搞笑演出),也就是將 OpenSwan 放到版子上。

首先,理所當然的, IPSec 會動到 Linux 本身的 IP Stack,這也意味著,一定有不少的 Kernel Option 會需要進行選擇。在我印象中(這兩個字真是害慘我了,以後記得要多看看官方文件才是),kernel 2.4 並不支援 IPsec ,或是說要加上一些 Patch 才能支援,kernel 2.6 則是天生就支援 IPSec,這也是為甚麼前面我編得時候, kernel 選擇 2.6 的理由。所以,我就很勇敢的進入 Kernel 的 menuconfig 畫面,開始選擇我所需要的模組。

一進去就直接來到 Networking --> Networking options 底下,很快的就找到了幾個 Option:

IPsec user configuration interface
PF_KEY sockets ( 我是看到 KEY 才注意到他的,運氣挺不錯的,看說明正式我們所需要的部份)
IP: AH transformation
IP: ESP transformation ( 很好,兩種 mode 都有支援~ )
IPSEC NAT-Traversal (KLIPS compatible) ( 應該是 NAT 的相關議題吧,以後有空在研究吧 )

一向小心的我,為了看看有甚麼遺漏的,又在 Kernel 裡面到處亂逛,結果發現在 Netowrking 的選項裡,發現了:

Openswan IPsec (KLIPS26)

一看以後當然要選了啊,順手也將下面所有的 Option 打勾 ... 之後滿懷信心的下了 make ...

結果...有 Error ... ( 擷取部份 Error Msg 如下 )

ln -fs /home/neokent/projects/20090518_ipsec/ADI/openswan/linux/net/ipsec/aes//ipsec_alg_aes.c net/ipsec/aes/ipsec_alg_aes.c
CC net/ipsec/aes/ipsec_alg_aes.o
net/ipsec/aes/ipsec_alg_aes.c:31:5: warning: "CONFIG_KLIPS_MODULE" is not defined
net/ipsec/aes/ipsec_alg_aes.c:85: error: parse error before string constant
net/ipsec/aes/ipsec_alg_aes.c:85: warning: type defaults to `int' in declaration of `MODULE_PARM'
net/ipsec/aes/ipsec_alg_aes.c:85: warning: function declaration isn't a prototype
net/ipsec/aes/ipsec_alg_aes.c:85: warning: data definition has no type or storage class
net/ipsec/aes/ipsec_alg_aes.c:256:7: warning: "NOT_YET" is not defined
make[4]: *** [net/ipsec/aes/ipsec_alg_aes.o] Error 1

這是甚麼狀況...恩,我們去看看那一行吧

ipsec_alg_aes.c:
80 #ifdef MODULE
81 static int auth_id=0;
82 #else
83 static int auth_id=9;
84 #endif
85 MODULE_PARM(auth_id, "i");
86 #endif

第 85 行有問題,怎麼可能,這不是很標準的用法嗎?稍微查了一下...我錯了... 這是 kernel 2.4 的 MACRO,在 kernel 2.6 以後改成下面兩隻:
linux/moduleparam.h:
module_param(name, type, perm)
module_param_array(name, type, nump, perm)
要幫它進行修改 Patch 嗎?想到就好累,可是 ... 等一下,這一整包工具怎麼會犯下這麼明顯的錯誤,難道我忽略甚麼了嗎?找了一段間,總算在下面的網頁找到了答案:

http://www.openswan.org/code/

摘要如下:
The Openswan 2 branch supports Linux Kernels 2.4 via KLIPS, and Linux Kernel 2.6 with the NETKEY (aka "26sec" or "native") IPsec stack. Openswan 2.x is the only version which supports the Linux 2.6 Kernel.

The Openswan 3 branch supports Linux Kernels 2.6 via KLIPS, and Linux Kernel 2.6 with the NETKEY (aka "26sec" or "native") IPsec stack.

簡單來說,我用的版本~ OpenSwan 2.4.5 根本不支援 Kenerl 2.6 KLIPS ... 真是的 Kernel Option 裡面的 Openswan IPsec (KLIPS26) 是寫好玩的啊~還特別註明 26 ... 於是,我把那個 Option 拿掉,在進行編譯,順利的將 Kernel 編出來了,很好~接下來還會遇到甚麼問題呢?

Porting 的紀錄又翻過了一頁~

留言

這個網誌中的熱門文章

我弟家的新居感恩禮拜分享:善頌善禱

如何將Linux打造成OpenFlow Switch:Openvswitch

Openssl 範例程式:建立SSL連線