为了让Linux手机可以支持多个PDP,需要让不同的应用的数据包走不同的路由/网卡,可以通过两种方式实现:
- 为每个应用增加特定路由,或
- 让应用可以绑定网卡(Net Device)
在路由表中增加特定路由的方式很繁琐,而且容易出错,导致路由表混乱。而绑定网卡方式,很清晰而且不受路由表限制。
Linux Kernel的默认代码,会检查调用者是否有CAP_NET_RAW能力,如果没有该能力,绑定网卡的时候,系统会返回错误-EPERM。我们需要做的是:任何应用能绑定网卡。因此需要对内核代码sock_bindtodevice()函数进行简单的修改,如下:以Linux 2.6.32为例
修改Kernel以后,Native应用就可以通过调用setsockopt来绑定网卡了,示例代下:

为了在Linux手机上支持多个PDP,允许不同应用数据包走不同路由,文章介绍了通过修改Kernel代码去除Socket绑定设备权限检查的方法,以避免路由表混乱。详细展示了修改Kernel的sock.c文件和使用setsockopt进行网卡绑定的示例。
2606

被折叠的 条评论
为什么被折叠?



