מערכת ההפעלה של 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
משמשת להגדרה וליצירת תורים לתעבורת נתונים.
בממשקים של ספקים.