微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 如何在关机或关闭Wifi前发送DHCP release

如何在关机或关闭Wifi前发送DHCP release

时间:10-02 整理:3721RD 点击:

[DESCRIPTION]

默认情况下,dhcp租得的ip不会及时release, 因此有些客户需要在关机或关闭Wifi前发送DHCP release。

[SOLUTION]

修改方案如下:
1, alps\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\core\java\android\net\NetworkUtils.java
public native static String getDhcpError();
后添加
public native static void sendRelease(String interfaceName);
2, alps\frameworks\base\core\jni\android_net_NetUtils.cpp
1)该文件的最后添加
void dhcp_send_release(const char* iface);
2)添加
static void android_net_utils_sendRelease(JNIEnv* env, jobject clazz, jstring ifname)
{
const char *nameStr = env->GetStringUTFChars(ifname, NULL);
::dhcp_send_release(nameStr);
env->ReleaseStringUTFChars(ifname, nameStr);
}
3){ "stopDhcp", "(Ljava/lang/String;)Z", (void *)android_net_utils_stopDhcp },后添加
{ "sendRelease", "(Ljava/lang/String;)V", (void *)android_net_utils_sendRelease },
3,alps\frameworks\base\services\java\com\android\server\power\ShutdownThread.java
1)添加
import android.net.NetworkUtils;
2) public void run() {方法的
checkShutdownFlow();
这行代码前添加
NetworkUtils.sendRelease("wlan0");
4, \alps\system\core\include\netutils\dhcp.h
__BEGIN_DECLS后添加
//begin
// add send release function for shutdown.
extern void dhcp_send_release(const char* iface);
//end
5, \alps\system\core\libnetutils\dhcp_utils.c
1)
#include <cutils/properties.h>
后添加
//begin
// add send release function for shutdown.
// add debug method
#include <errno.h>
#include <fcntl.h>
#ifdef ANDROID
#define LOG_TAG "DhcpUtils"
#include <cutils/log.h>
#else
#include <stdio.h>
#include <string.h>
#define ALOGD printf
#define ALOGE printf
#endif
//end
2)文件的最后添加
//begin
//at the bottom of file
// add send release function for shutdown.
void dhcp_send_release(const char* iface)
{
pid_t pid;
if (iface == NULL)
return;
char pidpropname[PROPERTY_KEY_MAX];
char pidpropvalue[PROPERTY_VALUE_MAX];
if (snprintf(pidpropname, sizeof(pidpropname), "dhcp.%s.pid", iface)
>=PROPERTY_KEY_MAX)
{
ALOGE("pid string is too long.");
return;
}
property_get(pidpropname, pidpropvalue, NULL);
if (strlen(pidpropvalue) == 0)
{
ALOGE("Get prop:pid error.");
return;
}
pid = atoi(pidpropvalue);
ALOGD("Send release signal to %d", pid);
if (kill(pid, SIGHUP) == -1)
{
ALOGE("send SIGHUP to %d failed.", pid);
}
}
//end
6.frameworks/base/wifi/java/android/net/wifi/WifiStateMachine.java文件
1)添加import android.net.NetworkUtils;
2)在class SupplicantStoppingState extends State的代码handleNetworkDisconnect()之前加上
NetworkUtils.sendRelease("wlan0");

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top