অ্যাপ-ভিত্তিক এবং অর্পিত ডেটা ব্যবহারের পর্যবেক্ষণ ও ট্র্যাকিং কার্যকারিতাটি অ্যান্ড্রয়েড-৩.০ লিনাক্স কার্নেলের xt_qtaguid মডিউলের ( kernel/net/netfilter/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 নেটফিল্টার মডিউলটি মালিক অ্যাপের অনন্য UID ব্যবহার করে প্রতিটি অ্যাপের জন্য সকেট-ভিত্তিক নেটওয়ার্ক ট্র্যাফিক ট্র্যাক করে। সিস্টেমের যেকোনো সকেটের সাথে দুটি ট্যাগ উপাদান যুক্ত থাকে। প্রথমটি হলো UID, যা ডেটা স্থানান্তরের জন্য দায়ী অ্যাপটিকে অনন্যভাবে শনাক্ত করে (লিনাক্স প্রতিটি নেটওয়ার্ক সকেটের মালিকানা কলিং অ্যাপের UID-এর সাথে যুক্ত করার সুযোগ দেয়)। দ্বিতীয় ট্যাগ উপাদানটি অ্যাপ ডেভেলপার-নির্দিষ্ট ক্যাটাগরিতে ট্র্যাফিকের অতিরিক্ত বৈশিষ্ট্য নির্ধারণে সহায়তা করার জন্য ব্যবহৃত হয়। এই অ্যাপ-স্তরের ট্যাগগুলো ব্যবহার করে, একটি অ্যাপ ট্র্যাফিককে বিভিন্ন উপ-ক্যাটাগরিতে প্রোফাইল করতে পারে।
যেসব অ্যাপ পরিষেবা হিসাবে নেটওয়ার্ক ডেটা ট্রান্সফার প্রদান করে, যেমন ডাউনলোড ম্যানেজার, মিডিয়া স্ট্রিমিং পরিষেবা ইত্যাদি, সেগুলোর ক্ষেত্রে TrafficStats.setThreadStatsUid() ফাংশন কল ব্যবহার করে অনুরোধকারী অ্যাপের UID-কে নেটওয়ার্ক ডেটা ট্রান্সফারের মালিকানা প্রদান করা সম্ভব। নেটওয়ার্ক ট্র্যাফিকের মালিকানা পুনরায় নির্ধারণ করার জন্য কলারের অবশ্যই “ android.permission.MODIFY_NETWORK_ACCOUNTING ” পারমিশন থাকতে হবে।