يحتوي نظام التشغيل Android على أدوات مساعدة عادية لشبكات Linux.
مثل ifconfig
وip
وip6tables
.
تتوفَّر هذه البرامج في صورة النظام وتفعِّل إعداد
مكدس شبكات Linux بأكمله. على الأجهزة التي تعمل بنظام التشغيل Android 7.x والإصدارات الأقدم،
رمز البائع باستدعاء هذه البرامج الثنائية مباشرة، والتي تعرض
المشكلات التالية:
- نظرًا لأن أدوات الشبكة يتم تحديثها في صورة النظام، لا يمكنها وتوفير تنفيذ مستقر.
- نطاق مرافق الشبكات واسع جدًا لدرجة أنّه من الصعب تطويره صورة النظام مع ضمان سلوك يمكن التنبؤ به.
في الأجهزة التي تعمل بنظام التشغيل Android 8.0 والإصدارات الأحدث، يظل قسم المورّد كما هو بينما يتم تحديث قسم النظام. لتحقيق ذلك، يتوفر Android 8.0 توفر القدرة على تحديد واجهة مستقرة ذات إصدارات مع استخدام قيود SELinux للحفاظ على ترابط صورة المورد والنظام مجموعة جيدة معروفة.
يمكن للمورّدين استخدام أدوات إعداد الشبكة التي توفّرها المنصّة من أجل
تكوين مكدس شبكات Linux، إلا أن هذه الأدوات لا تتضمن حتى الآن
برنامج تضمين واجهة HIDL لتحديد مثل هذه الواجهة، يتضمن الإصدار Android 8.0
netutils-wrapper-1.0
.
برنامج تضمين Netutils
توفّر أداة تضمين netutils
مجموعة فرعية من نظام التشغيل Linux
إعدادات تكديس الشبكة التي لا تتأثر بتحديثات قسم النظام.
ويتضمن Android 8.0 الإصدار 1.0 من برامج تضمين، ما يتيح لك تمرير
نفس الوسيطات مثل الأدوات المساعدة المضمّنة، والمثبتة في قسم النظام في
/system/bin
على النحو التالي:
u:object_r:system_file:s0 /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0
تعرض الروابط الرمزية برامج خدمات الشبكات التي يتم تضمينها في ملف netutils
والتي تشمل ما يلي:
ip
iptables
ip6tables
ndc
tc
لاستخدام هذه الأدوات في الإصدار Android 8.0 والإصدارات الأحدث، يجب تنفيذ إجراءات المورّدين تلتزم بالقواعد التالية:
- يجب عدم تنفيذ العمليات التي يجريها المورّد.
/system/bin/netutils-wrapper-1.0
مباشرةً يحاول إجراء ذلك يؤدي إلى حدوث خطأ. - يجب إطلاق جميع الخدمات التي يشملها
netutils-wrapper-1.0
. باستخدام الروابط الرمزية الخاصة بهم. على سبيل المثال، قم بتغيير رمز البائع الذي قام بذلك قبل (/system/bin/ip <FOO> <BAR>
) إلى/system/bin/ip-wrapper-1.0 <FOO> <BAR>
- يُحظر تنفيذ برامج التضمين بدون نقل النطاق في النظام الأساسي سياسة SELinux. يجب عدم تغيير هذه القاعدة واختبارها في مجموعة اختبار التوافق مع Android (CTS)
- تنفيذ المرافق بشكل مباشر (على سبيل المثال،
/system/bin/ip <FOO> <BAR>
) من عمليات المورِّد أيضًا في سياسات SELinux على النظام الأساسي. يجب ألا تكون هذه القاعدة ويتم اختباره في CTS. - أي مجال لبائع (عملية) يحتاج إلى تشغيل برنامج تضمين يجب أن يضيف
قاعدة نقل النطاق التالية في سياسة SELinux:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
فلاتر برنامج تضمين Netutils
يمكن استخدام الأدوات الملفوفة لتكوين أي جانب تقريبًا من جوانب Linux مكدس الشبكات. ومع ذلك، لضمان إمكانية الحفاظ على استقرار وتسمح بالتحديثات لقسم النظام، إلا أن هناك مجموعات معينة يسمح بوسيطات سطر الأوامر؛ يتم رفض الأوامر الأخرى.
واجهات المورّدين والسلاسل
يتضمن برنامج التضمين مفهوم واجهات المورّدين. هذه هي الواجهات تتم إدارتها عادةً من خلال رمز المورِّد، مثل واجهات بيانات شبكة الجوّال. عادةً، تتم إدارة الأنواع الأخرى من الواجهات (مثل Wi-Fi) بواسطة HALs إطار العمل. يتعرف برنامج التضمين على واجهات الموردين حسب الاسم (باستخدام رمز ) وتسمح لرمز البائع بإجراء العديد من العمليات عليها. في الوقت الحالي، تشمل واجهات المورّدين ما يلي:
- الواجهات التي تنتهي أسماؤها بـ "oem" متبوعًا برقم، مثل
oem0
أوr_oem1234
- الواجهات المستخدمة في عمليات التنفيذ الحالية لشركات SOC وOEM، مثل
rmnet_data[0-9]
أسماء الواجهات التي تتم إدارتها عادةً من خلال إطار العمل (مثل
wlan0
) ليست واجهات لموردين أبدًا.
يمتلك برنامج التضمين مفهومًا مشابهًا وهو سلاسل المورّدين. يتم استخدام هذه
في iptables
أوامر ويتم التعرّف عليها أيضًا بالاسم. حاليًا،
سلاسل البائعين:
- ابدأ بـ
oem_
. - أن يتم استخدامها في عمليات التنفيذ الحالية لشركات SOC وOEM، مثل السلاسل التي تبدأ في
nm_
أوqcom_
الطلبات المسموح بها
في ما يلي الأوامر المسموح بها حاليًا. يتم تنفيذ القيود من خلال
مجموعة من التعبيرات العادية على أسطر الأوامر التي تم تنفيذها. للحصول على التفاصيل، يُرجى الرجوع إلى
إلى system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
.
ip
يُستخدَم الأمر ip
لضبط عناوين IP والتوجيه وIPsec.
والتشفير وعدد من معلمات الشبكة الأخرى. يسمح برنامج التضمين بـ
الأوامر التالية:
- إضافة عناوين IP وإزالتها من الواجهات التي يديرها المورّد.
- اضبط تشفير IPsec.
أجهزة iptables وip6tables
يُستخدم الأمران iptables
وip6tables
للأغراض التالية:
تهيئة جدار الحماية، ومعالجة الحزم، وترجمة عنوان الشبكة، وعمليات المعالجة الأخرى لكل حزمة.
يسمح برنامج التضمين بالأوامر التالية:
- إضافة سلاسل البائعين وحذفها
- إضافة قواعد وحذفها في أي سلسلة تشير إلى الحزم التي تدخل
(
-i
) أو من (-o
) واجهة مورّد. - الانتقال إلى سلسلة البائعين من أي نقطة في أي سلسلة أخرى
رقم ndc
تُستخدم ndc
للاتصال بالخادم الخفي لـ netd
الذي
يتم تنفيذ معظم إعدادات الشبكة على نظام التشغيل Android. يسمح برنامج تضمين ما يلي
الأوامر:
- إنشاء شبكات المصنّعين الأصليين لها وتدميرها (
oemXX
) - إضافة واجهات يديرها المورّد إلى شبكات المصنّعين الأصليين
- إضافة مسارات إلى شبكات المصنّعين الأصليين
- يمكنك تفعيل إعادة توجيه عنوان IP أو إيقافها على مستوى العالم وعلى واجهات المورّدين.
tc
يُستخدَم الأمر tc
لضبط قوائم انتظار حركة المرور وتشكيلها.
على واجهات البائعين.