1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci 16d9f0492fSopenharmony_ci#ifndef BASE_STARTUP_PARAM_COMMON_H 17d9f0492fSopenharmony_ci#define BASE_STARTUP_PARAM_COMMON_H 18d9f0492fSopenharmony_ci#include <stdio.h> 19d9f0492fSopenharmony_ci#include <stdint.h> 20d9f0492fSopenharmony_ci#include <stdarg.h> 21d9f0492fSopenharmony_ci#ifndef __LITEOS_M__ 22d9f0492fSopenharmony_ci#include <pthread.h> 23d9f0492fSopenharmony_ci#endif 24d9f0492fSopenharmony_ci#include "param_atomic.h" 25d9f0492fSopenharmony_ci#ifdef __cplusplus 26d9f0492fSopenharmony_ci#if __cplusplus 27d9f0492fSopenharmony_ciextern "C" { 28d9f0492fSopenharmony_ci#endif 29d9f0492fSopenharmony_ci#endif 30d9f0492fSopenharmony_ci 31d9f0492fSopenharmony_ci// support mutex 32d9f0492fSopenharmony_ci#ifndef __LITEOS_M__ 33d9f0492fSopenharmony_citypedef struct { 34d9f0492fSopenharmony_ci pthread_rwlock_t rwlock; 35d9f0492fSopenharmony_ci} ParamRWMutex; 36d9f0492fSopenharmony_ci 37d9f0492fSopenharmony_citypedef struct { 38d9f0492fSopenharmony_ci pthread_mutex_t mutex; 39d9f0492fSopenharmony_ci} ParamMutex; 40d9f0492fSopenharmony_ci#else 41d9f0492fSopenharmony_citypedef struct { 42d9f0492fSopenharmony_ci uint32_t mutex; 43d9f0492fSopenharmony_ci} ParamRWMutex; 44d9f0492fSopenharmony_ci 45d9f0492fSopenharmony_citypedef struct { 46d9f0492fSopenharmony_ci uint32_t mutex; 47d9f0492fSopenharmony_ci} ParamMutex; 48d9f0492fSopenharmony_ci#endif 49d9f0492fSopenharmony_ci 50d9f0492fSopenharmony_citypedef struct { 51d9f0492fSopenharmony_ci int shmid; 52d9f0492fSopenharmony_ci} MemHandle; 53d9f0492fSopenharmony_ci 54d9f0492fSopenharmony_citypedef struct { 55d9f0492fSopenharmony_ci uint32_t left; 56d9f0492fSopenharmony_ci uint32_t right; 57d9f0492fSopenharmony_ci uint32_t child; 58d9f0492fSopenharmony_ci uint32_t labelIndex; 59d9f0492fSopenharmony_ci uint32_t dataIndex; 60d9f0492fSopenharmony_ci uint16_t selinuxLabel; 61d9f0492fSopenharmony_ci uint16_t length; 62d9f0492fSopenharmony_ci char key[0]; 63d9f0492fSopenharmony_ci} ParamTrieNode; 64d9f0492fSopenharmony_ci 65d9f0492fSopenharmony_ci#define PARAM_FLAGS_MODIFY 0x80000000 66d9f0492fSopenharmony_ci#define PARAM_FLAGS_TRIGGED 0x40000000 67d9f0492fSopenharmony_ci#define PARAM_FLAGS_WAITED 0x20000000 68d9f0492fSopenharmony_ci#define PARAM_FLAGS_PERSIST 0x10000000 69d9f0492fSopenharmony_ci#define PARAM_FLAGS_COMMITID 0x0000ffff 70d9f0492fSopenharmony_ci 71d9f0492fSopenharmony_ci#define PARAM_TYPE_MASK 0x0f 72d9f0492fSopenharmony_ci#define PARAM_TYPE_STRING 0x00 73d9f0492fSopenharmony_ci#define PARAM_TYPE_INT 0x01 74d9f0492fSopenharmony_ci#define PARAM_TYPE_BOOL 0x02 75d9f0492fSopenharmony_ci 76d9f0492fSopenharmony_citypedef struct { 77d9f0492fSopenharmony_ci ATOMIC_UINT32 commitId; 78d9f0492fSopenharmony_ci uint8_t type; 79d9f0492fSopenharmony_ci uint8_t keyLength; 80d9f0492fSopenharmony_ci uint16_t valueLength; 81d9f0492fSopenharmony_ci char data[0]; 82d9f0492fSopenharmony_ci} ParamNode; 83d9f0492fSopenharmony_ci 84d9f0492fSopenharmony_citypedef struct { 85d9f0492fSopenharmony_ci uid_t uid; 86d9f0492fSopenharmony_ci gid_t gid; 87d9f0492fSopenharmony_ci uint32_t selinuxIndex; 88d9f0492fSopenharmony_ci uint16_t mode; 89d9f0492fSopenharmony_ci uint8_t type; 90d9f0492fSopenharmony_ci uint8_t length; 91d9f0492fSopenharmony_ci uint32_t memberNum; 92d9f0492fSopenharmony_ci uid_t members[0]; 93d9f0492fSopenharmony_ci} ParamSecurityNode; 94d9f0492fSopenharmony_ci 95d9f0492fSopenharmony_citypedef struct { 96d9f0492fSopenharmony_ci ATOMIC_LLONG commitId; 97d9f0492fSopenharmony_ci ATOMIC_LLONG commitPersistId; 98d9f0492fSopenharmony_ci uint32_t trieNodeCount; 99d9f0492fSopenharmony_ci uint32_t paramNodeCount; 100d9f0492fSopenharmony_ci uint32_t securityNodeCount; 101d9f0492fSopenharmony_ci uint32_t currOffset; 102d9f0492fSopenharmony_ci uint32_t spaceSizeOffset; 103d9f0492fSopenharmony_ci uint32_t firstNode; 104d9f0492fSopenharmony_ci uint32_t dataSize; 105d9f0492fSopenharmony_ci char data[0]; 106d9f0492fSopenharmony_ci} ParamTrieHeader; 107d9f0492fSopenharmony_ci 108d9f0492fSopenharmony_citypedef struct WorkSpace_ { 109d9f0492fSopenharmony_ci unsigned int flags; 110d9f0492fSopenharmony_ci MemHandle memHandle; 111d9f0492fSopenharmony_ci ParamTrieHeader *area; 112d9f0492fSopenharmony_ci ATOMIC_UINT32 rwSpaceLock; 113d9f0492fSopenharmony_ci uint32_t spaceSize; 114d9f0492fSopenharmony_ci uint32_t spaceIndex; 115d9f0492fSopenharmony_ci ParamRWMutex rwlock; 116d9f0492fSopenharmony_ci char fileName[0]; 117d9f0492fSopenharmony_ci} WorkSpace; 118d9f0492fSopenharmony_ci 119d9f0492fSopenharmony_citypedef struct { 120d9f0492fSopenharmony_ci uint8_t updaterMode; 121d9f0492fSopenharmony_ci void (*logFunc)(int logLevel, uint32_t domain, const char *tag, const char *fmt, va_list vargs); 122d9f0492fSopenharmony_ci int (*setfilecon)(const char *name, const char *content); 123d9f0492fSopenharmony_ci int (*getServiceGroupIdByPid)(pid_t pid, gid_t *gids, uint32_t gidSize); 124d9f0492fSopenharmony_ci} PARAM_WORKSPACE_OPS; 125d9f0492fSopenharmony_ci 126d9f0492fSopenharmony_citypedef struct CachedParameter_ { 127d9f0492fSopenharmony_ci struct WorkSpace_ *workspace; 128d9f0492fSopenharmony_ci const char *(*cachedParameterCheck)(struct CachedParameter_ *param, int *changed); 129d9f0492fSopenharmony_ci long long spaceCommitId; 130d9f0492fSopenharmony_ci uint32_t dataCommitId; 131d9f0492fSopenharmony_ci uint32_t dataIndex; 132d9f0492fSopenharmony_ci uint32_t bufferLen; 133d9f0492fSopenharmony_ci uint32_t nameLen; 134d9f0492fSopenharmony_ci char *paramValue; 135d9f0492fSopenharmony_ci char data[0]; 136d9f0492fSopenharmony_ci} CachedParameter; 137d9f0492fSopenharmony_ci 138d9f0492fSopenharmony_citypedef void *CachedHandle; 139d9f0492fSopenharmony_ci 140d9f0492fSopenharmony_citypedef struct _SpaceSize { 141d9f0492fSopenharmony_ci uint32_t maxLabelIndex; 142d9f0492fSopenharmony_ci uint32_t spaceSize[0]; 143d9f0492fSopenharmony_ci} WorkSpaceSize; 144d9f0492fSopenharmony_ci 145d9f0492fSopenharmony_ci#ifdef __cplusplus 146d9f0492fSopenharmony_ci#if __cplusplus 147d9f0492fSopenharmony_ci} 148d9f0492fSopenharmony_ci#endif 149d9f0492fSopenharmony_ci#endif 150d9f0492fSopenharmony_ci#endif // BASE_STARTUP_PARAM_COMMON_H