כלי תצורה של מקבץ רשת

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

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

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

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

wrapper של Netutils

הכלי netutils wrapper מספק קבוצת משנה של Linux תצורה של מקבץ רשת שלא מושפעת מעדכוני מחיצות של המערכת. Android 8.0 מכיל גרסה 1.0 של רכיבי ה-wrapper, שמאפשרת להעביר את אותם ארגומנטים כמו הכלים העטופים, המותקנים במחיצת המערכת /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 wrapper, כולל:

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

מסנני wrapper של Netutils

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

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

ב-wrapper יש קונספט של ממשקים של ספקים אלה ממשקים שמנוהלים בדרך כלל באמצעות קוד ספק, כמו ממשקי נתונים סלולריים. בדרך כלל, סוגים אחרים של ממשקים (כמו Wi-Fi) מנוהלים על ידי תקן HAL, . ה-wrapper מזהה ממשקי ספק לפי שם (באמצעות ) ומאפשר לקוד הספק לבצע פעולות רבות לגביהם. נכון לעכשיו, ממשקי הספקים הם:

  • ממשקים שהשמות שלהם מסתיימים ב-oem ואחריו מספר, כמו oem0 או r_oem1234.
  • הממשקים שנמצאים בשימוש בהטמעות נוכחיות של SOC ו-OEM, כמו rmnet_data[0-9]

שמות של ממשקים שבדרך כלל מנוהלים על ידי ה-framework (כמו wlan0) הם אף פעם לא ממשקי ספקים.

ל-wrapper יש קונספט דומה של רשתות ספקים. אלה משמשים בפקודות iptables ומזוהים גם לפי שם. נכון לעכשיו, שרשראות ספקים:

  • מתחילים עם oem_.
  • נמצאים בשימוש בהטמעות נוכחיות של SOC ו-OEM, למשל רשתות שמתחילות ב- nm_ או qcom_.

פקודות מותרות

הפקודות שמותרות כרגע מפורטות למטה. ההגבלות מיושמות דרך קבוצה של ביטויים רגולריים בשורות הפקודה להרצה. פרטים נוספים זמינים אל system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp.

ip

הפקודה ip משמשת להגדרה של כתובות IP, ניתוב, IPsec הצפנה ומספר פרמטרים אחרים של הרשת. ה-wrapper מאפשר הפקודות הבאות:

  • להוסיף ולהסיר כתובות IP מממשקים שמנוהלים על ידי הספק.
  • הגדרה של הצפנת IPsec.

מכשירי iptable ו-ip6table

הפקודות iptables ו-ip6tables משמשות לביצוע להגדיר חומת אש, ניהול חבילות, NAT ועיבוד אחר לפי מנות. ה-wrapper מאפשר את הפקודות הבאות:

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

ndc

ndc משמש לתקשורת לדימון (daemon) של netd מבצע את רוב הגדרות הרשת ב-Android. ה-wrapper מאפשר פקודות:

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

tc

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