ระบบปฏิบัติการ 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
กระดาษห่อ Netutils
ยูทิลิตี้ netutils
wrapper จัดเตรียมชุดย่อยของการกำหนดค่าสแต็กเครือข่าย Linux ที่ไม่ได้รับผลกระทบจากการอัปเดตพาร์ติชันระบบ Android 8.0 มี wrapper เวอร์ชัน 1.0 ซึ่งช่วยให้คุณส่งผ่านอาร์กิวเมนต์เดียวกันกับยูทิลิตี้ที่ wrap ซึ่งติดตั้งในพาร์ติชันระบบที่ /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
Symlinks แสดงยูทิลิตี้เครือข่ายที่หุ้มด้วย wrapper netutils
ซึ่งรวมถึง:
-
ip
-
iptables
-
ip6tables
-
ndc
-
tc
หากต้องการใช้ยูทิลิตี้เหล่านี้ใน Android 8.0 และสูงกว่า การใช้งานของผู้จำหน่ายจะต้องเป็นไปตามกฎต่อไปนี้:
- กระบวนการของผู้จำหน่ายจะต้องไม่ดำเนินการ
/system/bin/netutils-wrapper-1.0
โดยตรง การพยายามทำเช่นนั้นจะส่งผลให้เกิดข้อผิดพลาด - ยูทิลิตี้ทั้งหมดที่ห่อด้วย
netutils-wrapper-1.0
จะต้องเปิดใช้งานโดยใช้ symlink ตัวอย่างเช่น เปลี่ยนรหัสผู้ขายที่ทำสิ่งนี้ก่อนหน้านี้ (/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)
ตัวกรองกระดาษห่อของ Netutils
ยูทิลิตี้แบบรวมสามารถใช้เพื่อกำหนดค่าเกือบทุกด้านของสแต็กเครือข่าย Linux อย่างไรก็ตาม เพื่อให้แน่ใจว่าเป็นไปได้ที่จะรักษาอินเทอร์เฟซที่เสถียรและอนุญาตให้อัปเดตพาร์ติชันระบบ จึงอนุญาตให้ใช้อาร์กิวเมนต์บรรทัดคำสั่งผสมกันบางรายการเท่านั้น คำสั่งอื่นๆ จะถูกปฏิเสธ
อินเทอร์เฟซและเครือข่ายผู้ขาย
Wrapper มีแนวคิดเกี่ยวกับ อินเทอร์เฟซของผู้ขาย โดยทั่วไปแล้วอินเทอร์เฟซเหล่านี้จะได้รับการจัดการโดยรหัสผู้จำหน่าย เช่น อินเทอร์เฟซข้อมูลเซลลูลาร์ โดยทั่วไปแล้ว อินเทอร์เฟซประเภทอื่นๆ (เช่น Wi-Fi) จะได้รับการจัดการโดย HAL และเฟรมเวิร์ก Wrapper รู้จักอินเทอร์เฟซของผู้ขายตามชื่อ (โดยใช้นิพจน์ทั่วไป) และอนุญาตให้โค้ดของผู้ขายดำเนินการหลายอย่างกับอินเทอร์เฟซเหล่านั้น ปัจจุบันอินเทอร์เฟซของผู้ขายคือ:
- อินเทอร์เฟซที่ชื่อลงท้ายด้วย "oem" ตามด้วยตัวเลข เช่น
oem0
หรือr_oem1234
- อินเทอร์เฟซที่ใช้โดยการใช้งาน SOC และ OEM ในปัจจุบัน เช่น
rmnet_data[0-9]
ชื่อของอินเทอร์เฟซที่โดยทั่วไปได้รับการจัดการโดยเฟรมเวิร์ก (เช่น wlan0
) ไม่เคยเป็นอินเทอร์เฟซของผู้ขาย
กระดาษห่อมีแนวคิดที่คล้ายคลึงกันของ vendor chains สิ่งเหล่านี้ใช้ในคำสั่ง iptables
และยังรู้จักด้วยชื่ออีกด้วย ปัจจุบันกลุ่มผู้ขาย:
- เริ่มต้นด้วย
oem_
. - ถูกใช้โดยการใช้งาน SOC และ OEM ในปัจจุบัน เช่น เชนที่เริ่มต้นใน
nm_
หรือqcom_
คำสั่งที่ได้รับอนุญาต
คำสั่งที่อนุญาตในปัจจุบันมีดังต่อไปนี้ ข้อจำกัดถูกนำไปใช้ผ่านชุดของนิพจน์ทั่วไปบนบรรทัดคำสั่งที่ดำเนินการ สำหรับรายละเอียด โปรดดูที่ system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
ไอพี
คำสั่ง ip
ใช้เพื่อกำหนดค่าที่อยู่ IP, การกำหนดเส้นทาง, การเข้ารหัส IPsec และพารามิเตอร์เครือข่ายอื่นๆ จำนวนหนึ่ง Wrapper อนุญาตให้ใช้คำสั่งต่อไปนี้:
- เพิ่มและลบที่อยู่ IP ออกจากอินเทอร์เฟซที่ผู้ขายจัดการ
- กำหนดค่าการเข้ารหัส IPsec
iptables/ip6tables
คำสั่ง iptables
และ ip6tables
ใช้เพื่อกำหนดค่าไฟร์วอลล์, การจัดการแพ็กเก็ต, NAT และการประมวลผลต่อแพ็กเก็ตอื่นๆ Wrapper อนุญาตให้ใช้คำสั่งต่อไปนี้:
- เพิ่มและลบเครือข่ายผู้จัดจำหน่าย
- เพิ่มและลบกฎในห่วงโซ่ใดๆ ที่อ้างถึงแพ็กเก็ตที่เข้าสู่ (
-i
) หรือออกจาก (-o
) อินเทอร์เฟซของผู้ขาย - ข้ามไปยังเครือข่ายผู้ขายจากจุดใดก็ได้ในเครือข่ายอื่น
เอ็นดีซี
ndc
ใช้เพื่อสื่อสารกับ netd
daemon ที่ทำการกำหนดค่าเครือข่ายส่วนใหญ่บน Android Wrapper อนุญาตให้ใช้คำสั่งต่อไปนี้:
- สร้างและทำลายเครือข่าย OEM (
oemXX
) - เพิ่มอินเทอร์เฟซที่ผู้ขายจัดการให้กับเครือข่าย OEM
- เพิ่มเส้นทางไปยังเครือข่าย OEM
- เปิดหรือปิดใช้งานการส่งต่อ IP ทั่วโลกและบนอินเทอร์เฟซของผู้ขาย
ทีซี
คำสั่ง tc
ใช้เพื่อกำหนดค่าการจัดคิวการรับส่งข้อมูลและการสร้างรูปร่างบนอินเทอร์เฟซของผู้ขาย