ofp segment fault的原因

1. 创建线程不要直接用pthread_create,而要用odph_odpthreads_create。
2. 每个线程函数的开始处都要调用ofp_init_local初始化。
3. 之前调用系统socket和epoll之类的函数都要替换成ofp定义的,包括宏和结构体。如

1
2
//	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	sock = ofp_socket(OFP_AF_INET, OFP_SOCK_STREAM, OFP_IPPROTO_TCP);

ofp中的慢平面

默认编译OpenFastPath时慢平面是启用的,慢平面的功能之一是通过netlink方式向内核查询路由表,这是用内核公开的接口,不需要另开发内核驱动。

慢平面的一个局限,比方电脑只有一张网卡,而这块网卡已被dpdk绑定,网络包就不会在内核中被解析,此时慢平面的路由功能也就无效,所以干脆通过

1
./configure ... --enable-sp=no

将慢平面功能去掉。

而此时我们跑在ofp上的应用就没有路由表了么?
不是的。首先应用的本机ip地址是通过

1
myApp -i 0 -f ofp.cli

中的ofp.cli配置的。如

1
2
3
debug 0
loglevel set debug
ifconfig fp0 192.168.56.33/24

中的192.168.56.33就是本机地址。
而通过arp协议获取其它机器ip与mac关系的路由表是由

1
	ofp_start_cli_thread(instance, app_init_params.linux_core_id, params.cli_file);

这个线程在dpdk绑定的网卡上进行解析维护。

一个很好的例子就是ofp/example/webserver。

ofp和dpdk都可完全编译成静态库运行,不要为了LD_PRELOAD的那一点便利一门心思去编译出动态库。在自已的源码中加一层宏翻译,静态库与epoll api兼容性也很好。

github上的odp与dpdk-odp的区别是前者现在只包含了odp-linux,一种对linux系统api的包装,后者是对dpdk的包装,所以高性能选后者。原话见
doc/users-guide/users-guide.adoc

refer to:
https://github.com/OpenFastPath/ofp
https://github.com/OpenDataPlane/odp-dpdk
https://my.oschina.net/u/4361425/blog/3269917

odp禁止ipsec

1
2
3
4
5
6
7
8
9
10
11
12
13
	odp_init_t init_param;
 
	odp_init_param_init(&init_param);
	init_param.not_used.feat.ipsec = 1;
	init_param.not_used.feat.crypto = 1;
	init_param.not_used.feat.compress = 1;
	init_param.not_used.feat.tm = 1;
 
	if (0 != odp_init_global(&instance, &init_param, NULL))
	{
		DBG(("init odp global failed.\n"));
		return 0;
	}

5G备忘录

EPS中的PDN连接(搜不到原贴地址)
https://www.txrjy.com/thread-1134059-1-1.html

LTE基础知识概述
https://max.book118.com/html/2016/0706/47457520.shtm

MR数据应用
https://www.txrjy.com/thread-926805-1-1.html

LTEMR分析经验共享
https://www.docin.com/p-1543277673.html

FDD LTE无线网PCI和TA的设计
https://wenku.baidu.com/view/3a6903712e3f5727a5e96299.html

5G系统——5G QoS
https://blog.csdn.net/u010178611/article/details/81746532

5G边缘计算之会话及业务连续性(SSC)介绍
https://blog.csdn.net/openinfra/article/details/109812315

vmware linux共享文件夹未启动

1
2
3
4
# 若vmhgfs-fuse -e执行成功时执行
vmhgfs-fuse -o subtype=vmhgfs-fuse,allow_other /mnt/hgfs/
# mvhgfs-fuse -e 执行失败时执行
mount -f vmhgfs .host:/ /mnt/hgfs

如果还不行,比如更新内核后,就要重新加载linux.iso重装VMWareTools。

refer to: https://www.cnblogs.com/woodyoilove/p/8479458.html