ระบบปฏิบัติการ 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
ยูทิลิตี Wrapper netutils
จะมีชุดย่อยของ Linux
การกำหนดค่าสแต็กเครือข่ายที่ไม่ได้รับผลกระทบจากการอัปเดตพาร์ติชันระบบ
Android 8.0 มี Wrapper เวอร์ชัน 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
Symlink แสดงยูทิลิตีเครือข่ายที่รวมโดย 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>
- ไม่อนุญาตให้เรียกใช้ Wrapper โดยไม่เปลี่ยนโดเมนในแพลตฟอร์ม นโยบาย 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]
ชื่อของอินเทอร์เฟซที่มักจะจัดการโดยเฟรมเวิร์ก (เช่น
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
) อินเทอร์เฟซของผู้ให้บริการ - ข้ามไปยังเชนผู้ให้บริการจากจุดใดก็ได้ในเชนอื่นๆ
NCC
ระบบใช้ ndc
เพื่อสื่อสารกับ Daemon netd
ซึ่ง
กำหนดค่าเครือข่ายส่วนใหญ่ใน Android Wrapper จะทำสิ่งต่อไปนี้ได้
คำสั่ง:
- สร้างและทำลายเครือข่าย OEM (
oemXX
) - เพิ่มอินเทอร์เฟซที่จัดการโดยผู้ให้บริการในเครือข่าย OEM
- เพิ่มเส้นทางไปยังเครือข่าย OEM
- เปิดหรือปิดใช้การส่งต่อ IP ทั่วโลกและในอินเทอร์เฟซของผู้ให้บริการ
tc
คำสั่ง tc
ใช้เพื่อกำหนดค่าการจัดคิวและการกำหนดรูปแบบการรับส่งข้อมูล
ในอินเทอร์เฟซของผู้ให้บริการ