नेटवर्क स्टैक कॉन्फ़िगरेशन उपकरण

एंड्रॉइड ऑपरेटिंग सिस्टम में मानक लिनक्स नेटवर्किंग उपयोगिताएँ जैसे ifconfig , ip , और ip6tables शामिल हैं। ये उपयोगिताएँ सिस्टम छवि पर रहती हैं और संपूर्ण लिनक्स नेटवर्किंग स्टैक के कॉन्फ़िगरेशन को सक्षम करती हैं। एंड्रॉइड 7.x और उससे पहले के संस्करण चलाने वाले उपकरणों पर, विक्रेता कोड को इन बायनेरिज़ को सीधे कॉल करने की अनुमति है, जो निम्नलिखित समस्याएं प्रस्तुत करता है:

  • क्योंकि नेटवर्क उपयोगिताओं को सिस्टम छवि में अद्यतन किया जाता है, वे एक स्थिर कार्यान्वयन प्रदान नहीं करते हैं।
  • नेटवर्किंग उपयोगिताओं का दायरा इतना व्यापक है कि पूर्वानुमानित व्यवहार की गारंटी देते हुए सिस्टम छवि को विकसित करना मुश्किल है।

एंड्रॉइड 8.0 और उच्चतर चलाने वाले उपकरणों पर, विक्रेता विभाजन वही रहता है जबकि सिस्टम विभाजन को अपडेट प्राप्त होता है। इसे प्राप्त करने के लिए, एंड्रॉइड 8.0 एक स्थिर, संस्करणित इंटरफ़ेस को परिभाषित करने की क्षमता प्रदान करता है, जबकि विक्रेता और सिस्टम छवि की अन्योन्याश्रयता को एक ज्ञात अच्छे सेट पर बनाए रखने के लिए SELinux प्रतिबंधों का भी उपयोग करता है।

विक्रेता लिनक्स नेटवर्किंग स्टैक को कॉन्फ़िगर करने के लिए प्लेटफ़ॉर्म-प्रदत्त नेटवर्क कॉन्फ़िगरेशन उपयोगिताओं का उपयोग कर सकते हैं, लेकिन इन उपयोगिताओं में अभी तक HIDL इंटरफ़ेस रैपर शामिल नहीं है। ऐसे इंटरफ़ेस को परिभाषित करने के लिए, एंड्रॉइड 8.0 में netutils-wrapper-1.0 टूल शामिल है।

नेटुटिल्स रैपर

netutils रैपर उपयोगिता लिनक्स नेटवर्क स्टैक कॉन्फ़िगरेशन का एक सबसेट प्रदान करती है जो सिस्टम विभाजन अपडेट से प्रभावित नहीं होती है। एंड्रॉइड 8.0 में रैपर्स का संस्करण 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 रैपर द्वारा लिपटे नेटवर्किंग उपयोगिताओं को दिखाते हैं, जिनमें शामिल हैं:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

एंड्रॉइड 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 नीति में डोमेन परिवर्तन के बिना रैपर्स को निष्पादित करना निषिद्ध है। इस नियम को बदला नहीं जाना चाहिए और एंड्रॉइड संगतता परीक्षण सूट (सीटीएस) में इसका परीक्षण किया गया है।
  • विक्रेता प्रक्रियाओं से उपयोगिताओं को सीधे निष्पादित करना (उदाहरण के लिए, /system/bin/ip <FOO> <BAR> ) भी प्लेटफ़ॉर्म SELinux नीतियों में निषिद्ध है। इस नियम को बदला नहीं जाना चाहिए और सीटीएस में इसका परीक्षण किया जाता है।
  • किसी भी विक्रेता डोमेन (प्रक्रिया) को रैपर लॉन्च करने की आवश्यकता है, उसे SELinux नीति में निम्नलिखित डोमेन संक्रमण नियम जोड़ना होगा: domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper)

नेटुटिल्स रैपर फिल्टर

लिनक्स नेटवर्किंग स्टैक के लगभग किसी भी पहलू को कॉन्फ़िगर करने के लिए रैप्ड उपयोगिताओं का उपयोग किया जा सकता है। हालाँकि, यह सुनिश्चित करने के लिए कि एक स्थिर इंटरफ़ेस बनाए रखना और सिस्टम विभाजन में अपडेट की अनुमति देना संभव है, केवल कमांड लाइन तर्कों के कुछ संयोजनों की अनुमति है; अन्य आदेश अस्वीकार कर दिए जाएंगे.

