已合并
添加包过滤规则接口 #3673
panjie创建于 7月3日
添加包过滤规则接口 #3673
已合并
共 2 个文件变更+494-0
| @@ -156,6 +156,121 @@ int32_t OH_TrafficFilter_QueryProcess( | |||
| 156 | OH_TrafficFilter_ProcessInfo* process_info | 156 | OH_TrafficFilter_ProcessInfo* process_info |
| 157 | ); | 157 | ); |
| 158 | 158 | ||
| 159 | +/** | ||
| 160 | + * @brief 创建报文控制器实例。 | ||
| 161 | + * | ||
| 162 | + * 用于拦截和过滤网络报文。 | ||
| 163 | + * 资源管理:该实例占用系统资源,必须调用{@link OH_TrafficFilter_DestroyPacketController}释放资源。 | ||
| 164 | + * 如果该函数失败,不会返回有效的控制器。 | ||
| 165 | + * | ||
| 166 | + * @param group_id 过滤链标识符。同一应用内的多个控制器可以使用不同的group_id。不同应用的相同group_id会自动隔离。 | ||
| 167 | + * 取值范围为[{@link OH_TRAFFICFILTER_MIN_GROUP_ID}, {@link OH_TRAFFICFILTER_MAX_GROUP_ID}], | ||
| 168 | + * @param priority 优先级(决定不同group_id链之间的执行顺序,数值越小执行优先级越高)。 | ||
| 169 | + * 取值范围为[{@link OH_TRAFFICFILTER_MIN_PRIORITY}, {@link OH_TRAFFICFILTER_MAX_PRIORITY}], | ||
| 170 | + * @param config 配置参数(配置为NULL时表示使用默认配置)。 | ||
| 171 | + * @param controller 出参,成功时为报文控制器句柄。失败时为NULL,句柄不可用。 | ||
| 172 | + * @return <ul><li>{@link OH_TRAFFICFILTER_OK} 成功。</li> | ||
| 173 | + * <li>{@link OH_TRAFFICFILTER_ERROR_PERMISSION_DENIED} 缺少权限。</li> | ||
| 174 | + * <li>{@link OH_TRAFFICFILTER_ERROR_GROUP_ID_IN_USE} group_id已存在。</li> | ||
| 175 | + * <li>{@link OH_TRAFFICFILTER_ERROR_INVALID_PARAM} group_id或priority无效。</li> | ||
| 176 | + * <li>{@link OH_TRAFFICFILTER_ERROR_NFQUEUE_ERROR} NFQueue初始化失败。</li></ul> | ||
| 177 | + * | ||
| 178 | + * @permission ohos.permission.kernel.TRAFFIC_FILTER | ||
| 179 | + * @since 26.1.0 | ||
| 180 | + */ | ||
| 181 | +int32_t OH_TrafficFilter_CreatePacketController( | ||
| 182 | + uint32_t group_id, | ||
| 183 | + uint32_t priority, | ||
| 184 | + const OH_TrafficFilter_Config* config, | ||
| 185 | + OH_TrafficFilter_PacketController** controller | ||
| 186 | +); | ||
| 187 | + | ||
| 188 | +/** | ||
| 189 | + * @brief 销毁报文控制器实例。 | ||
| 190 | + * | ||
| 191 | + * 销毁控制器实例并释放相关资源(包括规则),调用后句柄将失效。 | ||
| 192 | + * | ||
| 193 | + * @param controller OH_TrafficFilter_PacketController句柄。 | ||
| 194 | + * @return <ul><li>{@link OH_TRAFFICFILTER_OK} 成功。</li> | ||
| 195 | + * <li>{@link OH_TRAFFICFILTER_ERROR_PERMISSION_DENIED} 缺少权限。</li> | ||
| 196 | + * <li>{@link OH_TRAFFICFILTER_ERROR_INVALID_PARAM} controller为NULL。</li> | ||
| 197 | + * <li>{@link OH_TRAFFICFILTER_ERROR_NOT_FOUND} 未找到指定的控制器句柄。</li></ul> | ||
| 198 | + * | ||
| 199 | + * @permission ohos.permission.kernel.TRAFFIC_FILTER | ||
| 200 | + * @since 26.1.0 | ||
| 201 | + */ | ||
| 202 | +int32_t OH_TrafficFilter_DestroyPacketController(OH_TrafficFilter_PacketController* controller); | ||
| 203 | + | ||
| 204 | +/** | ||
| 205 | + * @brief 注册报文回调函数。 | ||
| 206 | + * | ||
| 207 | + * 注册一个回调函数用于处理拦截到的报文,当报文匹配到过滤规则时,将触发该回调。 | ||
| 208 | + * | ||
| 209 | + * @note 如需释放回调,需调用{@link OH_TrafficFilter_UnregisterPacketCallback}。 | ||
| 210 | + * @param controller {@link OH_TrafficFilter_PacketController}句柄。 | ||
| 211 | + * @param callback 回调函数指针。不能为NULL。 | ||
| 212 | + * @param userData 用户数据(将在回调中回传)。 | ||
| 213 | + * @return <ul><li>{@link OH_TRAFFICFILTER_OK} 成功。</li> | ||
| 214 | + * <li>{@link OH_TRAFFICFILTER_ERROR_PERMISSION_DENIED} 缺少权限。</li> | ||
| 215 | + * <li>{@link OH_TRAFFICFILTER_ERROR_INVALID_PARAM} controller或callback为NULL。</li></ul> | ||
| 216 | + * | ||
| 217 | + * @permission ohos.permission.kernel.TRAFFIC_FILTER | ||
| 218 | + * @since 26.1.0 | ||
| 219 | + */ | ||
| 220 | +int32_t OH_TrafficFilter_RegisterPacketCallback( | ||
| 221 | + OH_TrafficFilter_PacketController* controller, | ||
| 222 | + OH_TrafficFilter_PacketCallback callback, | ||
| 223 | + void* userData | ||
| 224 | +); | ||
| 225 | + | ||
| 226 | +/** | ||
| 227 | + * @brief 注销报文回调函数。 | ||
| 228 | + * | ||
| 229 | + * @param controller {@link OH_TrafficFilter_PacketController}句柄。 | ||
| 230 | + * @return <ul><li>{@link OH_TRAFFICFILTER_OK} 成功。</li> | ||
| 231 | + * <li>{@link OH_TRAFFICFILTER_ERROR_PERMISSION_DENIED} 缺少权限。</li> | ||
| 232 | + * <li>{@link OH_TRAFFICFILTER_ERROR_INVALID_PARAM} controller为NULL。</li></ul> | ||
| 233 | + * | ||
| 234 | + * @permission ohos.permission.kernel.TRAFFIC_FILTER | ||
| 235 | + * @since 26.1.0 | ||
| 236 | + */ | ||
| 237 | +int32_t OH_TrafficFilter_UnregisterPacketCallback(OH_TrafficFilter_PacketController* controller); | ||
| 238 | + | ||
| 239 | +/** | ||
| 240 | + * @brief 设置报文过滤规则。 | ||
| 241 | + * | ||
| 242 | + * @note 逻辑关系: | ||
| 243 | + * - 单个{@link OH_TrafficFilter_FilterRule}结构内的条件为逻辑与关系。 | ||
| 244 | + * - 添加到同一{@link OH_TrafficFilter_PacketController}的多个规则为逻辑或关系。 | ||
| 245 | + * 如需清除过滤规则,需调用{@link OH_TrafficFilter_ClearPacketRule}。 | ||
| 246 | + * @param controller {@link OH_TrafficFilter_PacketController}句柄。 | ||
| 247 | + * @param rule 过滤规则。不能为NULL。 | ||
| 248 | + * @return <ul><li>{@link OH_TRAFFICFILTER_OK} 成功。</li> | ||
| 249 | + * <li>{@link OH_TRAFFICFILTER_ERROR_PERMISSION_DENIED} 缺少权限。</li> | ||
| 250 | + * <li>{@link OH_TRAFFICFILTER_ERROR_INVALID_PARAM} controller或rule为NULL。</li> | ||
| 251 | + * <li>{@link OH_TRAFFICFILTER_ERROR_TOO_MANY_RULES} 添加的规则过多。</li></ul> | ||
| 252 | + * | ||
| 253 | + * @permission ohos.permission.kernel.TRAFFIC_FILTER | ||
| 254 | + * @since 26.1.0 | ||
| 255 | + */ | ||
| 256 | +int32_t OH_TrafficFilter_AddPacketRule( | ||
| 257 | + OH_TrafficFilter_PacketController* controller, | ||
| 258 | + const OH_TrafficFilter_FilterRule* rule | ||
| 259 | +); | ||
| 260 | + | ||
| 261 | +/** | ||
| 262 | + * @brief 清除报文过滤规则。 | ||
| 263 | + * | ||
| 264 | + * @param controller {@link OH_TrafficFilter_PacketController}句柄。 | ||
| 265 | + * @return <ul><li>{@link OH_TRAFFICFILTER_OK} 成功。</li> | ||
| 266 | + * <li>{@link OH_TRAFFICFILTER_ERROR_PERMISSION_DENIED} 缺少权限。</li> | ||
| 267 | + * <li>{@link OH_TRAFFICFILTER_ERROR_INVALID_PARAM} controller为NULL。</li></ul> | ||
| 268 | + * | ||
| 269 | + * @permission ohos.permission.kernel.TRAFFIC_FILTER | ||
| 270 | + * @since 26.1.0 | ||
| 271 | + */ | ||
| 272 | +int32_t OH_TrafficFilter_ClearPacketRule(OH_TrafficFilter_PacketController* controller); | ||
| 273 | + | ||
| 159 | 274 | ||
| 160 | } | 275 | } |
| 161 | 276 | ||
| @@ -144,6 +144,96 @@ extern "C" { | |||
| 144 | 144 | ||
| 145 | 145 | ||
| 146 | 146 | ||
| 147 | +/** | ||
| 148 | + * @brief TCP 同步标志。 | ||
| 149 | + * @since 26.1.0 | ||
| 150 | + */ | ||
| 151 | + | ||
| 152 | + | ||
| 153 | +/** | ||
| 154 | + * @brief TCP 确认标志。 | ||
| 155 | + * @since 26.1.0 | ||
| 156 | + */ | ||
| 157 | + | ||
| 158 | + | ||
| 159 | +/** | ||
| 160 | + * @brief TCP 结束标志。 | ||
| 161 | + * @since 26.1.0 | ||
| 162 | + */ | ||
| 163 | + | ||
| 164 | + | ||
| 165 | +/** | ||
| 166 | + * @brief TCP 复位标志。 | ||
| 167 | + * @since 26.1.0 | ||
| 168 | + */ | ||
| 169 | + | ||
| 170 | + | ||
| 171 | +/** | ||
| 172 | + * @brief TCP 推送标志。 | ||
| 173 | + * @since 26.1.0 | ||
| 174 | + */ | ||
| 175 | + | ||
| 176 | + | ||
| 177 | +/** | ||
| 178 | + * @brief TCP 紧急标志。 | ||
| 179 | + * @since 26.1.0 | ||
| 180 | + */ | ||
| 181 | + | ||
| 182 | + | ||
| 183 | +/** | ||
| 184 | + * @brief 所有 TCP 标志位掩码。 | ||
| 185 | + * @since 26.1.0 | ||
| 186 | + */ | ||
| 187 | + | ||
| 188 | + | ||
| 189 | +/** | ||
| 190 | + * @brief 无 TCP 标志。 | ||
| 191 | + * @since 26.1.0 | ||
| 192 | + */ | ||
| 193 | + | ||
| 194 | + | ||
| 195 | +/** | ||
| 196 | + * @brief 任意连接状态。 | ||
| 197 | + * @since 26.1.0 | ||
| 198 | + */ | ||
| 199 | + | ||
| 200 | + | ||
| 201 | +/** | ||
| 202 | + * @brief 新连接。 | ||
| 203 | + * @since 26.1.0 | ||
| 204 | + */ | ||
| 205 | + | ||
| 206 | + | ||
| 207 | +/** | ||
| 208 | + * @brief 已建立的连接。 | ||
| 209 | + * @since 26.1.0 | ||
| 210 | + */ | ||
| 211 | + | ||
| 212 | + | ||
| 213 | +/** | ||
| 214 | + * @brief 关联连接(如 FTP 数据连接)。 | ||
| 215 | + * @since 26.1.0 | ||
| 216 | + */ | ||
| 217 | + | ||
| 218 | + | ||
| 219 | +/** | ||
| 220 | + * @brief 无效连接。 | ||
| 221 | + * @since 26.1.0 | ||
| 222 | + */ | ||
| 223 | + | ||
| 224 | + | ||
| 225 | +/** | ||
| 226 | + * @brief 未跟踪的连接。 | ||
| 227 | + * @since 26.1.0 | ||
| 228 | + */ | ||
| 229 | + | ||
| 230 | + | ||
| 231 | +/** | ||
| 232 | + * @brief MAC地址字符串的最大长度(XX:XX:XX:XX:XX:XX格式)。 | ||
| 233 | + * @since 26.1.0 | ||
| 234 | + */ | ||
| 235 | + | ||
| 236 | + | ||
| 147 | /** | 237 | /** |
| 148 | * @brief 流量过滤与重定向错误码。 | 238 | * @brief 流量过滤与重定向错误码。 |
| 149 | * @since 26.0.0 | 239 | * @since 26.0.0 |
| @@ -745,6 +835,295 @@ typedef struct OH_TrafficFilter_RedirectRule { | |||
| 745 | uint16_t proxyPort; | 835 | uint16_t proxyPort; |
| 746 | } OH_TrafficFilter_RedirectRule; | 836 | } OH_TrafficFilter_RedirectRule; |
| 747 | 837 | ||
| 838 | +/** | ||
| 839 | + * @brief MAC地址匹配条件。 | ||
| 840 | + * @since 26.1.0 | ||
| 841 | + */ | ||
| 842 | +typedef struct OH_TrafficFilter_MACMatch { | ||
| 843 | + /** | ||
| 844 | + * @brief 是否启用MAC地址匹配,true表示启用MAC地址匹配,false表示不启用MAC地址匹配。 | ||
| 845 | + * @since 26.1.0 | ||
| 846 | + */ | ||
| 847 | + bool enable; | ||
| 848 | + /** | ||
| 849 | + * @brief 是否反转匹配结果。true表示反转匹配结果,false表示不反转匹配结果。 | ||
| 850 | + * @since 26.1.0 | ||
| 851 | + */ | ||
| 852 | + bool invert; | ||
| 853 | + /** | ||
| 854 | + * @brief 源MAC地址(XX:XX:XX:XX:XX:XX格式)。 | ||
| 855 | + * @since 26.1.0 | ||
| 856 | + */ | ||
| 857 | + char srcMac[OH_TRAFFICFILTER_MAC_ADDRSTRLEN]; | ||
| 858 | +} OH_TrafficFilter_MACMatch; | ||
| 859 | + | ||
| 860 | +/** | ||
| 861 | + * @brief TCP标志位匹配条件。 | ||
| 862 | + * @since 26.1.0 | ||
| 863 | + */ | ||
| 864 | +typedef struct OH_TrafficFilter_TCPFlagsMatch { | ||
| 865 | + /** | ||
| 866 | + * @brief 是否启用TCP标志位匹配,true表示启用TCP标志位匹配,false表示不启用TCP标志位匹配。 | ||
| 867 | + * @since 26.1.0 | ||
| 868 | + */ | ||
| 869 | + bool enable; | ||
| 870 | + /** | ||
| 871 | + * @brief 标志位掩码(指定检查哪些标志位,使用TCP标志位常量)。 | ||
| 872 | + * @since 26.1.0 | ||
| 873 | + */ | ||
| 874 | + uint8_t flagMask; | ||
| 875 | + /** | ||
| 876 | + * @brief 标志位比较值(指定哪些标志位必须置位)。 | ||
| 877 | + * @since 26.1.0 | ||
| 878 | + */ | ||
| 879 | + uint8_t flagComp; | ||
| 880 | +} OH_TrafficFilter_TCPFlagsMatch; | ||
| 881 | + | ||
| 882 | +/** | ||
| 883 | + * @brief 连接跟踪(conntrack)匹配条件。 | ||
| 884 | + * @since 26.1.0 | ||
| 885 | + */ | ||
| 886 | +typedef struct OH_TrafficFilter_ConntrackMatch { | ||
| 887 | + /** | ||
| 888 | + * @brief 是否启用连接跟踪匹配,true表示启用连接跟踪匹配,false表示不启用连接跟踪匹配。 | ||
| 889 | + * @since 26.1.0 | ||
| 890 | + */ | ||
| 891 | + bool enable; | ||
| 892 | + /** | ||
| 893 | + * @brief 连接状态(使用OH_TRAFFICFILTER_CT_STATE_*位图)。 | ||
| 894 | + * @since 26.1.0 | ||
| 895 | + */ | ||
| 896 | + uint8_t stateMask; | ||
| 897 | +} OH_TrafficFilter_ConntrackMatch; | ||
| 898 | + | ||
| 899 | +/** | ||
| 900 | + * @brief 报文复制模式枚举。 | ||
| 901 | + * @since 26.1.0 | ||
| 902 | + */ | ||
| 903 | +typedef enum OH_TrafficFilter_PacketCopyMode { | ||
| 904 | + /** | ||
| 905 | + * @brief 仅复制元数据(不复制报文数据)。 | ||
| 906 | + * @since 26.1.0 | ||
| 907 | + */ | ||
| 908 | + OH_TRAFFICFILTER_COPY_MODE_META = 0, | ||
| 909 | + /** | ||
| 910 | + * @brief 仅复制报文头部(由 packetCopyLen 指定)。 | ||
| 911 | + * @since 26.1.0 | ||
| 912 | + */ | ||
| 913 | + OH_TRAFFICFILTER_COPY_MODE_HEADER = 1, | ||
| 914 | + /** | ||
| 915 | + * @brief 复制整个报文。 | ||
| 916 | + * @since 26.1.0 | ||
| 917 | + */ | ||
| 918 | + OH_TRAFFICFILTER_COPY_MODE_FULL = 2, | ||
| 919 | + /** | ||
| 920 | + * @brief 复制指定最大长度的报文。 | ||
| 921 | + * @since 26.1.0 | ||
| 922 | + */ | ||
| 923 | + OH_TRAFFICFILTER_COPY_MODE_MAXLEN = 3 | ||
| 924 | +} OH_TrafficFilter_PacketCopyMode; | ||
| 925 | + | ||
| 926 | +/** | ||
| 927 | + * @brief NFQueue配置结构体。 | ||
| 928 | + * @since 26.1.0 | ||
| 929 | + */ | ||
| 930 | +typedef struct OH_TrafficFilter_Config { | ||
| 931 | + /** | ||
| 932 | + * @brief 调用者分配的结构体实际大小。 | ||
| 933 | + * @since 26.1.0 | ||
| 934 | + */ | ||
| 935 | + uint32_t size; | ||
| 936 | + /** | ||
| 937 | + * @brief NFQueue 报文拷贝模式,请参考OH_TrafficFilter_PacketCopyMode。 | ||
| 938 | + * @since 26.1.0 | ||
| 939 | + */ | ||
| 940 | + uint32_t packetCopyMode; | ||
| 941 | + /** | ||
| 942 | + * @brief NFQueue报文拷贝长度(字节),0xFFFF表示拷贝整个报文,较小的值仅拷贝报文头。 | ||
| 943 | + * @since 26.1.0 | ||
| 944 | + */ | ||
| 945 | + uint32_t packetCopyLen; | ||
| 946 | + /** | ||
| 947 | + * @brief NFQueue最大队列长度(报文数量),0表示使用系统默认值(1024)。 | ||
| 948 | + * @since 26.1.0 | ||
| 949 | + */ | ||
| 950 | + uint32_t nfqueueMaxlen; | ||
| 951 | + /** | ||
| 952 | + * @brief NFQueue队列标志,参见{@link OH_TRAFFICFILTER_NFQUEUE_FLAG_FAIL_OPEN}。 | ||
| 953 | + * @since 26.1.0 | ||
| 954 | + */ | ||
| 955 | + uint32_t nfqueueFlags; | ||
| 956 | +} OH_TrafficFilter_Config; | ||
| 957 | + | ||
| 958 | +/** | ||
| 959 | + * @brief 报文过滤规则。 | ||
| 960 | + * @since 26.1.0 | ||
| 961 | + */ | ||
| 962 | +typedef struct OH_TrafficFilter_FilterRule { | ||
| 963 | + /** | ||
| 964 | + * @brief 调用者分配的结构体实际大小。 | ||
| 965 | + * @since 26.1.0 | ||
| 966 | + */ | ||
| 967 | + uint32_t size; | ||
| 968 | + /** | ||
| 969 | + * @brief 优先级(数值越小优先级越高)。 | ||
| 970 | + * @since 26.1.0 | ||
| 971 | + */ | ||
| 972 | + uint32_t priority; | ||
| 973 | + /** | ||
| 974 | + * @brief 钩子点。 | ||
| 975 | + * @since 26.1.0 | ||
| 976 | + */ | ||
| 977 | + OH_TrafficFilter_HookPoint hookPoint; | ||
| 978 | + /** | ||
| 979 | + * @brief 协议类型(0=任意,6=TCP,17=UDP)。 | ||
| 980 | + * @since 26.1.0 | ||
| 981 | + */ | ||
| 982 | + uint8_t protocol; | ||
| 983 | + /** | ||
| 984 | + * @brief 源IP匹配条件。 | ||
| 985 | + * @since 26.1.0 | ||
| 986 | + */ | ||
| 987 | + OH_TrafficFilter_IPMatch srcIp; | ||
| 988 | + /** | ||
| 989 | + * @brief 源端口匹配条件。 | ||
| 990 | + * @since 26.1.0 | ||
| 991 | + */ | ||
| 992 | + OH_TrafficFilter_PortMatch srcPort; | ||
| 993 | + /** | ||
| 994 | + * @brief 目的IP匹配条件。 | ||
| 995 | + * @since 26.1.0 | ||
| 996 | + */ | ||
| 997 | + OH_TrafficFilter_IPMatch dstIp; | ||
| 998 | + /** | ||
| 999 | + * @brief 目的端口匹配条件。 | ||
| 1000 | + * @since 26.1.0 | ||
| 1001 | + */ | ||
| 1002 | + OH_TrafficFilter_PortMatch dstPort; | ||
| 1003 | + /** | ||
| 1004 | + * @brief 入接口匹配条件。 | ||
| 1005 | + * @since 26.1.0 | ||
| 1006 | + */ | ||
| 1007 | + OH_TrafficFilter_InterfaceMatch inInterface; | ||
| 1008 | + /** | ||
| 1009 | + * @brief 出接口匹配条件。 | ||
| 1010 | + * @since 26.1.0 | ||
| 1011 | + */ | ||
| 1012 | + OH_TrafficFilter_InterfaceMatch outInterface; | ||
| 1013 | + /** | ||
| 1014 | + * @brief 应用UID范围起始值(UINT32_MAX表示任意)。 | ||
| 1015 | + * @since 26.1.0 | ||
| 1016 | + */ | ||
| 1017 | + uint32_t uidStart; | ||
| 1018 | + /** | ||
| 1019 | + * @brief 应用UID范围结束值(UINT32_MAX表示任意)。 | ||
| 1020 | + * @since 26.1.0 | ||
| 1021 | + */ | ||
| 1022 | + uint32_t uidEnd; | ||
| 1023 | + /** | ||
| 1024 | + * @brief MAC地址匹配条件(仅源MAC地址)。 | ||
| 1025 | + * @since 26.1.0 | ||
| 1026 | + */ | ||
| 1027 | + OH_TrafficFilter_MACMatch macMatch; | ||
| 1028 | + /** | ||
| 1029 | + * @brief TCP标志位匹配条件(仅对TCP协议有效)。 | ||
| 1030 | + * @since 26.1.0 | ||
| 1031 | + */ | ||
| 1032 | + OH_TrafficFilter_TCPFlagsMatch tcpFlagsMatch; | ||
| 1033 | + /** | ||
| 1034 | + * @brief 连接跟踪匹配条件。 | ||
| 1035 | + * @since 26.1.0 | ||
| 1036 | + */ | ||
| 1037 | + OH_TrafficFilter_ConntrackMatch conntrackMatch; | ||
| 1038 | +} OH_TrafficFilter_FilterRule; | ||
| 1039 | + | ||
| 1040 | +/** | ||
| 1041 | + * @brief 报文控制器。 | ||
| 1042 | + * @since 26.1.0 | ||
| 1043 | + */ | ||
| 1044 | +typedef struct OH_TrafficFilter_PacketController OH_TrafficFilter_PacketController; | ||
| 1045 | + | ||
| 1046 | +/** | ||
| 1047 | + * @brief 报文处理决策类型。 | ||
| 1048 | + * @since 26.1.0 | ||
| 1049 | + */ | ||
| 1050 | +typedef enum OH_TrafficFilter_PacketDecision { | ||
| 1051 | + /** | ||
| 1052 | + * @brief 接受报文。 | ||
| 1053 | + * @since 26.1.0 | ||
| 1054 | + */ | ||
| 1055 | + OH_TRAFFICFILTER_DECISION_ACCEPT = 0, | ||
| 1056 | + /** | ||
| 1057 | + * @brief 丢弃报文。 | ||
| 1058 | + * @since 26.1.0 | ||
| 1059 | + */ | ||
| 1060 | + OH_TRAFFICFILTER_DECISION_DROP | ||
| 1061 | +} OH_TrafficFilter_PacketDecision; | ||
| 1062 | + | ||
| 1063 | +/** | ||
| 1064 | + * @brief 报文描述符。 | ||
| 1065 | + * @since 26.1.0 | ||
| 1066 | + */ | ||
| 1067 | +typedef struct OH_TrafficFilter_PacketDesc { | ||
| 1068 | + /** | ||
| 1069 | + * @brief 报文ID(报文到达netfilter时由内核分配)。 | ||
| 1070 | + * @since 26.1.0 | ||
| 1071 | + */ | ||
| 1072 | + uint32_t packetId; | ||
| 1073 | + /** | ||
| 1074 | + * @brief 协议类型。 | ||
| 1075 | + * @since 26.1.0 | ||
| 1076 | + */ | ||
| 1077 | + uint8_t protocol; | ||
| 1078 | + /** | ||
| 1079 | + * @brief 源IP地址(支持IPv4和IPv6)。 | ||
| 1080 | + * @since 26.1.0 | ||
| 1081 | + */ | ||
| 1082 | + OH_TrafficFilter_IPAddress srcIp; | ||
| 1083 | + /** | ||
| 1084 | + * @brief 源端口。 | ||
| 1085 | + * @since 26.1.0 | ||
| 1086 | + */ | ||
| 1087 | + uint16_t srcPort; | ||
| 1088 | + /** | ||
| 1089 | + * @brief 目的IP地址(支持IPv4和IPv6)。 | ||
| 1090 | + * @since 26.1.0 | ||
| 1091 | + */ | ||
| 1092 | + OH_TrafficFilter_IPAddress dstIp; | ||
| 1093 | + /** | ||
| 1094 | + * @brief 目的端口。 | ||
| 1095 | + * @since 26.1.0 | ||
| 1096 | + */ | ||
| 1097 | + uint16_t dstPort; | ||
| 1098 | + /** | ||
| 1099 | + * @brief 报文长度。 | ||
| 1100 | + * @since 26.1.0 | ||
| 1101 | + */ | ||
| 1102 | + uint32_t packetLen; | ||
| 1103 | + /** | ||
| 1104 | + * @brief 报文数据指针(用户可修改,内存由系统管理,仅在回调期间有效)。 | ||
| 1105 | + * @since 26.1.0 | ||
| 1106 | + */ | ||
| 1107 | + uint8_t* data; | ||
| 1108 | + /** | ||
| 1109 | + * @brief 用户数据(在回调中使用)。 | ||
| 1110 | + * @since 26.1.0 | ||
| 1111 | + */ | ||
| 1112 | + void* userData; | ||
| 1113 | +} OH_TrafficFilter_PacketDesc; | ||
| 1114 | + | ||
| 1115 | +/** | ||
| 1116 | + * @brief 报文回调函数类型。 | ||
| 1117 | + * | ||
| 1118 | + * @param packet 报文描述符。 | ||
| 1119 | + * @param userData 用户数据。 | ||
| 1120 | + * @return 报文处理决策(接受或丢弃)。 | ||
| 1121 | + * @since 26.1.0 | ||
| 1122 | + */ | ||
| 1123 | +typedef OH_TrafficFilter_PacketDecision (*OH_TrafficFilter_PacketCallback)( | ||
| 1124 | + const OH_TrafficFilter_PacketDesc* packet, | ||
| 1125 | + void* userData | ||
| 1126 | +); | ||
| 748 | 1127 | ||
| 749 | } | 1128 | } |
| 750 | 1129 | ||