728x90
다음은 “IPv6(또는 기본 게이트웨이 등 핵심 이웃) 도달성 상실 → Wi-Fi 측에서 연결을 끊는” 흐름이 Android 10(Q) 소스에 어떻게 구현되어 있는지, 파일/라인 근거
1) 커널 NUD 실패를 감지해 “프로비저닝 상실(LOST_PROVISIONING)”을 통지
- 파일: frameworks/base/services/net/java/android/net/ip/IpReachabilityMonitor.java
- 동작 개요(NUD_FAILED → 프로비저닝 상실 시 알림): L122–L133. (android.googlesource.com)
- 실제 통지 지점: handleNeighborLost() 에서 ProvisioningChange.LOST_PROVISIONING이면 mCallback.notifyLost(...) 호출: L350–L357. (android.googlesource.com)
2) IpClient → 프레임워크 콜백: “reachability lost”를 상위(예: Wi-Fi)로 전달
- 파일: frameworks/base/services/net/java/android/net/ip/IIpClientCallbacks.aidl (Android 10 release 브랜치)
- 콜백 정의: void onReachabilityLost(in String logMsg); → IpReachabilityMonitor가 알리면 상위에 전달: 해당 선언부. (android.googlesource.com)
3) Wi-Fi(ClientModeImpl) 쪽에서 “도달성 상실 시 끊을지 여부” 플래그 및 처리
- 파일: frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeImpl.java (Android 10 시점 코드)
- 기능 토글 플래그: private boolean mIpReachabilityDisconnectEnabled = true; → 기본값으로 도달성 상실 시 연결 해제 동작 허용: L218 부근. (android.googlesource.com)
참고로 이 플래그에 대응하는 셸 헬프(과거 버전부터 존재): “get-ipreach-disconnect – Gets setting of CMD_IP_REACHABILITY_LOST events triggering disconnects” 라고 안내합니다. 이 기능이 “도달성 상실 이벤트가 들어오면 끊을 수 있다”는 취지임을 뒷받침합니다. (android.googlesource.com)
요약된 소스 레벨 플로우 (Android 10)
- NUD 실패로 기본 게이트웨이/온링크 DNS 등 “중요 이웃”이 끊겼다고 판단되면, IpReachabilityMonitor가 프로비저닝 상실을 계산하고 notifyLost(...)를 호출합니다. (위 1) (android.googlesource.com)
- IpClient가 IIpClientCallbacks.onReachabilityLost(...) 를 통해 상위(예: Wi-Fi 상태머신)로 전달합니다. (위 2) (android.googlesource.com)
- Wi-Fi의 ClientModeImpl는 mIpReachabilityDisconnectEnabled 가 true이면 이 이벤트를 연결 해제로 처리하도록 설계되어 있습니다. (위 3) (android.googlesource.com)
728x90