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