Android অপারেটিং সিস্টেমে ifconfig, ip ও ip6tables-এর মতো স্ট্যান্ডার্ড Linux নেটওয়ার্কিং ইউটিলিটি
থাকে।
এইসব ইউটিলিটি সিস্টেম ইমেজে থাকে এবং সম্পূর্ণ Linux নেটওয়ার্কিং স্ট্যাকের
কনফিগারেশন চালু করে। Android 7.x এবং তার আগের যেকোনও ভার্সন রান করছে এমন ডিভাইসে,
ভেন্ডর কোডকে সরাসরি এইসব বাইনারি কল করার অনুমতি দেওয়া হয়, যার ফলে নিম্নলিখিত
সমস্যাগুলি দেখা দেয়:
- সিস্টেম ইমেজে নেটওয়ার্ক ইউটিলিটি আপডেট করা হয় বলে, সেগুলি স্থিতিশীল প্রয়োগ প্রদান করে না।
- নেটওয়ার্কিং ইউটিলিটির পরিধি এতটাই ব্যাপক যে, অনুমানযোগ্য আচরণ নিশ্চিত করার পাশাপাশি সিস্টেম ইমেজকে উন্নত করা কঠিন।
Android 8.0 ও তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসে, ভেন্ডর পার্টিশন একই থাকে তবে সিস্টেম পার্টিশন আপডেট পায়। এটি অর্জন করতে, Android 8.0 একটি স্থিতিশীল, ভার্সন করা ইন্টারফেসকে সংজ্ঞায়িত করার ক্ষমতা প্রদান করে, একই সাথে SELinux বিধিনিষেধ ব্যবহার করে ভেন্ডর এবং সিস্টেম ইমেজের পারস্পরিক নির্ভরতাকে একটি পরিচিত ভাল সেটে সীমাবদ্ধ রাখে।
Linux নেটওয়ার্কিং স্ট্যাক কনফিগার করতে, ভেন্ডররা প্ল্যাটফর্মের দেওয়া নেটওয়ার্ক কনফিগারেশন ইউটিলিটি ব্যবহার করতে পারেন, তবে এইসব ইউটিলিটিতে এখনও
HIDL ইন্টারফেস র্যাপার অন্তর্ভুক্ত নেই। এই ধরনের ইন্টারফেসকে সংজ্ঞায়িত করতে, 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
র্যাপার দ্বারা র্যাপ করা নেটওয়ার্কিং ইউটিলিটি দেখায়, যার মধ্যে এগুলি অন্তর্ভুক্ত:
ipiptablesip6tablesndctc
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 কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS)-এর মাধ্যমে এটি পরীক্ষা করা হয়।
- এছাড়াও, প্ল্যাটফর্ম SELinux নীতিতে ভেন্ডর প্রসেস থেকে সরাসরি ইউটিলিটি এক্সিকিউট করা (যেমন,
/system/bin/ip <FOO> <BAR>) নিষিদ্ধ। এই নিয়ম পরিবর্তন করা যাবে না এবং CTS-এ এটি পরীক্ষা করা হয়। - কোনও ভেন্ডর ডোমেন (প্রসেস) যা র্যাপার লঞ্চ করতে চায়, তাকে SELinux নীতিতে নিম্নলিখিত ডোমেন ট্রানজিশন নিয়ম যোগ করতে হবে:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper).
Netutils র্যাপার ফিল্টার
Linux নেটওয়ার্কিং স্ট্যাকের প্রায় সব দিক কনফিগার করতে র্যাপ করা ইউটিলিটি ব্যবহার করা যেতে পারে। তবে, স্থিতিশীল ইন্টারফেস মেইনটেন করা এবং সিস্টেম পার্টিশনে আপডেট করার অনুমতি দেওয়া সম্ভব কিনা তা নিশ্চিত করতে, কমান্ড লাইন আর্গুমেন্টের শুধুমাত্র নির্দিষ্ট কিছু কম্বিনেশন ব্যবহার করার অনুমতি দেওয়া হয়; অন্যান্য কমান্ড বাতিল করা হয়।
ভেন্ডর ইন্টারফেস ও চেইন
র্যাপারে ভেন্ডর ইন্টারফেস সংক্রান্ত ধারণা আছে। এগুলি হল ইন্টারফেস সাধারণত ভেন্ডর কোড দ্বারা পরিচালিত হয়, যেমন সেলুলার ডেটা ইন্টারফেস। সাধারণত, অন্যান্য ধরনের ইন্টারফেস (যেমন, ওয়াই-ফাই) HAL এবং ফ্রেমওয়ার্ক ম্যানেজ করে। র্যাপারটি নাম (রেগুলার এক্সপ্রেশন ব্যবহার করে) দ্বারা ভেন্ডর ইন্টারফেস শনাক্ত করে এবং ভেন্ডর কোডকে সেগুলিতে অনেক অপারেশন পারফর্ম করার অনুমতি দেয়। বর্তমানে, ভেন্ডর ইন্টারফেসগুলি হল:
- ইন্টারফেস যার নাম "oem" দিয়ে শেষ হয় এবং তারপরে একটি সংখ্যা থাকে, যেমন
oem0বাr_oem1234। - বর্তমান SOC এবং OEM ইমপ্লিমেন্টেশন দ্বারা ব্যবহৃত ইন্টারফেস, যেমন
rmnet_data[0-9]।
ফ্রেমওয়ার্কের মাধ্যমে সাধারণত ম্যানেজ করা ইন্টারফেসের নাম (যেমন
wlan0) কখনই ভেন্ডর ইন্টারফেস হয় না।
র্যাপারের ক্ষেত্রেও ভেন্ডর চেনের মতো একই ধারণা প্রযোজ্য। এগুলি iptables কমান্ডে
ব্যবহার করা হয় এবং নাম দিয়েও শনাক্ত করা যায়। বর্তমানে,
ভেন্ডর চেইন:
oem_দিয়ে শুরু করুন।- বর্তমান SOC এবং OEM ইমপ্লিমেন্টেশন দ্বারা ব্যবহার করা হয়, যেমন,
nm_বাqcom_-এ শুরু হওয়া চেইন।
অনুমোদিত কমান্ড
বর্তমানে অনুমোদিত কমান্ডের তালিকা নিচে দেওয়া হল। এক্সিকিউট করা কমান্ড লাইনে রেগুলার এক্সপ্রেশনের একটি সেটের মাধ্যমে
বিধিনিষেধ প্রয়োগ করা হয়। বিস্তারিত জানতে, system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp দেখুন।
ip
ip কমান্ডটি IP অ্যাড্রেস, রাউটিং, IPsec এনক্রিপশন এবং অন্যান্য নেটওয়ার্ক প্যারামিটার কনফিগার করতে ব্যবহৃত হয়। র্যাপার নিম্নলিখিত
কমান্ডগুলি ব্যবহার করার অনুমতি দেয়:
- ভেন্ডর-ম্যানেজড ইন্টারফেস থেকে IP অ্যাড্রেস যোগ করা বা সরানো।
- IPsec এনক্রিপশন কনফিগার করুন।
iptables এবং ip6tables
iptables এবং ip6tables কমান্ড ব্যবহার করে
ফায়ারওয়ালিং, প্যাকেট ম্যাঙ্গলিং, NAT এবং অন্যান্য প্রতি-প্যাকেট প্রসেসিং কনফিগার করা হয়।
র্যাপার নিম্নলিখিত কমান্ডের অনুমতি দেয়:
- ভেন্ডর চেইন যোগ করা ও মুছে দেওয়া।
- ভেন্ডর ইন্টারফেসে
(
-i) বা সেখান থেকে বের হওয়া (-o) প্যাকেটকে রেফার করে এমন যেকোনও চেনে নিয়ম যোগ করুন বা মুছুন। - অন্য যেকোনও চেনের যেকোনও পয়েন্ট থেকে ভেন্ডর চেনে জাম্প করুন।
ndc
ndc, netd ডেমনের সাথে যোগাযোগ করতে ব্যবহার করা হয়, যা Android-এ
বেশিরভাগ নেটওয়ার্ক কনফিগারেশন পারফর্ম করে। র্যাপার নিম্নলিখিত
কমান্ডের অনুমতি দেয়:
- OEM নেটওয়ার্ক (
oemXX) তৈরি ও ধ্বংস করে। - OEM নেটওয়ার্কে ভেন্ডর-ম্যানেজড ইন্টারফেস যোগ করুন।
- OEM নেটওয়ার্কে রুট যোগ করুন।
- গ্লোবালি এবং ভেন্ডর ইন্টারফেসে IP ফরওয়ার্ডিং চালু বা বন্ধ করুন।
tc
ভেন্ডর ইন্টারফেসে ট্রাফিক কিউয়িং ও শেপিং কনফিগার করতে tc কমান্ড ব্যবহার করা হয়
।