TIPC 2.0.0 使用初试
照例先看相关版本:
[root@localhost lenky]# uname -a Linux localhost.localdomain 2.6.38.8 #1 SMP Sat Dec 31 17:17:47 EST 2011 i686 i686 i386 GNU/Linux [root@localhost lenky]# ls -l total 72 drwxrwxr-x. 5 root root 4096 May 7 2010 tipcutils-2.0.0 -rw-r--r--. 1 root root 66495 Mar 3 2012 tipcutils-2.0.0.tar.gz [root@localhost lenky]#
从内核2.6.35开始,TIPC 2.0就已经合入主线,所以这里的2.6.38.8内核正好合适,可直接利用内核中的TIPC 2.0模块,当然,要使用它必须首先确保已经打开了对应的内核编译选项,具体位置在Networking support —> Networking options —> The TIPC Protocol (EXPERIMENTAL),以模块形式编译即可:
[root@localhost lenky]# cat /usr/src/linux-2.6.38.8/.config | grep TIPC CONFIG_TIPC=m CONFIG_TIPC_ADVANCED=y CONFIG_TIPC_NODES=255 CONFIG_TIPC_PORTS=8191 CONFIG_TIPC_LOG=0 CONFIG_TIPC_DEBUG=y [root@localhost lenky]#
操作TIPC 2.0的用户工具需要对应的2.0.0版本后的tipc-config,从http://tipc.sourceforge.net/tipc_linux.shtml下载最新的tipc-config源码进行编译。由于tipc-config源码中使用到内核头文件,所以需要指定内核头文件的位置,这在Makefile里以INCLUDE_PATH变量的形式存在:
ifdef INCLUDE_PATH # Specifies path to directory that resolves #include <linux/tipc.h> IFLAGS = -I${INCLUDE_PATH} endif
直接make编译会出错:
[root@localhost tipcutils-2.0.0]# make make -C tipc-config make[1]: Entering directory `/root/home/lenky/tipcutils-2.0.0/tipc-config' cc -D VERSION=\"2.0.0\" -Wall -O2 -c -o tipc-config.o tipc-config.c tipc-config.c: In function ‘show_stats’: tipc-config.c:1084: error: ‘TIPC_CMD_SHOW_STATS’ undeclared (first use in this function) tipc-config.c:1084: error: (Each undeclared identifier is reported only once tipc-config.c:1084: error: for each function it appears in.) make[1]: *** [tipc-config.o] Error 1 make[1]: Leaving directory `/root/home/lenky/tipcutils-2.0.0/tipc-config' make: *** [tipc-config] Error 2 [root@localhost tipcutils-2.0.0]#
可以这样:
[root@localhost tipcutils-2.0.0]# export INCLUDE_PATH=/usr/src/linux-`uname -r`/include [root@localhost tipcutils-2.0.0]# make make -C tipc-config make[1]: Entering directory `/root/home/lenky/tipcutils-2.0.0/tipc-config' cc -I/usr/src/linux-2.6.38.8/include -D VERSION=\"2.0.0\" -Wall -O2 -c -o tipc-config.o tipc-config.c In file included from /usr/src/linux-2.6.38.8/include/linux/tipc.h:40, from tipc-config.c:46: /usr/src/linux-2.6.38.8/include/linux/types.h:13:2: warning: #warning "Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders" ... /usr/src/linux-2.6.38.8/include/linux/types.h:13:2: warning: #warning "Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders" gcc -I/usr/src/linux-2.6.38.8/include -Wall -O2 server_tipc.o -o server_tipc make[2]: Leaving directory `/root/home/lenky/tipcutils-2.0.0/demos/benchmark' make[1]: Leaving directory `/root/home/lenky/tipcutils-2.0.0/demos' [root@localhost tipcutils-2.0.0]#
或者这样:
[root@localhost tipcutils-2.0.0]# make INCLUDE_PATH=/usr/src/linux-`uname -r`/include make -C tipc-config make[1]: Entering directory `/root/home/lenky/tipcutils-2.0.0/tipc-config' cc -I/usr/src/linux-2.6.38.8/include -D VERSION=\"2.0.0\" -Wall -O2 -c -o tipc-config.o tipc-config.c In file included from /usr/src/linux-2.6.38.8/include/linux/tipc.h:40, from tipc-config.c:46: /usr/src/linux-2.6.38.8/include/linux/types.h:13:2: warning: #warning "Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders" ... /usr/src/linux-2.6.38.8/include/linux/types.h:13:2: warning: #warning "Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders" gcc -I/usr/src/linux-2.6.38.8/include -Wall -O2 server_tipc.o -o server_tipc make[2]: Leaving directory `/root/home/lenky/tipcutils-2.0.0/demos/benchmark' make[1]: Leaving directory `/root/home/lenky/tipcutils-2.0.0/demos' [root@localhost tipcutils-2.0.0]#
不管怎样,应用层工具tipc-config编译好了:
[root@localhost tipc-config]# ls -F Makefile README tipc-config* tipc-config.c tipc-config.o [root@localhost tipc-config]#
弄两台机器(A和B),一样的环境(我这里是两台虚拟机,在虚拟机A上准备好TIPC的相关环境后克隆得到B),机器A:
[root@localhost tipc-config]# ls Makefile README tipc-config tipc-config.c tipc-config.o [root@localhost tipc-config]# ifconfig eth0 | grep addr eth0 Link encap:Ethernet HWaddr 00:0C:29:A3:25:7D inet addr:192.168.205.130 Bcast:192.168.205.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fea3:257d/64 Scope:Link [root@localhost tipc-config]# uname -a Linux localhost.localdomain 2.6.38.8 #1 SMP Sat Dec 31 17:17:47 EST 2011 i686 i686 i386 GNU/Linux [root@localhost tipc-config]# ./tipc-config -netid=8888 -a=1.1.1 -be=eth:eth0 TIPC module not installed [root@localhost tipc-config]# modprobe tipc [root@localhost tipc-config]# ./tipc-config -netid=8888 -a=1.1.1 -be=eth:eth0 [root@localhost tipc-config]#
使用dmesg命令可以看到如下信息:
[root@localhost tipc-config]# dmesg -c ... TIPC: Activated (version 2.0.0 compiled Dec 31 2011 17:13:52) NET: Registered protocol family 30 TIPC: Started in single node mode TIPC: Started in network mode TIPC: Own node address <1.1.1>, network identity 8888 TIPC: Enabled bearer <eth:eth0>, discovery domain <1.1.0>, priority 10 [root@localhost tipc-config]#
再操作机器B:
[root@localhost tipc-config]# ls Makefile README tipc-config tipc-config.c tipc-config.o [root@localhost tipc-config]# ifconfig eth1 | grep addr eth1 Link encap:Ethernet HWaddr 00:0C:29:11:83:B6 inet addr:192.168.205.131 Bcast:192.168.205.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe11:83b6/64 Scope:Link [root@localhost tipc-config]# uname -a Linux localhost.localdomain 2.6.38.8 #1 SMP Sat Dec 31 17:17:47 EST 2011 i686 i686 i386 GNU/Linux [root@localhost tipc-config]# modprobe tipc [root@localhost tipc-config]# ./tipc-config -netid=8888 -a=1.1.2 -be=eth:eth1 [root@localhost tipc-config]# dmesg -c ... TIPC: Activated (version 2.0.0 compiled Dec 31 2011 17:13:52) NET: Registered protocol family 30 TIPC: Started in single node mode TIPC: Started in network mode TIPC: Own node address <1.1.2>, network identity 8888 TIPC: Enabled bearer <eth:eth1>, discovery domain <1.1.0>, priority 10 TIPC: Established link <1.1.2:eth1-1.1.1:eth0> on network plane A [root@localhost tipc-config]#
相比之前机器A的dmesg信息,多了最后的“Established link”信息,不过再看机器A的dmesg信息:
[root@localhost tipc-config]# dmesg -c TIPC: Established link <1.1.1:eth0-1.1.2:eth1> on network plane A [root@localhost tipc-config]#
也有了“Established link”信息,说明机器A和机器B已经自动相互发现并进行了链接。好了,先来执行官方的demo程序试验一下,首选当然是hello world程序,机器A:
[root@localhost tipc-config]# cd ../demos/ [root@localhost demos]# cd hello_world/ [root@localhost hello_world]# ls -F client_tipc* client_tipc.c client_tipc.o Makefile server_tipc* server_tipc.c server_tipc.o [root@localhost hello_world]# ./server_tipc ****** TIPC server hello world program started ******
此时程序server_tipc处于等待链接连接状态,再执行机器B上的client_tipc:
[root@localhost tipc-config]# cd ../demos/hello_world/ [root@localhost hello_world]# ls -F client_tipc* client_tipc.c client_tipc.o Makefile server_tipc* server_tipc.c server_tipc.o [root@localhost hello_world]# ./client_tipc ****** TIPC client hello world program started ****** Client: received response: Uh ? ****** TIPC client hello program finished ****** [root@localhost hello_world]#
回过来看机器A上的server_tipc:
[root@localhost hello_world]# ./server_tipc ****** TIPC server hello world program started ****** Server: Message received: Hello World ! ****** TIPC server hello program finished ****** [root@localhost hello_world]#
OK,OVER!
参考资料:http://tipc.sourceforge.net/doc/tipc_2.0_users_guide.html
转载请保留地址:http://www.lenky.info/archives/2012/03/1248 或 http://lenky.info/?p=1248
备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来信讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。
法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。