aboutsummaryrefslogtreecommitdiffstats
path: root/ip/iproute.c
diff options
context:
space:
mode:
authorSreeram Ramachandran <sreeram@google.com>2014-05-14 22:06:38 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-05-14 22:06:39 +0000
commit39c15e7bbb2a5f52997dcbd12729dbe07f50f0f4 (patch)
tree6455cf41196967db7073bffb9064ea885b410235 /ip/iproute.c
parente120c4bf77ddd60b94cecbe480158bf676a3d64f (diff)
parentb7a3df0f3c56c10587e926307daaa87fc3b854bf (diff)
downloadandroid_external_iproute2-39c15e7bbb2a5f52997dcbd12729dbe07f50f0f4.tar.gz
android_external_iproute2-39c15e7bbb2a5f52997dcbd12729dbe07f50f0f4.tar.bz2
android_external_iproute2-39c15e7bbb2a5f52997dcbd12729dbe07f50f0f4.zip
Merge "Support experimental UID range routing."
Diffstat (limited to 'ip/iproute.c')
-rw-r--r--ip/iproute.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ip/iproute.c b/ip/iproute.c
index 5cd313e..8dc0bc8 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -62,7 +62,7 @@ static void usage(void)
fprintf(stderr, " ip route restore\n");
fprintf(stderr, " ip route get ADDRESS [ from ADDRESS iif STRING ]\n");
fprintf(stderr, " [ oif STRING ] [ tos TOS ]\n");
- fprintf(stderr, " [ mark NUMBER ]\n");
+ fprintf(stderr, " [ mark NUMBER ] [ uid NUMBER ]\n");
fprintf(stderr, " ip route { add | del | change | append | replace } ROUTE\n");
fprintf(stderr, "SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]\n");
fprintf(stderr, " [ table TABLE_ID ] [ proto RTPROTO ]\n");
@@ -423,6 +423,9 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
}
}
+ if (tb[RTA_UID])
+ fprintf(fp, " uid %u ", rta_getattr_u32(tb[RTA_UID]));
+
if (tb[RTA_FLOW] && filter.realmmask != ~0U) {
__u32 to = rta_getattr_u32(tb[RTA_FLOW]);
__u32 from = to>>16;
@@ -1401,6 +1404,11 @@ int iproute_get(int argc, char **argv)
strcmp(*argv, "dev") == 0) {
NEXT_ARG();
odev = *argv;
+ } else if (matches(*argv, "uid") == 0) {
+ uid_t uid;
+ NEXT_ARG();
+ get_unsigned(&uid, *argv, 0);
+ addattr32(&req.n, sizeof(req), RTA_UID, uid);
} else if (matches(*argv, "notify") == 0) {
req.r.rtm_flags |= RTM_F_NOTIFY;
} else if (matches(*argv, "connected") == 0) {