46#ifndef DETERMINISTICESPASYNCWEBSERVER_DET_FORWARD_H
47#define DETERMINISTICESPASYNCWEBSERVER_DET_FORWARD_H
51#if DETWS_ENABLE_FORWARD
57enum class det_if_kind : uint8_t
68enum class det_fwd_action : uint8_t
75#define DET_FWD_IF_ANY 0xFF
81using det_if_send_fn = bool (*)(uint8_t if_id,
const uint8_t *data, uint16_t len,
void *ctx);
84struct det_forward_stats
89 uint32_t rate_dropped;
92 uint32_t policy_routed;
93 uint32_t inspect_dropped;
97void det_forward_reset(
void);
104bool det_forward_add_if(uint8_t if_id, det_if_kind kind, det_if_send_fn send,
void *ctx);
111bool det_forward_add_rule(uint8_t src_if, uint8_t dst_if, det_fwd_action action, uint16_t rate_cap_per_sec);
118void det_forward_acl_set_default(det_fwd_action action);
131bool det_forward_acl_add(uint8_t src_if, uint16_t offset,
const uint8_t *pattern,
const uint8_t *mask, uint8_t patlen,
132 det_fwd_action action);
148bool det_forward_route_add(uint8_t src_if, uint16_t offset,
const uint8_t *pattern,
const uint8_t *mask, uint8_t patlen,
149 uint8_t egress_if, uint16_t rate_cap_per_sec);
153enum class det_fwd_verdict : uint8_t
155 DET_FWD_INSPECT_PASS = 0,
156 DET_FWD_INSPECT_DROP = 1,
164using det_fwd_inspect_fn = det_fwd_verdict (*)(uint8_t src_if,
const uint8_t *data, uint16_t len,
void *ctx);
172void det_forward_set_inspector(det_fwd_inspect_fn fn,
void *ctx);
182uint8_t det_forward_ingress(uint8_t src_if,
const uint8_t *data, uint16_t len);
185void det_forward_get_stats(det_forward_stats *out);
190void det_forward_test_set_now(uint32_t ms);
User-facing configuration for DeterministicESPAsyncWebServer.