37#ifndef PROTOCORE_FORWARD_H
38#define PROTOCORE_FORWARD_H
48#if PROTOCORE_ENABLE_FORWARD
56 PROTOCORE_FWD_DENY = 0,
57 PROTOCORE_FWD_ALLOW = 1,
58} protocore_fwd_action;
61#define PROTOCORE_FWD_IF_ANY 0xFF
69 uint32_t rate_dropped;
72 uint32_t policy_routed;
73 uint32_t inspect_dropped;
74} protocore_forward_stats;
76#if PROTOCORE_FWD_INSPECT
80 PROTOCORE_FWD_INSPECT_PASS = 0,
81 PROTOCORE_FWD_INSPECT_DROP = 1,
82} protocore_fwd_verdict;
88typedef protocore_fwd_verdict (*protocore_fwd_inspect_fn)(uint8_t src_if,
const uint8_t *data, uint16_t len,
void *ctx);
95 protocore_fwd_action action;
96 uint16_t rate_cap_per_sec;
105 const uint8_t *pattern;
114 protocore_fwd_action action;
115 protocore_fwd_action fallback;
122 uint16_t rate_cap_per_sec;
132#if PROTOCORE_FWD_INSPECT
136 protocore_fwd_inspect_fn fn;
177#if PROTOCORE_FWD_INSPECT
178 FwdInspectArgs inspect;
182 protocore_forward_stats stats;
183#if PROTOCORE_FWD_INSPECT
188extern ForwardVars ForwardV;
193 void (*
const reset)(uint8_t *work);
194 void (*
const add_rule)(uint8_t *work);
195 void (*
const acl_set_default)(uint8_t *work);
196 void (*
const acl_add)(uint8_t *work);
197 void (*
const route_add)(uint8_t *work);
198 void (*
const set_inspector)(uint8_t *work);
199 void (*
const ingress)(uint8_t *work);
200 void (*
const get_stats)(uint8_t *work);
205void protocore_forward_reset(uint8_t *work);
206void protocore_forward_add_rule(uint8_t *work);
207void protocore_forward_acl_set_default(uint8_t *work);
208void protocore_forward_acl_add(uint8_t *work);
209void protocore_forward_route_add(uint8_t *work);
210#if PROTOCORE_FWD_INSPECT
211void protocore_forward_set_inspector(uint8_t *work);
213void protocore_forward_ingress(uint8_t *work);
214void protocore_forward_get_stats(uint8_t *work);
220static const ForwardNs Forward __attribute__((unused)) = {
221 .reset = protocore_forward_reset,
222 .add_rule = protocore_forward_add_rule,
223 .acl_set_default = protocore_forward_acl_set_default,
224 .acl_add = protocore_forward_acl_add,
225 .route_add = protocore_forward_route_add,
226#if PROTOCORE_FWD_INSPECT
227 .set_inspector = protocore_forward_set_inspector,
229 .ingress = protocore_forward_ingress,
230 .get_stats = protocore_forward_get_stats,
242uint8_t *protocore_forward_span(
void);
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
Layer 1 (Physical) - link bring-up, the interface registry, and live egress reporting.
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS