כלי תצורת מחסנית רשת

מערכת ההפעלה אנדרואיד מכילה כלי עזר סטנדרטיים לרשת לינוקס כגון ifconfig , ip ו- ip6tables . כלי עזר אלה נמצאים על תמונת המערכת ומאפשרים הגדרה של כל ערימת הרשת של לינוקס. במכשירים המריצים אנדרואיד 7.x ומטה, קוד הספק רשאי לקרוא ישירות לקבצים הבינאריים הללו, מה שמציג את הבעיות הבאות:

  • מכיוון שכלי עזר לרשת מתעדכנים בתמונת המערכת, הם אינם מספקים יישום יציב.
  • ההיקף של כלי השירות לרשת הוא כה רחב עד שקשה לפתח את תמונת המערכת תוך הבטחת התנהגות צפויה.

במכשירים עם אנדרואיד 8.0 ומעלה, מחיצת הספק נשארת זהה בזמן שמחיצת המערכת מקבלת עדכון. כדי להשיג זאת, אנדרואיד 8.0 מספקת את היכולת להגדיר ממשק יציב ובעל גרסאות תוך שימוש בהגבלות SELinux כדי לשמור על התלות ההדדית בין ספק ותמונת מערכת לסט ידוע.

ספקים יכולים להשתמש בכלי השירות לתצורת רשת המסופקים על ידי הפלטפורמה כדי להגדיר את ערימת הרשת של לינוקס, אך כלי השירות הללו עדיין אינם כוללים מעטפת ממשק HIDL. כדי להגדיר ממשק כזה, אנדרואיד 8.0 כוללת את הכלי netutils-wrapper-1.0 .

עטיפת Netutils

תוכנית השירות netutils Wrapper מספקת תת-קבוצה של תצורת ערימת הרשת של Linux שאינה מושפעת מעדכוני מחיצות המערכת. אנדרואיד 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 Compatibility Test Suite (CTS) .
  • הפעלה ישירה של כלי השירות (למשל, /system/bin/ip <FOO> <BAR> ) מתהליכי הספק אסורה גם במדיניות SELinux של הפלטפורמה. אסור לשנות כלל זה והוא נבדק נגדו ב-CTS.
  • כל דומיין (תהליך) של ספק שצריך להפעיל עטיפה חייב להוסיף את כלל מעבר הדומיין הבא במדיניות SELinux: domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper) .

מסנני עטיפת Netutils

ניתן להשתמש בכלי עזר עטופים כדי להגדיר כמעט כל היבט של ערימת הרשת של לינוקס. עם זאת, כדי להבטיח שניתן לשמור על ממשק יציב ולאפשר עדכונים למחיצת המערכת, רק שילובים מסוימים של ארגומנטים של שורת הפקודה מותרים; פקודות אחרות יידחו.

ממשקי ספקים ורשתות

למעטפת יש קונספט של ממשקי ספקים . אלו הם ממשקים המנוהלים בדרך כלל על ידי קוד ספק, כגון ממשקי נתונים סלולריים. בדרך כלל, סוגים אחרים של ממשקים (כגון 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 משמשות להגדרת חומת אש, עיבוד מנות, NAT ועיבוד אחר לכל מנה. העטיפה מאפשרת את הפקודות הבאות:

  • הוסף ומחק רשתות ספקים.
  • הוסף ומחק כללים בכל שרשרת המתייחסת לחבילות הנכנסות לתוך ( -i ) או מתוך ( -o ) ממשק ספק.
  • קפוץ לשרשרת ספקים מכל נקודה בכל שרשרת אחרת.

ndc

ndc משמש לתקשורת לדמון netd שמבצע את רוב תצורת הרשת באנדרואיד. העטיפה מאפשרת את הפקודות הבאות:

  • צור והרס רשתות OEM ( oemXX ).
  • הוסף ממשקים מנוהלים על ידי ספקים לרשתות OEM.
  • הוסף מסלולים לרשתות OEM.
  • הפעל או השבת את העברת ה-IP באופן גלובלי ובממשקי ספקים.

tc

הפקודה tc משמשת להגדרת תורים ועיצוב תנועה בממשקי הספק.