BandwidthController.h revision 0dad7c2f1f6994fbe5e85b9e1fc72d29d6453211
14a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall/* 24a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * Copyright (C) 2011 The Android Open Source Project 34a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * 44a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * Licensed under the Apache License, Version 2.0 (the "License"); 54a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * you may not use this file except in compliance with the License. 64a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * You may obtain a copy of the License at 74a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * 84a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * http://www.apache.org/licenses/LICENSE-2.0 94a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * 104a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * Unless required by applicable law or agreed to in writing, software 114a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * distributed under the License is distributed on an "AS IS" BASIS, 124a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * See the License for the specific language governing permissions and 144a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall * limitations under the License. 154a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall */ 164a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall#ifndef _BANDWIDTH_CONTROLLER_H 174a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall#define _BANDWIDTH_CONTROLLER_H 184a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall 194a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall#include <list> 204a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall#include <string> 21fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall#include <utility> // for pair 224a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrallclass BandwidthController { 234a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrallpublic: 24fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall BandwidthController(); 25fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall int enableBandwidthControl(void); 26fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall int disableBandwidthControl(void); 27fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall 280dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall int setInterfaceSharedQuota(const char *iface, int64_t bytes); 29fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall int removeInterfaceSharedQuota(const char *iface); 30fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall 310dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall int setInterfaceQuota(const char *iface, int64_t bytes); 320dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall int removeInterfaceQuota(const char *iface); 330dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 34fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall int addNaughtyApps(int numUids, char *appUids[]); 35fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall int removeNaughtyApps(int numUids, char *appUids[]); 364a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall 370dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 384a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrallprotected: 39fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall typedef std::pair<std::string /*ifaceName*/, int64_t /*quota*/> QuotaInfo; 40fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall enum IptOp {IptOpInsert, IptOpReplace, IptOpDelete}; 410dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 42fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall int64_t sharedQuotaBytes; 430dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall std::list<std::string> sharedQuotaIfaces; 440dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 450dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall std::list<QuotaInfo> quotaIfaces; 460dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 47fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall std::list<int /*appUid*/> naughtyAppUids; 48fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall int maninpulateNaughtyApps(int numUids, char *appStrUids[], bool doAdd); 494a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall 500dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall int prepCostlyIface(const char *ifn, bool isShared); 510dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall int cleanupCostlyIface(const char *ifn, bool isShared); 520dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 530dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall std::string makeIptablesNaughtyCmd(IptOp op, int uid); 540dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall std::string makeIptablesQuotaCmd(IptOp op, char *costName, int64_t quota); 550dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 560dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall /* Runs for both ipv4 and ipv6 iptables */ 570dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall int runCommands(int numCommands, const char *commands[], bool allowFailure); 580dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall /* Runs for both ipv4 and ipv6 iptables, appends -j REJECT --reject-with ... */ 590dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall static int runIpxtablesCmd(const char *cmd, bool appendReject); 600dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall static int runIptablesCmd(const char *cmd, bool appendReject, bool isIp6); 610dad7c2f1f6994fbe5e85b9e1fc72d29d6453211JP Abgrall 624a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrallprivate: 63fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const char *cleanupCommands[]; 64fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const char *setupCommands[]; 65fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const char *basicAccountingCommands[]; 66fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const int MAX_CMD_LEN; 67fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const int MAX_IFACENAME_LEN; 68fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const int MAX_CMD_ARGS; 69fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const char IPTABLES_PATH[]; 70fa6f46d3370ae5475fc3bc8273bbe04ee7348d60JP Abgrall static const char IP6TABLES_PATH[]; 714a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall 724a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall}; 734a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall 744a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall#endif 75