پشته شبکه

Network Stack یک ماژول Mainline قابل به‌روزرسانی است که تضمین می‌کند اندروید می‌تواند با استانداردهای در حال تحول شبکه سازگار شود و امکان همکاری با پیاده‌سازی‌های جدید را فراهم می‌کند. به عنوان مثال، به‌روزرسانی‌های مربوط به تشخیص پورتال‌های تحت پوشش و کد ورود به سیستم به اندروید اجازه می‌دهد تا با مدل‌های در حال تغییر پورتال‌های تحت پوشش به‌روز بماند و به‌روزرسانی‌های APF به اندروید اجازه می‌دهد تا با رایج شدن انواع جدید بسته‌ها، در مصرف برق Wi-Fi صرفه‌جویی کند.

اجزای شامل شده

ماژول Network Stack شامل اجزای زیر است. در دستگاه‌هایی که از این ماژول استفاده می‌کنند، این سرویس‌ها به فرآیند متفاوتی منتقل شده‌اند و از طریق یک رابط AIDL پایدار قابل دسترسی هستند.

  • سرویس‌های IP. IpClient (که قبلاً IpManager ) مؤلفه‌ای است که وظیفه تأمین و نگهداری لایه IP را بر عهده دارد. در اندروید ۹، این مؤلفه قبلاً توسط مؤلفه‌هایی مانند بلوتوث به صورت پردازش متقابل و توسط مؤلفه‌هایی مانند Wi-Fi به صورت پردازش در حال انجام استفاده می‌شد. DhcpClient آدرس‌های IP را از سرورهای DHCP دریافت می‌کند تا بتوان آنها را به رابط‌ها اختصاص داد.

  • NetworkMonitor. کامپوننت NetworkMonitor هنگام اتصال به یک شبکه جدید یا در صورت خرابی شبکه، هنگام شناسایی پورتال‌های تحت کنترل و هنگام اعتبارسنجی شبکه‌ها، دسترسی به اینترنت را آزمایش می‌کند.

  • برنامه ورود به پورتال‌های تحت کنترل. یک برنامه از پیش نصب شده که وظیفه مدیریت ورود به پورتال‌های تحت کنترل را بر عهده دارد. این برنامه از اندروید ۵.۰ به صورت جداگانه وجود داشته است، اما با NetworkMonitor تعامل دارد تا برخی از انتخاب‌های کاربر را به سیستم ارسال کند.

مسیرهای آسیب‌دیده

مسیرهایی که توسط اصلاح‌کننده به ماژول Network Stack منتقل شده‌اند، در زیر فهرست شده‌اند.

  • سرویس‌های IP. در frameworks/base/services/net/java/android/net/ :

    • apf
    • dhcp
    • ip
    • netlink
    • util (تا حدی)
  • تشخیص و ورود به پورتال تحت کنترل. در frameworks/base/ :

    • core/java/android/net/captiveportal/
    • services/core/java/com/android/server/connectivity/NetworkMonitor.java
    • packages/CaptivePortalLogin/*

محل جدید کد منتقل شده در packages/modules/NetworkStack ، packages/modules/CaptivePortalLogin و برخی مکان‌های مشترک دیگر است. مسیرهای فوق به محل فایل‌ها قبل از انتقال به آنجا برای Mainline اشاره دارند. فایل‌های موجود در packages/modules/NetworkStack و packages/modules/CaptivePortalLogin بخشی از ماژول Mainline هستند و قابل تغییر نیستند.

قالب بسته

ماژول Network Stack شامل اجزای زیر با فرمت APK است:

  • خدمات آی‌پی
  • ورود به پورتال مخفی ( com.google.android.captiveportallogin )

این ماژول با ماژول Network Stack Permission Config همراه است که یک فایل APK از پیش نصب شده است و مجوزهای لازم برای اجزای Network Stack را تعریف می‌کند.

وابستگی‌ها

ماژول Network Stack به موارد زیر بستگی دارد:

  • متدهای @hide با دسترسی ویژه در سرور سیستم (مثلاً در IConnectivityManager.aidl ). این APIها با دسترسی @SystemApi ساخته شده و به طور مناسب محافظت شده‌اند تا ماژول Mainline به آنها دسترسی داشته باشد اما سایر برنامه‌های دارای دسترسی ویژه نتوانند به آنها دسترسی داشته باشند (مثلاً با استفاده از یک مجوز امضای جدید).

  • اتصال IPCها به netd که در INetd.aidl تعریف شده است. این رابط به AIDL پایدار تبدیل شده و تحت آزمایش‌های انطباق قرار دارد.