विक्रेता इंटरफ़ेस और चेन

रैपर में विक्रेता इंटरफेस की अवधारणा है। ये आमतौर पर विक्रेता कोड द्वारा प्रबंधित इंटरफ़ेस होते हैं, जैसे सेलुलर डेटा इंटरफ़ेस। आमतौर पर, अन्य प्रकार के इंटरफेस (जैसे वाई-फाई) एचएएल और फ्रेमवर्क द्वारा प्रबंधित किए जाते हैं। रैपर विक्रेता इंटरफेस को नाम से पहचानता है (नियमित अभिव्यक्ति का उपयोग करके) और विक्रेता कोड को उन पर कई ऑपरेशन करने की अनुमति देता है। वर्तमान में, विक्रेता इंटरफ़ेस हैं:

  • ऐसे इंटरफ़ेस जिनके नाम "oem" से समाप्त होते हैं और उसके बाद एक संख्या आती है, जैसे oem0 या r_oem1234
  • वर्तमान SOC और OEM कार्यान्वयन द्वारा उपयोग किए जाने वाले इंटरफ़ेस, जैसे rmnet_data[0-9]

इंटरफ़ेस के नाम जो आमतौर पर फ़्रेमवर्क द्वारा प्रबंधित होते हैं (जैसे कि wlan0 ) कभी भी विक्रेता इंटरफ़ेस नहीं होते हैं।

रैपर में विक्रेता श्रृंखलाओं की एक समान अवधारणा है। इनका उपयोग iptables कमांड में किया जाता है और इन्हें नाम से भी पहचाना जाता है। वर्तमान में, विक्रेता शृंखलाएँ:

  • oem_ से प्रारंभ करें।
  • वर्तमान एसओसी और ओईएम कार्यान्वयन द्वारा उपयोग किया जाता है, उदाहरण के लिए, nm_ या qcom_ से शुरू होने वाली श्रृंखलाएं।

अनुमत आदेश

वर्तमान में अनुमत आदेश नीचे सूचीबद्ध हैं। निष्पादित कमांड लाइनों पर नियमित अभिव्यक्तियों के एक सेट के माध्यम से प्रतिबंध लागू किए जाते हैं। विवरण के लिए, system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp देखें।

आई पी

ip ​​कमांड का उपयोग आईपी पते, रूटिंग, आईपीसेक एन्क्रिप्शन और कई अन्य नेटवर्क मापदंडों को कॉन्फ़िगर करने के लिए किया जाता है। रैपर निम्नलिखित आदेशों की अनुमति देता है:

  • विक्रेता-प्रबंधित इंटरफ़ेस से आईपी पते जोड़ें और हटाएं।
  • IPsec एन्क्रिप्शन कॉन्फ़िगर करें.

iptables/ip6tables

iptables और ip6tables कमांड का उपयोग फ़ायरवॉलिंग, पैकेट मैंगलिंग, NAT और अन्य प्रति-पैकेट प्रोसेसिंग को कॉन्फ़िगर करने के लिए किया जाता है। रैपर निम्नलिखित आदेशों की अनुमति देता है:

  • विक्रेता शृंखलाएँ जोड़ें और हटाएँ।
  • किसी भी श्रृंखला में नियम जोड़ें और हटाएं जो विक्रेता इंटरफ़ेस में ( -i ) या ( -o ) से बाहर जाने वाले पैकेट को संदर्भित करता है।
  • किसी अन्य श्रृंखला में किसी भी बिंदु से विक्रेता श्रृंखला पर जाएं।

एनडीसी

ndc का उपयोग netd डेमॉन से संचार करने के लिए किया जाता है जो एंड्रॉइड पर अधिकांश नेटवर्क कॉन्फ़िगरेशन निष्पादित करता है। रैपर निम्नलिखित आदेशों की अनुमति देता है:

  • OEM नेटवर्क ( oemXX ) बनाएं और नष्ट करें।
  • OEM नेटवर्क में विक्रेता-प्रबंधित इंटरफ़ेस जोड़ें।
  • OEM नेटवर्क में रूट जोड़ें.
  • विश्व स्तर पर और विक्रेता इंटरफेस पर आईपी अग्रेषण सक्षम या अक्षम करें।

टीसी

tc कमांड का उपयोग विक्रेता इंटरफेस पर ट्रैफिक कतार और आकार देने को कॉन्फ़िगर करने के लिए किया जाता है।