15c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran/* 25c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * Copyright (C) 2014 The Android Open Source Project 35c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * 45c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * Licensed under the Apache License, Version 2.0 (the "License"); 55c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * you may not use this file except in compliance with the License. 65c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * You may obtain a copy of the License at 75c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * 85c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * http://www.apache.org/licenses/LICENSE-2.0 95c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * 105c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * Unless required by applicable law or agreed to in writing, software 115c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * distributed under the License is distributed on an "AS IS" BASIS, 125c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * See the License for the specific language governing permissions and 145c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * limitations under the License. 155c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran */ 165c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran 174d4c8b7e294d845103ecb10f968713717a3e6406Sreeram Ramachandran#ifndef NETD_INCLUDE_PERMISSION_H 184d4c8b7e294d845103ecb10f968713717a3e6406Sreeram Ramachandran#define NETD_INCLUDE_PERMISSION_H 195c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran 205c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// This enum represents the permissions we care about for networking. When applied to an app, it's 215c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// the permission the app (UID) has been granted. When applied to a network, it's the permission an 225c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// app must hold to be allowed to use the network. PERMISSION_NONE means "no special permission is 235c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// held by the app" or "no special permission is required to use the network". 245c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// 25379bd33f7640e2c4bef902be0ed6cb96378c8c2eSreeram Ramachandran// Permissions are flags that can be OR'ed together to represent combinations of permissions. 26379bd33f7640e2c4bef902be0ed6cb96378c8c2eSreeram Ramachandran// 27ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// PERMISSION_NONE is used for regular networks and apps, such as those that hold the 28ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// android.permission.INTERNET framework permission. 29ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// 30ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// PERMISSION_NETWORK is used for privileged networks and apps that can manipulate or access them, 31ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// such as those that hold the android.permission.CHANGE_NETWORK_STATE framework permission. 32ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// 33ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// PERMISSION_SYSTEM is used for system apps, such as those that are installed on the system 34ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// partition, those that hold the android.permission.CONNECTIVITY_INTERNAL framework permission and 35ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// those whose UID is less than FIRST_APPLICATION_UID. 365c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandranenum Permission { 37ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran PERMISSION_NONE = 0x0, 38ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran PERMISSION_NETWORK = 0x1, 39ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran PERMISSION_SYSTEM = 0x3, // Includes PERMISSION_NETWORK. 405c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran}; 415c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran 421f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colittiinline const char *permissionToName(Permission permission) { 431f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti switch (permission) { 441f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti case PERMISSION_NONE: return "NONE"; 451f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti case PERMISSION_NETWORK: return "NETWORK"; 461f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti case PERMISSION_SYSTEM: return "SYSTEM"; 471f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti // No default statement. We want to see errors of the form: 481f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti // "enumeration value 'PERMISSION_SYSTEM' not handled in switch [-Werror,-Wswitch]". 491f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti } 501f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti} 511f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti 521ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colittiinline Permission stringToPermission(const char* arg) { 531ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti if (!strcmp(arg, "NETWORK")) { 541ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti return PERMISSION_NETWORK; 551ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti } 561ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti if (!strcmp(arg, "SYSTEM")) { 571ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti return PERMISSION_SYSTEM; 581ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti } 591ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti return PERMISSION_NONE; 601ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti} 611ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti 624d4c8b7e294d845103ecb10f968713717a3e6406Sreeram Ramachandran#endif // NETD_INCLUDE_PERMISSION_H 63