Android Auto-IP support

40 篇文章 0 订阅
转:http://blog.csdn.net/stevenliyong/archive/2010/04/23/5520320.aspx


Link-local IPv4 addresses

There are some implementations available:

  • Windows and Mac OS have both supported link-local addresses since 1998. Apple released its open-source implementation in the Darwin bootp package.
  • Avahi contains an implementation of IPv4LL in the avahi-autoipd tool.
  • zcip (Zero-Conf IP)
  • BusyBox can embed a simple IPv4LL implementation
  • Stablebox, a fork from Busybox, offers a slightly modified IPv4LL implementation named llad.
  • zeroconf, a package based on Simple IPv4LL, a shorter implementation by Arthur van Hoff.[15]

The above implementations are all stand-alone daemons or plugins for DHCP clients that only deal with link-local IP addresses. Another approach is to include support in new or existing DHCP clients:




Android 自带的dhcpcd 本身是支持IPv4LL AutoIP 功能。
http://roy.marples.name/projects/dhcpcd/

但是Android Wifi 连接的时候还是不能获到 IPv4LL 定义的 AutoIP。

有两个原因导致Android Wifi 连接不能获得 IPv4LL 定义的 AutoIP。

1. Android framework 中 dhcp 的超时时间是30s 而 dhcpcd 默认的超时时间也是30s

frameworks/base/core/jni/android_net_NetUtils.cpp  

   
static jboolean android_net_utils_runDhcp(JNIEnv* env, jobjectclazz, jstring ifname, jobject info)  
{  
      return (jboolean)(run_dhcp(env, 30, ifname,info));  
}  


external/dhcpcd/dhcpcd.h
#define DEFAULT_TIMEOUT 30

Android framework 在30s超时后会强制断开wifi 连接,而dhcpcd只有在30s超时后才会作IPV4LL地址分配,

所以默认情况下永远也不会作IPV4LL.

2. dhcpcd 收到IPV4LL 时会设置Android dhcp失败
    setpropdhcp.${interface}.result"failed"

综上,如果要使Android 支持 AutoIP 功能。 需要作如下两个修改。

1. 修改

external/dhcpcd/dhcpcd.h
#define DEFAULT_TIMEOUT 10   

这样dhcpcd 10s 超时候继续有机会作IPv4LL 地址分配

2. 修改

/system/etc/dhcpcd/dhcpcd-hooks/95-configured

使得Android framework 认为IPV4LL 的结果作为dhcp 成功了。

#BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT)  
BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT|IPV4LL)  
      setpropdhcp.${interface}.ipaddress"${new_ip_address}"  
      setpropdhcp.${interface}.gateway    "${new_routers%% *}"  
      setpropdhcp.${interface}.mask          "${new_subnet_mask}"  
      setpropdhcp.${interface}.leasetime"${new_dhcp_lease_time}" 
      setpropdhcp.${interface}.server      "${new_dhcp_server_identifier}" 

      setpropdhcp.${interface}.result "ok" 
      ;;  

#EXPIRE|FAIL|IPV4LL|STOP)  
EXPIRE|FAIL|STOP)  
      setpropdhcp.${interface}.result "failed" 
      ;; 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值