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