কার্নেল ওভারভিউ

প্রতিটি অ্যাপের জন্য এবং শেয়ার করা ডেটা ব্যবহারের মনিটরিং ও ট্র্যাকিং ফাংশনালিটি android-3.0 Linux কার্নেলের (kernel/net/netfilter/xt_qtaguid) xt_qtaguid মডিউলের উপর নির্ভর করে। ফ্রেমওয়ার্কের (system/core/libcutils/qtaguid.c) সকেট ট্যাগিং ফাংশনালিটি মূলত xt_qtaguid কার্নেল মডিউল দ্বারা এক্সপোর্ট করা /proc/net/xt_qtaguid/ctrl ইন্টারফেসের উপর নির্ভর করে।

quota2 নেটফিল্টার মডিউল (মূলত xtables-addons-এর অংশ) নামযুক্ত কোটা সীমা সেট করার জন্য কার্যকারিতা অনুমোদন করে এবং নির্দিষ্ট সীমা পৌঁছে গেলে ব্যবহারকারীর স্পেসকে জানানোর জন্য বাড়ানো হয়েছে। কোটা সীমাতে পৌঁছে গেলে, quota2 মডিউল পরবর্তী সব নেটওয়ার্ক ট্রাফিক বাতিল করে দেয়। এছাড়াও, ফ্রেমওয়ার্ক কোনও অ্যাপের জন্য ব্যাকগ্রাউন্ড ডেটা ট্রাফিক সীমাবদ্ধ করতে অতিরিক্ত নিয়ম নির্দিষ্ট করতে পারে (com.android.server.NetworkManagementSocketTagger.setKernelCounterSet এবং android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND দেখুন)।

এটি কীভাবে কাজ করে?

qtaguid netfilter মডিউল প্রতিটি অ্যাপের জন্য সকেট-ভিত্তিক নেটওয়ার্ক ট্রাফিক ট্র্যাক করে। এটি মালিকানাধীন অ্যাপের অনন্য UID ব্যবহার করে। সিস্টেমের যেকোনও সকেটের সাথে দুটি ট্যাগ কম্পোনেন্ট যুক্ত থাকে। প্রথমটি হল UID যা ডেটা ট্রান্সফারের জন্য দায়ী অ্যাপটিকে অনন্যভাবে শনাক্ত করে (Linux প্রতিটি নেটওয়ার্ক সকেটের মালিকানা কলিং অ্যাপের UID-এর সাথে অ্যাট্রিবিউট করার ক্ষমতা দেয়)। দ্বিতীয় ট্যাগ কম্পোনেন্ট ব্যবহার করা হয় অ্যাপে ট্রাফিকের অতিরিক্ত বৈশিষ্ট্যকে অ্যাপ ডেভেলপারের নির্দিষ্ট করা বিভাগে সাপোর্ট করার জন্য। এই অ্যাপ লেভেল ট্যাগ ব্যবহার করে, একটি অ্যাপ ট্রাফিককে বিভিন্ন উপ-বিভাগে প্রোফাইল করতে পারে।

যেসব অ্যাপ পরিষেবা হিসেবে নেটওয়ার্ক ডেটা ট্রান্সফার করে, যেমন ডাউনলোড ম্যানেজার, মিডিয়া স্ট্রিমিং পরিষেবা ইত্যাদি, সেগুলির ক্ষেত্রে TrafficStats.setThreadStatsUid() ফাংশন কল ব্যবহার করে অনুরোধকারী অ্যাপের UID-তে নেটওয়ার্ক ডেটা ট্রান্সফারের মালিকানা অ্যাট্রিবিউট করা সম্ভব। নেটওয়ার্ক ট্রাফিকের মালিকানা আবার অ্যাসাইন করার জন্য কলারের কাছে অবশ্যই “android.permission.MODIFY_NETWORK_ACCOUNTING” অনুমতি থাকতে হবে।