অ্যান্ড্রয়েড অপারেটিং সিস্টেমে স্ট্যান্ডার্ড লিনাক্স নেটওয়ার্কিং ইউটিলিটি রয়েছে যেমন ifconfig
, ip
, এবং ip6tables
। এই ইউটিলিটিগুলি সিস্টেম ইমেজে থাকে এবং সমগ্র লিনাক্স নেটওয়ার্কিং স্ট্যাকের কনফিগারেশন সক্ষম করে। Android 7.x এবং তার নিচের সংস্করণে চলমান ডিভাইসগুলিতে, বিক্রেতা কোডকে এই বাইনারিগুলিকে সরাসরি কল করার অনুমতি দেওয়া হয়, যা নিম্নলিখিত সমস্যাগুলি উপস্থাপন করে:
- যেহেতু নেটওয়ার্ক ইউটিলিটিগুলি সিস্টেম ইমেজে আপডেট করা হয়, তারা একটি স্থিতিশীল বাস্তবায়ন প্রদান করে না।
- নেটওয়ার্কিং ইউটিলিটিগুলির পরিধি এত বিস্তৃত যে অনুমানযোগ্য আচরণের গ্যারান্টি দেওয়ার সময় সিস্টেমের চিত্রটি বিকশিত করা কঠিন।
অ্যান্ড্রয়েড 8.0 এবং উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে, সিস্টেম পার্টিশন আপডেট পাওয়ার সময় ভেন্ডর পার্টিশন একই থাকে। এটি অর্জনের জন্য, অ্যান্ড্রয়েড 8.0 একটি স্থিতিশীল, সংস্করণযুক্ত ইন্টারফেস সংজ্ঞায়িত করার ক্ষমতা প্রদান করে এবং একটি পরিচিত ভাল সেটে বিক্রেতা এবং সিস্টেম চিত্রের আন্তঃনির্ভরতা রাখতে SELinux সীমাবদ্ধতা ব্যবহার করে।
লিনাক্স নেটওয়ার্কিং স্ট্যাক কনফিগার করতে বিক্রেতারা প্ল্যাটফর্ম-প্রদত্ত নেটওয়ার্ক কনফিগারেশন ইউটিলিটিগুলি ব্যবহার করতে পারে, তবে এই ইউটিলিটিগুলিতে এখনও HIDL ইন্টারফেস র্যাপার অন্তর্ভুক্ত করা হয়নি। এই ধরনের একটি ইন্টারফেস সংজ্ঞায়িত করতে, Android 8.0- netutils-wrapper-1.0
টুল রয়েছে।
Netutils মোড়ক
netutils
wrapper ইউটিলিটি Linux নেটওয়ার্ক স্ট্যাক কনফিগারেশনের একটি উপসেট প্রদান করে যা সিস্টেম পার্টিশন আপডেট দ্বারা প্রভাবিত হয় না। অ্যান্ড্রয়েড 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 নীতিতে ডোমেন ট্রানজিশন ছাড়াই র্যাপার চালানো নিষিদ্ধ। এই নিয়মটি অবশ্যই পরিবর্তন করা যাবে না এবং Android সামঞ্জস্য পরীক্ষা স্যুট (CTS) এর বিরুদ্ধে পরীক্ষা করা হবে।
- বিক্রেতা প্রক্রিয়া থেকে সরাসরি ইউটিলিটিগুলি চালানো (যেমন,
/system/bin/ip <FOO> <BAR>
) প্লাটফর্ম SELinux নীতিতেও নিষিদ্ধ। এই নিয়ম পরিবর্তন করা উচিত নয় এবং CTS-এর বিরুদ্ধে পরীক্ষা করা হয়। - যেকোন ভেন্ডর ডোমেইন (প্রসেস) যাকে একটি মোড়ক চালু করতে হবে সেগুলিকে অবশ্যই SELinux নীতিতে নিম্নলিখিত ডোমেন ট্রানজিশন নিয়ম যোগ করতে হবে:
domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper)
।
Netutils মোড়ানো ফিল্টার
মোড়ানো ইউটিলিটিগুলি লিনাক্স নেটওয়ার্কিং স্ট্যাকের প্রায় যেকোনো দিক কনফিগার করতে ব্যবহার করা যেতে পারে। যাইহোক, একটি স্থিতিশীল ইন্টারফেস বজায় রাখা এবং সিস্টেম পার্টিশনে আপডেট করার অনুমতি দেওয়া সম্ভব তা নিশ্চিত করার জন্য, শুধুমাত্র কমান্ড লাইন আর্গুমেন্টের কিছু সমন্বয় অনুমোদিত; অন্যান্য আদেশ প্রত্যাখ্যান করা হয়।
বিক্রেতা ইন্টারফেস এবং চেইন
মোড়কের বিক্রেতা ইন্টারফেসের একটি ধারণা রয়েছে। এই ইন্টারফেসগুলি সাধারণত বিক্রেতা কোড দ্বারা পরিচালিত হয়, যেমন সেলুলার ডেটা ইন্টারফেস। সাধারণত, অন্যান্য ধরনের ইন্টারফেস (যেমন Wi-Fi) 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 ঠিকানা, রাউটিং, IPsec এনক্রিপশন, এবং অন্যান্য নেটওয়ার্ক পরামিতিগুলির একটি সংখ্যা কনফিগার করতে ব্যবহৃত হয়। মোড়ক নিম্নলিখিত কমান্ডের অনুমতি দেয়:
- বিক্রেতা-পরিচালিত ইন্টারফেস থেকে IP ঠিকানা যোগ করুন এবং সরান।
- IPsec এনক্রিপশন কনফিগার করুন।
iptables এবং ip6tables
iptables
এবং ip6tables
কমান্ডগুলি ফায়ারওয়ালিং, প্যাকেট ম্যাংলিং, NAT, এবং অন্যান্য প্রতি-প্যাকেট প্রক্রিয়াকরণ কনফিগার করতে ব্যবহৃত হয়। মোড়ক নিম্নলিখিত কমান্ডের অনুমতি দেয়:
- বিক্রেতা চেইন যোগ করুন এবং মুছুন।
- যে কোনও চেইনে নিয়ম যোগ করুন এবং মুছুন যা প্যাকেটগুলিকে (
-i
) বা (-o
) একটি বিক্রেতা ইন্টারফেসের বাইরে যেতে নির্দেশ করে। - অন্য যেকোনো চেইনের যেকোনো বিন্দু থেকে একটি বিক্রেতা চেইনে ঝাঁপ দাও।
ndc
ndc
netd
ডেমনের সাথে যোগাযোগ করতে ব্যবহৃত হয় যা Android এ বেশিরভাগ নেটওয়ার্ক কনফিগারেশন করে। মোড়ক নিম্নলিখিত কমান্ডের অনুমতি দেয়:
- OEM নেটওয়ার্ক তৈরি করুন এবং ধ্বংস করুন (
oemXX
)। - OEM নেটওয়ার্কে বিক্রেতা-পরিচালিত ইন্টারফেস যোগ করুন।
- OEM নেটওয়ার্কে রুট যোগ করুন।
- বিশ্বব্যাপী এবং বিক্রেতা ইন্টারফেসে আইপি ফরওয়ার্ডিং সক্ষম বা অক্ষম করুন।
tc
tc
কমান্ডটি ভেন্ডর ইন্টারফেসে ট্র্যাফিক সারিবদ্ধকরণ এবং শেপিং কনফিগার করতে ব্যবহৃত হয়।