转: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 theDarwin 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"
;;

更多相关文章

  1. android 代码连接 wifi
  2. android执行脚本语言完成root
  3. Android(安卓)socket通信app Server端
  4. Android(安卓)socket通信app Client端
  5. adb使用wifi无线连接调试Android设备
  6. RF Analyzer for Android(安卓)安卓平台连接HackRF的App
  7. Android:线性布局(LinearFrame)例子
  8. 弹出NumberPicker窗口,修改字体大小
  9. [置顶] Android基础--ConnectivityManager检查网络连接

随机推荐

  1. React-Native搭建报错:Unable to load scr
  2. Android(安卓)Gradle 多渠道打包
  3. ConstraintLayout + CardView + Space +
  4. Android Animation--->TweemAnimation运
  5. Android 开发记录 环境平台的搭建
  6. android 2.3源码 下载与编译 以前我让我
  7. Android Studio 如何切换sdk
  8. [置顶] Android手机点击查看手机电量Demo
  9. Android(安卓)Studio 手机运行时中文乱码
  10. android仿苹果分段按钮