أدوات تكوين مكدس الشبكة

يحتوي نظام التشغيل 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 مجموعة فرعية من تكوين مكدس شبكة 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 والتوجيه وتشفير IPsec وعدد من معلمات الشبكة الأخرى. يسمح المجمع بالأوامر التالية:

  • إضافة وإزالة عناوين IP من الواجهات التي يديرها البائع.
  • تكوين تشفير IPsec.

iptables/ip6tables

يتم استخدام أوامر iptables و ip6tables لتكوين جدار الحماية وإدارة الحزم وNAT وغيرها من عمليات المعالجة لكل حزمة. يسمح المجمع بالأوامر التالية:

  • إضافة وحذف سلاسل البائعين.
  • قم بإضافة وحذف القواعد في أي سلسلة تشير إلى الحزم التي تدخل إلى ( -i ) أو خارج ( -o ) واجهة البائع.
  • انتقل إلى سلسلة البائعين من أي نقطة في أي سلسلة أخرى.

ndc

يتم استخدام ndc للتواصل مع البرنامج netd الذي يقوم بمعظم تكوينات الشبكة على Android. يسمح المجمع بالأوامر التالية:

  • إنشاء وتدمير شبكات OEM ( oemXX ).
  • إضافة واجهات يديرها البائع إلى شبكات OEM.
  • إضافة مسارات إلى شبكات OEM.
  • تمكين أو تعطيل إعادة توجيه IP عالميًا وعلى واجهات البائعين.

ح

يتم استخدام الأمر tc لتكوين قائمة انتظار حركة المرور وتشكيلها على واجهات البائعين.