|
| 1 | +/* SPDX-License-Identifier: MIT */ |
| 2 | +/* AUTO-GENERATED by arbiterc — do not edit */ |
| 3 | + |
| 4 | +#include "arbiter_model.h" |
| 5 | +#include <arbiter/arbiter.h> |
| 6 | + |
| 7 | +static const struct ARBITER_fact_def model_facts[] = { |
| 8 | + { .id = 0, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.action" }, |
| 9 | + { .id = 1, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 10000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.icmp_rate" }, |
| 10 | + { .id = 2, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.is_dns" }, |
| 11 | + { .id = 3, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.is_syn" }, |
| 12 | + { .id = 4, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.payload_anomaly" }, |
| 13 | + { .id = 5, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.src_on_allowlist" }, |
| 14 | + { .id = 6, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.src_on_blocklist" }, |
| 15 | + { .id = 7, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 1000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "fw.syn_flood_score" }, |
| 16 | + { .id = 8, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 65535, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "net.dst_port" }, |
| 17 | + { .id = 9, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "net.is_established" }, |
| 18 | + { .id = 10, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 65535, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "net.packet_len" }, |
| 19 | + { .id = 11, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 255, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "net.protocol" }, |
| 20 | + { .id = 12, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 100000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "net.rate_pps" }, |
| 21 | +}; |
| 22 | + |
| 23 | +static const struct ARBITER_condition_def model_conditions[] = { |
| 24 | + { .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 25 | + { .fact_id = 5, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 26 | + { .fact_id = 9, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 27 | + { .fact_id = 4, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 28 | + { .fact_id = 3, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 29 | + { .fact_id = 7, .op = ARBITER_OP_GT, .value = 500, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 30 | + { .fact_id = 8, .op = ARBITER_OP_EQ, .value = 5683, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 31 | + { .fact_id = 11, .op = ARBITER_OP_EQ, .value = 2, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 32 | + { .fact_id = 8, .op = ARBITER_OP_EQ, .value = 8883, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 33 | + { .fact_id = 11, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 34 | + { .fact_id = 2, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 35 | + { .fact_id = 10, .op = ARBITER_OP_LE, .value = 512, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 36 | + { .fact_id = 11, .op = ARBITER_OP_EQ, .value = 3, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 37 | + { .fact_id = 1, .op = ARBITER_OP_GT, .value = 10, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 38 | + { .fact_id = 4, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 39 | + { .fact_id = 0, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX }, |
| 40 | +}; |
| 41 | + |
| 42 | +static const struct ARBITER_action_def model_actions[] = { |
| 43 | + { .id = 0, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "fw_drop" }, |
| 44 | + { .id = 1, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "fw_enable_syn_cookies" }, |
| 45 | + { .id = 2, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "fw_log_anomaly" }, |
| 46 | +}; |
| 47 | + |
| 48 | +static const struct ARBITER_rule_def model_rules[] = { |
| 49 | + { .id = 0, .rule_class = ARBITER_RULE_SAFETY_GUARD, .condition_start = 0, .condition_count = 1, .action_start = 0, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = true, .name = "01_fw.blocklist", .explanation = "Source on blocklist — drop and log." }, |
| 50 | + { .id = 1, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 1, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "02_fw.allowlist", .explanation = "Source on allowlist — accept." }, |
| 51 | + { .id = 2, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 2, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "10_fw.established", .explanation = "Established connection, no anomaly — accept." }, |
| 52 | + { .id = 3, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 4, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "20_fw.syn_flood_score", .explanation = "Compute SYN flood risk from packet rate." }, |
| 53 | + { .id = 4, .rule_class = ARBITER_RULE_SAFETY_GUARD, .condition_start = 5, .condition_count = 1, .action_start = 1, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = 3, .safety_critical = true, .name = "21_fw.syn_flood_active", .explanation = "SYN flood detected (score > 500) — enable SYN cookies, drop." }, |
| 54 | + { .id = 5, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 6, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "30_fw.allow_coap", .explanation = "CoAP (UDP/5683) — accept and log." }, |
| 55 | + { .id = 6, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 8, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "31_fw.allow_mqtt", .explanation = "MQTT-TLS (TCP/8883) — accept." }, |
| 56 | + { .id = 7, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 10, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "32_fw.allow_dns", .explanation = "DNS query (<=512 bytes) — accept." }, |
| 57 | + { .id = 8, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 12, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "33_fw.icmp_flood", .explanation = "ICMP rate > 10 pps — drop (ping flood)." }, |
| 58 | + { .id = 9, .rule_class = ARBITER_RULE_SAFETY_GUARD, .condition_start = 14, .condition_count = 1, .action_start = 2, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "40_fw.dpi_anomaly", .explanation = "Payload anomaly — drop and log for analysis." }, |
| 59 | + { .id = 10, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 15, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "99_fw.default_deny", .explanation = "Default deny — no rule matched." }, |
| 60 | +}; |
| 61 | + |
| 62 | +static const char *model_mode_names[] = { |
| 63 | + "mode.lockdown", |
| 64 | + "mode.normal", |
| 65 | + "mode.rate_limited", |
| 66 | + "mode.under_attack", |
| 67 | +}; |
| 68 | + |
| 69 | +const struct ARBITER_model ARBITER_generated_model = { |
| 70 | + .name = "embedded_firewall", |
| 71 | + .model_hash = { 0x99, 0x78, 0x23, 0x9a, 0xcd, 0xbe, 0xc9, 0xad, 0x1c, 0xb1, 0x38, 0xb5, 0xc9, 0xeb, 0xe0, 0x27, 0xc8, 0x0a, 0x74, 0xe3, 0x25, 0x8d, 0x7b, 0xea, 0xcc, 0xe1, 0x06, 0x40, 0x93, 0x37, 0x5a, 0xba }, |
| 72 | + .schema_hash = { 0x0d, 0x55, 0x33, 0x65, 0xf3, 0x4e, 0x02, 0xf3, 0xf8, 0x94, 0xe8, 0x25, 0xbb, 0x47, 0x86, 0x45, 0xfd, 0x8b, 0x78, 0xb1, 0x27, 0xf5, 0x8c, 0x42, 0xba, 0xbd, 0x80, 0x1f, 0x77, 0x57, 0x1f, 0x35 }, |
| 73 | + .fact_count = 13, |
| 74 | + .rule_count = 11, |
| 75 | + .condition_count = 16, |
| 76 | + .action_count = 3, |
| 77 | + .mode_count = 4, |
| 78 | + .facts = model_facts, |
| 79 | + .rules = model_rules, |
| 80 | + .conditions = model_conditions, |
| 81 | + .actions = model_actions, |
| 82 | + .mode_names = model_mode_names, |
| 83 | +}; |
0 commit comments