Data Usage Tags Explained

Tags represent one of the metrics the data usage counters will be tracked against. By default, and implicitly, a tag is just based on the UID. The UID is used as the base for policing, and cannot be ignored. So a tag will always at least represent a UID (uid_tag). A tag can be explicitly augmented with an "accounting tag" which is associated with a UID. User space can use TrafficStats.setThreadStatsTag() to set the acct_tag portion of the tag which is then used  with sockets: all data belonging to that socket will be counted against the tag. The policing is then based on the tag's uid_tag portion, and stats are collected for the acct_tag portion separately.

Without explicit tagging, the qtaguid module will assume the default_tag:  {acct_tag=0, uid_tag=10003}

    a:  {acct_tag=1, uid_tag=10003}
    b:  {acct_tag=2, uid_tag=10003}
    c:  {acct_tag=3, uid_tag=10003}

a, b, c… represent explicit tags associated with specific sockets.

default_tag (acct_tag=0) is the default accounting tag that contains the total traffic for that uid, including all untagged traffic, and is typically used to enforce policing/quota rules.

These tags can be used to profile the network traffic of an application into separate logical categories (at a network socket level). Such tags can be removed, reapplied, or modified during runtime.

The qtaguid module has been implemented on kernel/common branch of android-3.0