يحتوي نظام التشغيل Android على أدوات مساعدة عادية لشبكات Linux
مثل ifconfig
وip
وip6tables
.
تُثبَّت هذه الأدوات المساعدة في صورة النظام وتتيح ضبط
حزمة الشبكة الكاملة في Linux. على الأجهزة التي تعمل بالإصدار 7.x من نظام التشغيل Android والإصدارات الأقدم،
يُسمح لرمز المورّد بالاتّصال بهذه الملفات الثنائية مباشرةً، ما يؤدي إلى المشكلات التالية:
- وبما أنّ أدوات الشبكة يتم تحديثها في صورة النظام، فإنّها لا توفّر تنفيذًا ثابتًا.
- إنّ نطاق أدوات الشبكات واسع جدًا، لذا من الصعب تطوير صورة النظام مع ضمان السلوك المتوقّع.
على الأجهزة التي تعمل بالإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث، يظل قسم المورّد كما هو بينما يتلقّى قسم النظام تحديثًا. لتحقيق ذلك، يوفّر نظام التشغيل Android 8.0 إمكانية تحديد واجهة ثابتة ومُحدَّدة الإصدار مع استخدام قيود SELinux أيضًا للحفاظ على الاعتماد المتبادل بين صورة المورّد وصورة النظام ضمن مجموعة معروفة وصالحة.
يمكن للمورّدين استخدام برامج ضبط الشبكة المقدَّمة من النظام الأساسي لأجل
ضبط حِزمة شبكة Linux، ولكن لا تتضمّن هذه البرامج
حزمة واجهة HIDL. لتحديد واجهة كهذه، يتضمّن Android 8.0 أداة
netutils-wrapper-1.0
.
برنامج تضمين Netutils
توفّر الأداة البرمجية netutils
مجموعة فرعية من إعدادات حِزمة Linux
الشبكة التي لا تتأثر بتعديلات قسم النظام.
يتضمّن الإصدار 8.0 من نظام التشغيل Android الإصدار 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) من خلال واجهات HAL و الإطار. يتعرّف الغلاف على واجهات المورّدين بالاسم (باستخدام تعبير برمجي عادي) ويسمح لرمز المورّد بتنفيذ العديد من العمليات عليها. في الوقت الحالي، واجهات المورّدين هي:
- الواجهات التي تنتهي أسماؤها بـ "oem" متبوعًا برقم، مثل
oem0
أوr_oem1234
- الواجهات المستخدَمة في عمليات تنفيذ SOC وOEM الحالية، مثل
rmnet_data[0-9]
إنّ أسماء الواجهات التي يُدارها إطار العمل عادةً (مثل
wlan0
) لا تكون أبدًا واجهات تابعة لمورّد.
يتضمّن الغلاف مفهومًا مشابهًا لسلاسل المورّدين. يتم استخدامها
في أوامر iptables
ويتم التعرّف عليها أيضًا بالاسم. في الوقت الحالي،
توفّر سلاسل المورّدين:
- ابدأ بـ
oem_
. - يتم استخدامها في عمليات التنفيذ الحالية لنظام التشغيل SOC والشركة المصنّعة الأصلية للجهاز، مثل السلاسل التي تبدأ بالرقم
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
لضبط إعدادات وضع الزيارات في قائمة الانتظار وتشكيلها
على واجهات المورّدين.