18626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma/*
28626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * Copyright (C) 2011 The Android Open Source Project
38626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma *
48626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * Licensed under the Apache License, Version 2.0 (the "License");
58626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * you may not use this file except in compliance with the License.
68626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * You may obtain a copy of the License at
78626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma *
88626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma *      http://www.apache.org/licenses/LICENSE-2.0
98626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma *
108626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * Unless required by applicable law or agreed to in writing, software
118626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * distributed under the License is distributed on an "AS IS" BASIS,
128626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * See the License for the specific language governing permissions and
148626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma * limitations under the License.
158626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma */
168626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma
178626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#ifndef __CUTILS_QTAGUID_H
188626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#define __CUTILS_QTAGUID_H
198626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma
208626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#include <stdint.h>
218626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#include <sys/types.h>
226dce8322d66361e40d1feb5a6c3de15244de5949Ashish Sharma#include <unistd.h>
238626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma
248626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#ifdef __cplusplus
258626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharmaextern "C" {
268626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#endif
278626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma
288626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma/*
294822b01b12bae88c32494e6da812dfacd2b6209fAlex Deymo * Set tags (and owning UIDs) for network sockets. The socket must be untagged
304822b01b12bae88c32494e6da812dfacd2b6209fAlex Deymo * by calling qtaguid_untagSocket() before closing it, otherwise the qtaguid
314822b01b12bae88c32494e6da812dfacd2b6209fAlex Deymo * module will keep a reference to it even after close.
324822b01b12bae88c32494e6da812dfacd2b6209fAlex Deymo */
339b5c774369fcbd4460751f9b01e692d688c386baAshish Sharmaextern int qtaguid_tagSocket(int sockfd, int tag, uid_t uid);
349b5c774369fcbd4460751f9b01e692d688c386baAshish Sharma
359b5c774369fcbd4460751f9b01e692d688c386baAshish Sharma/*
369b5c774369fcbd4460751f9b01e692d688c386baAshish Sharma * Untag a network socket before closing.
374822b01b12bae88c32494e6da812dfacd2b6209fAlex Deymo */
389b5c774369fcbd4460751f9b01e692d688c386baAshish Sharmaextern int qtaguid_untagSocket(int sockfd);
398626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma
40243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall/*
41243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * For the given uid, switch counter sets.
42243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * The kernel only keeps a limited number of sets.
43243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * 2 for now.
44243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall */
45243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrallextern int qtaguid_setCounterSet(int counterSetNum, uid_t uid);
46243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall
47243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall/*
48243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * Delete all tag info that relates to the given tag an uid.
49243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * If the tag is 0, then ALL info about the uid is freeded.
50243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * The delete data also affects active tagged socketd, which are
51243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * then untagged.
52243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * The calling process can only operate on its own tags.
53243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * Unless it is part of the happy AID_NET_BW_ACCT group.
54243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * In which case it can clobber everything.
55243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall */
56243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrallextern int qtaguid_deleteTagData(int tag, uid_t uid);
57243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall
58243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall/*
59243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * Enable/disable qtaguid functionnality at a lower level.
60243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall * When pacified, the kernel will accept commands but do nothing.
61243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall */
62243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrallextern int qtaguid_setPacifier(int on);
63243123fb41d7d2981116bd5d11ba168b127d68e9JP Abgrall
648626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#ifdef __cplusplus
658626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma}
668626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#endif
678626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma
688626cce5f381899f47e3a82e2ef4c98f183391b0Ashish Sharma#endif /* __CUTILS_QTAG_UID_H */
69