- 论坛徽章:
- 0
|
由于FreeBSD 6.2内核不支持SCTP,预计FreeBSD 7.0支持。本文讲述如何在FreeBSD 6.2安装SCTP补丁。
0. SCTP介绍
SCTP被设计用来在IP网上传输PSTN信令消息,但能有更广泛的用途。
SCTP是一个可靠的传输层协议,运行在无连接的包网络上(如IP网)。它为用户提供下列服务:
-- 确保(acknowledged)用户数据无差错,无重复的传送;
-- 根据通路MTU的限制,进行用户数据的分段;
-- 流内用户消息的顺序递交;(可选的)每个用户消息按到达顺序(order-of-arrival)进行递交;
-- (可选的)多个用户消息捆绑到单个SCTP包中进行传输;
-- 通过在偶联的一端或两端提供的多归属(multi-homing)机制,提供网络级容错;
SCTP的设计包含了避免拥塞机制和防泛播(flooding)及匿名攻击(masquerade attacks)的能力。
1. 首先到http://www.sctp.org/下载“SCTP Kernel patches for FreeBSD/NetBSD/OpenBSD”(http://www.sctp.org/Sep6_2007.tarball.bz2)
2. 假设Sep6_2007.tarball.bz2保存在/usr/home/linhaohong/
tar xvf Jul13_2007.tarball.bz2解压SCTP patches。解压到/usr/home/linhaohong/KERN目录中。
注意:代码中KERN/netinet/sctp_os_bsd.h中有Bug,请将54行的#include <sys/priv.h>注释掉
3.将KERN目录的setup_freebsd_src.sh设置为可执行,并进入su root后执行setup_freebsd_src.sh
%chmod 731 setup_freebsd_src.sh
linhaohong# ./setup_freebsd_src.sh
4.在如下提示中输入SCTP源文件目录(必须输入绝对路径)
Where is your cvs path (e.g. /usr/rrs/sctpCVS)?
/usr/home/linhaohong
5.在如下提示输入内核文件目录(必须输入绝对路径)
Where is your kernel source code that you are using (e.g. /usr/src/sys)?
/usr/src/sys
6.在如下提示输入版本号62,并回车
Will you be using 7.0 Current or FreeBSD 6.2 or 6.1 or 6.0 (7 or 62 or 61 or 60)?
62
I will use 6.2 then, if unsure hit ctrl-c else return
7. 系统完成编译和链接
8. 在内核配置文件中添加options SCTP,并重新编译内核,并重启
#cd /usr/src/sys/i386/conf/
#cp GENERIC LINHAOHONG
#vi LINHAOHONG #添加options SCTP
# cd /usr/src
# make buildkernel KERNCONF=LINHAOHONG
# make installkernel KERNCONF=LINHAOHONG
# reboot NOW
注意:
i.如果内核启用IPSEC,部分头文件会出现定义冲突。 。估计由于SCTP/IPSec/IPv6都基于KAME,估计Randall Stewart没有忽略了部分定义的相关性
ii. /usr/obj/usr/src/sys/LINHAOHONG/machine/signal.h中struct osigcontext的"osigset_t sc_mask"改为"unsigned int sc_mask"。
9. 复制新的系统调用引用文件到/usr/include/sys/目录
cp /usr/src/sys/sys/mbuf.h /usr/include/sys/
cp /usr/src/sys/sys/socket.h /usr/include/sys/
cp /usr/src/sys/sys/syscall.h /usr/include/sys/
cp /usr/src/sys/sys/syscall.mk /usr/include/sys/
cp /usr/src/sys/sys/sysproto.h /usr/include/sys/
10. 复制如下文件
cd /usr/home/linhaohong/KERN/export_freebsd/netinet
cp *.h /usr/include/netinet
cd ../netinet6
cp *.h /usr/include/netinet6
11. 创建libsctp
cd /usr/home/linhaohong/KERN/usr.lib
make
cp libsctp* /lib
ranlib /lib/libsctp.a /lib/libsctp_p.a
至此就可以编译和运行SCTP程序
遗留问题:在《Unix Network Programming V1 3ed》中的例子编译没有问题并可以运行(没有Protocol not supported错误)。但是在协议交互过程中会出现系统重启现象。请问如何跟踪系统重启的原因? |
评分
-
查看全部评分
|