From 9f39cf4852eedcf090bfce8069f4aea742421d88 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Sat, 28 Feb 2026 15:44:53 +0800 Subject: [PATCH] fix --- apps/sdlan/include/policy.hrl | 42 +++++++++++++++++++ apps/sdlan/src/policy/identity_ets.erl | 21 ++++++++++ apps/sdlan/src/policy/identity_policy_ets.erl | 17 ++++++++ apps/sdlan/src/policy/policy_ets.erl | 16 +++++++ apps/sdlan/src/policy/rule_ets.erl | 16 +++++++ 5 files changed, 112 insertions(+) create mode 100644 apps/sdlan/include/policy.hrl create mode 100644 apps/sdlan/src/policy/identity_ets.erl create mode 100644 apps/sdlan/src/policy/identity_policy_ets.erl create mode 100644 apps/sdlan/src/policy/policy_ets.erl create mode 100644 apps/sdlan/src/policy/rule_ets.erl diff --git a/apps/sdlan/include/policy.hrl b/apps/sdlan/include/policy.hrl new file mode 100644 index 0000000..c7ec09b --- /dev/null +++ b/apps/sdlan/include/policy.hrl @@ -0,0 +1,42 @@ +%%%------------------------------------------------------------------- +%%% @author anlicheng +%%% @copyright (C) 2026, +%%% @doc +%%% +%%% @end +%%% Created : 28. 2月 2026 15:25 +%%%------------------------------------------------------------------- +-author("anlicheng"). + +-record(identity, { + identity_id :: integer(), + network_id :: integer(), + subject_type, + created_at :: integer(), + expired_at :: integer() +}). + +-record(identity_policy, { + identity_id :: integer(), + policy_id :: integer() +}). + +-record(policy, { + policy_id :: integer(), + network_id :: integer(), + name :: binary(), + created_at = 0 :: integer() +}). + +-record(rule, { + rule_id :: integer(), + policy_id :: integer(), + network_id :: integer(), + access_rule_id :: integer(), + src_policy_id :: integer(), + dst_policy_id :: integer(), + proto :: integer(), + port :: integer(), + action, + created_at = 0 :: integer() +}). \ No newline at end of file diff --git a/apps/sdlan/src/policy/identity_ets.erl b/apps/sdlan/src/policy/identity_ets.erl new file mode 100644 index 0000000..bb27491 --- /dev/null +++ b/apps/sdlan/src/policy/identity_ets.erl @@ -0,0 +1,21 @@ +-module(identity_ets). +-include("policy.hrl"). + +-export([init/0]). +-export([lookup/1, insert/1]). + +-define(TABLE, identity_ets_table). + +init() -> + ets:new(?TABLE, [named_table, ordered_set, public, {keypos, 2}, {read_concurrency, true}]). + +lookup(IdentityId) when is_integer(IdentityId) -> + case ets:lookup(?TABLE, IdentityId) of + [Identity] -> + {ok, Identity}; + [] -> + error + end. + +insert(Identity = #identity{}) -> + true = ets:insert(?TABLE, Identity). \ No newline at end of file diff --git a/apps/sdlan/src/policy/identity_policy_ets.erl b/apps/sdlan/src/policy/identity_policy_ets.erl new file mode 100644 index 0000000..90b24a1 --- /dev/null +++ b/apps/sdlan/src/policy/identity_policy_ets.erl @@ -0,0 +1,17 @@ +-module(identity_policy_ets). +-include("policy.hrl"). + +-export([init/0]). +-export([lookup/1, insert/1]). + +-define(TABLE, identity_policy_ets_table). + +init() -> + ets:new(?TABLE, [named_table, bag, public, {keypos, 2}, {read_concurrency, true}]). + +lookup(IdentityId) when is_integer(IdentityId) -> + Records = ets:lookup(?TABLE, IdentityId), + lists:map(fun(#identity_policy{policy_id = PolicyId}) -> PolicyId end, Records). + +insert(IdentityPolicy = #identity_policy{}) -> + true = ets:insert(?TABLE, IdentityPolicy). \ No newline at end of file diff --git a/apps/sdlan/src/policy/policy_ets.erl b/apps/sdlan/src/policy/policy_ets.erl new file mode 100644 index 0000000..8310846 --- /dev/null +++ b/apps/sdlan/src/policy/policy_ets.erl @@ -0,0 +1,16 @@ +-module(policy_ets). +-include("policy.hrl"). + +-export([init/0]). +-export([lookup/1, insert/1]). + +-define(TABLE, policy_ets_table). + +init() -> + ets:new(?TABLE, [named_table, ordered_set, public, {keypos, 2}, {read_concurrency, true}]). + +lookup(PolicyId) when is_integer(PolicyId) -> + Records = ets:lookup(?TABLE, PolicyId). + +insert(Policy = #policy{}) -> + true = ets:insert(?TABLE, Policy). \ No newline at end of file diff --git a/apps/sdlan/src/policy/rule_ets.erl b/apps/sdlan/src/policy/rule_ets.erl new file mode 100644 index 0000000..7de28e7 --- /dev/null +++ b/apps/sdlan/src/policy/rule_ets.erl @@ -0,0 +1,16 @@ +-module(rule_ets). +-include("policy.hrl"). + +-export([init/0]). +-export([lookup/1, insert/1]). + +-define(TABLE, policy_ets_table). + +init() -> + ets:new(?TABLE, [named_table, ordered_set, public, {keypos, 2}, {read_concurrency, true}]). + +lookup(PolicyId) when is_integer(PolicyId) -> + Records = ets:lookup(?TABLE, PolicyId). + +insert(Rule = #rule{}) -> + true = ets:insert(?TABLE, Rule). \ No newline at end of file