10b9a52e3Sopenharmony_ci/* 20b9a52e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 30b9a52e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 40b9a52e3Sopenharmony_ci * you may not use this file except in compliance with the License. 50b9a52e3Sopenharmony_ci * You may obtain a copy of the License at 60b9a52e3Sopenharmony_ci * 70b9a52e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 80b9a52e3Sopenharmony_ci * 90b9a52e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 100b9a52e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 110b9a52e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120b9a52e3Sopenharmony_ci * See the License for the specific language governing permissions and 130b9a52e3Sopenharmony_ci * limitations under the License. 140b9a52e3Sopenharmony_ci */ 150b9a52e3Sopenharmony_ci#include "qos_common.h" 160b9a52e3Sopenharmony_ci#include <cstdio> 170b9a52e3Sopenharmony_ci#include <cstdlib> 180b9a52e3Sopenharmony_ci#include <unistd.h> 190b9a52e3Sopenharmony_ci#include <sys/ioctl.h> 200b9a52e3Sopenharmony_ci#include <fcntl.h> 210b9a52e3Sopenharmony_ci#include "rme_log_domain.h" 220b9a52e3Sopenharmony_ci 230b9a52e3Sopenharmony_ci#undef LOG_TAG 240b9a52e3Sopenharmony_ci#define LOG_TAG "qos_manager" 250b9a52e3Sopenharmony_ci 260b9a52e3Sopenharmony_ciconstexpr unsigned int AF_QOS_DELEGATED = 0x0001; 270b9a52e3Sopenharmony_ci 280b9a52e3Sopenharmony_cinamespace OHOS { 290b9a52e3Sopenharmony_cinamespace QosCommon { 300b9a52e3Sopenharmony_ci 310b9a52e3Sopenharmony_cistatic int TrivalOpenAuthCtrlNode(void) 320b9a52e3Sopenharmony_ci{ 330b9a52e3Sopenharmony_ci char fileName[] = "/dev/auth_ctrl"; 340b9a52e3Sopenharmony_ci int fd = open(fileName, O_RDWR); 350b9a52e3Sopenharmony_ci return fd; 360b9a52e3Sopenharmony_ci} 370b9a52e3Sopenharmony_ci 380b9a52e3Sopenharmony_ciint AuthEnable(int pid, unsigned int flag, unsigned int status) 390b9a52e3Sopenharmony_ci{ 400b9a52e3Sopenharmony_ci struct AuthCtrlData data; 410b9a52e3Sopenharmony_ci int fd; 420b9a52e3Sopenharmony_ci int ret; 430b9a52e3Sopenharmony_ci 440b9a52e3Sopenharmony_ci fd = TrivalOpenAuthCtrlNode(); 450b9a52e3Sopenharmony_ci if (fd < 0) { 460b9a52e3Sopenharmony_ci RME_LOGE("thread %{public}d belong to user %{public}d open auth node failed\n", gettid(), getuid()); 470b9a52e3Sopenharmony_ci return fd; 480b9a52e3Sopenharmony_ci } 490b9a52e3Sopenharmony_ci 500b9a52e3Sopenharmony_ci data.pid = pid; 510b9a52e3Sopenharmony_ci data.rtgFlag = flag; 520b9a52e3Sopenharmony_ci data.qosFlag = AF_QOS_DELEGATED; 530b9a52e3Sopenharmony_ci data.status = status; 540b9a52e3Sopenharmony_ci data.type = AUTH_ENABLE; 550b9a52e3Sopenharmony_ci 560b9a52e3Sopenharmony_ci ret = ioctl(fd, BASIC_AUTH_CTRL_OPERATION, &data); 570b9a52e3Sopenharmony_ci if (ret < 0) { 580b9a52e3Sopenharmony_ci RME_LOGE("auth enable failed for pid %{public}d with status %{public}u\n", pid, status); 590b9a52e3Sopenharmony_ci } 600b9a52e3Sopenharmony_ci close(fd); 610b9a52e3Sopenharmony_ci return ret; 620b9a52e3Sopenharmony_ci} 630b9a52e3Sopenharmony_ci 640b9a52e3Sopenharmony_ciint AuthPause(int pid) 650b9a52e3Sopenharmony_ci{ 660b9a52e3Sopenharmony_ci struct AuthCtrlData data; 670b9a52e3Sopenharmony_ci int fd; 680b9a52e3Sopenharmony_ci int ret; 690b9a52e3Sopenharmony_ci 700b9a52e3Sopenharmony_ci fd = TrivalOpenAuthCtrlNode(); 710b9a52e3Sopenharmony_ci if (fd < 0) { 720b9a52e3Sopenharmony_ci RME_LOGE("thread %{public}d belong to user %{public}d open auth node failed\n", gettid(), getuid()); 730b9a52e3Sopenharmony_ci return fd; 740b9a52e3Sopenharmony_ci } 750b9a52e3Sopenharmony_ci 760b9a52e3Sopenharmony_ci data.pid = pid; 770b9a52e3Sopenharmony_ci data.rtgFlag = 0; 780b9a52e3Sopenharmony_ci data.qosFlag = AF_QOS_DELEGATED; 790b9a52e3Sopenharmony_ci data.status = AUTH_STATUS_BACKGROUND; 800b9a52e3Sopenharmony_ci data.type = AUTH_SWITCH; 810b9a52e3Sopenharmony_ci 820b9a52e3Sopenharmony_ci ret = ioctl(fd, BASIC_AUTH_CTRL_OPERATION, &data); 830b9a52e3Sopenharmony_ci if (ret < 0) { 840b9a52e3Sopenharmony_ci RME_LOGE("auth pause failed for pid %{public}d\n", pid); 850b9a52e3Sopenharmony_ci } 860b9a52e3Sopenharmony_ci close(fd); 870b9a52e3Sopenharmony_ci return ret; 880b9a52e3Sopenharmony_ci} 890b9a52e3Sopenharmony_ci 900b9a52e3Sopenharmony_ciint AuthDelete(int pid) 910b9a52e3Sopenharmony_ci{ 920b9a52e3Sopenharmony_ci struct AuthCtrlData data; 930b9a52e3Sopenharmony_ci int fd; 940b9a52e3Sopenharmony_ci int ret; 950b9a52e3Sopenharmony_ci 960b9a52e3Sopenharmony_ci fd = TrivalOpenAuthCtrlNode(); 970b9a52e3Sopenharmony_ci if (fd < 0) { 980b9a52e3Sopenharmony_ci RME_LOGE("thread %{public}d belong to user %{public}d open auth node failed\n", gettid(), getuid()); 990b9a52e3Sopenharmony_ci return fd; 1000b9a52e3Sopenharmony_ci } 1010b9a52e3Sopenharmony_ci 1020b9a52e3Sopenharmony_ci data.pid = pid; 1030b9a52e3Sopenharmony_ci data.type = AUTH_DELETE; 1040b9a52e3Sopenharmony_ci 1050b9a52e3Sopenharmony_ci ret = ioctl(fd, BASIC_AUTH_CTRL_OPERATION, &data); 1060b9a52e3Sopenharmony_ci if (ret < 0) { 1070b9a52e3Sopenharmony_ci RME_LOGE("auth delete failed for pid %{public}d\n", pid); 1080b9a52e3Sopenharmony_ci } 1090b9a52e3Sopenharmony_ci close(fd); 1100b9a52e3Sopenharmony_ci return ret; 1110b9a52e3Sopenharmony_ci} 1120b9a52e3Sopenharmony_ci 1130b9a52e3Sopenharmony_ci} // namespace QosCommon 1140b9a52e3Sopenharmony_ci} // namespace OHOS