नेटवर्क स्टैक कॉन्फ़िगरेशन टूल

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

  • नेटवर्क की सुविधाएं, सिस्टम इमेज में अपडेट की जाती हैं. इसलिए, ये सुविधाएं ठीक से काम नहीं करतीं.
  • नेटवर्किंग की सुविधाओं का दायरा इतना बड़ा है कि सिस्टम की इमेज को बेहतर बनाना मुश्किल है.

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

वेंडर, Linux नेटवर्किंग स्टैक को कॉन्फ़िगर करने के लिए, प्लैटफ़ॉर्म की ओर से दी गई नेटवर्क कॉन्फ़िगरेशन की सुविधाओं का इस्तेमाल कर सकते हैं. हालांकि, इन सुविधाओं में अब तक एचआईडीएल इंटरफ़ेस का कवर शामिल नहीं है. इस तरह के इंटरफ़ेस को तय करने के लिए, Android 8.0 में netutils-wrapper-1.0 टूल शामिल है.

Netutils रैपर

netutils रैपर यूटिलिटी, Linux नेटवर्क स्टैक कॉन्फ़िगरेशन का एक सबसेट उपलब्ध कराती है. इस पर सिस्टम के पार्टीशन के अपडेट का कोई असर नहीं पड़ता. Android 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

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 नीति के मुताबिक, डोमेन ट्रांज़िशन के बिना रैपर को लागू करने की अनुमति नहीं है. इस नियम में बदलाव नहीं किया जाना चाहिए. इसकी जांच, Android Compatibility Test Suite (CTS) में की जाती है.
  • सीधे तौर पर यूटिलिटी को चलाना (उदाहरण के लिए, /system/bin/ip <FOO> <BAR>) को वेंडर की प्रोसेस से ऐक्सेस करने पर भी पाबंदी है. इस नियम में बदलाव नहीं किया जाना चाहिए. साथ ही, इसकी जांच सीटीएस में की जाती है.
  • जिस वेंडर डोमेन (प्रोसेस) को कोई रैपर लॉन्च करना है उसे SELinux नीति में, डोमेन ट्रांज़िशन का यह नियम जोड़ना होगा: domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper).

Netutils रैपर फ़िल्टर

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

वेंडर इंटरफ़ेस और चेन

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

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

आम तौर पर, फ़्रेमवर्क (जैसे कि wlan0) से मैनेज किए जाने वाले इंटरफ़ेस के नाम, वेंडर इंटरफ़ेस नहीं होते.

रैपर में वेंडर चेन का कॉन्सेप्ट मिलता-जुलता है. इनका इस्तेमाल iptables निर्देशों में किया जाता है. साथ ही, इन्हें नाम से भी पहचाना जाता है. फ़िलहाल, वेंडर चेन:

  • oem_ से शुरू करें.
  • इनका इस्तेमाल, मौजूदा SOC और OEM लागू करने के लिए किया जाता है. उदाहरण के लिए, nm_ या qcom_ से शुरू होने वाली चेन.

इस्तेमाल किए जा सकने वाले निर्देश

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

ip

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

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

iptables और ip6tables

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

  • वेंडर चेन जोड़ना और मिटाना.
  • किसी भी चेन में नियम जोड़ें और मिटाएं. यह चेन, वेंडर इंटरफ़ेस में पैकेट भेजने (-i) या पाने (-o) से जुड़ी होनी चाहिए.
  • किसी भी चेन में किसी भी बिंदु से वेंडर चेन पर जाएं.

ndc

ndc का इस्तेमाल, netd डेमन से संपर्क करने के लिए किया जाता है. यह डेमन, Android पर ज़्यादातर नेटवर्क कॉन्फ़िगरेशन करता है. रैपर में ये कमांड इस्तेमाल किए जा सकते हैं:

  • OEM नेटवर्क बनाना और उन्हें मिटाना (oemXX).
  • OEM नेटवर्क में, वेंडर मैनेज किए जाने वाले इंटरफ़ेस जोड़ें.
  • OEM नेटवर्क में रूट जोड़ें.
  • दुनिया भर में और वेंडर इंटरफ़ेस पर, आईपी फ़ॉरवर्डिंग की सुविधा को चालू या बंद करें.

tc

tc कमांड का इस्तेमाल, वेंडर इंटरफ़ेस पर ट्रैफ़िक की कतार और शेपिंग को कॉन्फ़िगर करने के लिए किया जाता है.