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