เครื่องมือกำหนดค่าสแต็คเครือข่าย

ระบบปฏิบัติการ 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 ใช้เพื่อกำหนดค่าการจัดคิวการรับส่งข้อมูลและการสร้างรูปร่างบนอินเทอร์เฟซของผู้ขาย