Skip to main content

atm0s_sdn_network/
lib.rs

1#![allow(clippy::bool_assert_comparison)]
2
3use atm0s_sdn_identity::{ConnId, NodeId};
4use atm0s_sdn_router::RouteRule;
5use base::{FeatureControlActor, NeighboursControl, NetIncomingMeta, NetOutgoingMeta, SecureContext, ServiceControlActor, ServiceId};
6use data_plane::{CrossWorker, NetPair};
7use features::{Features, FeaturesControl, FeaturesEvent, FeaturesToController, FeaturesToWorker};
8use sans_io_runtime::Buffer;
9
10#[cfg(feature = "fuzz")]
11pub mod _fuzz_export;
12pub mod base;
13pub mod controller_plane;
14pub mod data_plane;
15pub mod features;
16pub mod secure;
17pub mod services;
18pub mod worker;
19
20#[derive(Debug, Clone)]
21pub enum ExtIn<UserData, ServicesControl> {
22    FeaturesControl(UserData, FeaturesControl),
23    ServicesControl(ServiceId, UserData, ServicesControl),
24}
25
26#[derive(Debug, Clone, PartialEq, Eq)]
27pub enum ExtOut<UserData, ServicesEvent> {
28    FeaturesEvent(UserData, FeaturesEvent),
29    ServicesEvent(ServiceId, UserData, ServicesEvent),
30}
31
32#[derive(Debug, Clone)]
33pub enum LogicControl<UserData, SC, SE, TC> {
34    Feature(FeaturesToController),
35    Service(ServiceId, TC),
36    NetNeighbour(NetPair, NeighboursControl),
37    NetRemote(Features, ConnId, NetIncomingMeta, Buffer),
38    NetLocal(Features, NetIncomingMeta, Buffer),
39    FeaturesControl(FeatureControlActor<UserData>, FeaturesControl),
40    ServicesControl(ServiceControlActor<UserData>, ServiceId, SC),
41    ServiceEvent(ServiceId, FeaturesEvent),
42    ExtFeaturesEvent(UserData, FeaturesEvent),
43    ExtServicesEvent(ServiceId, UserData, SE),
44}
45
46#[derive(Debug, Clone)]
47pub enum LogicEvent<UserData, SE, TW> {
48    NetNeighbour(NetPair, NeighboursControl),
49    NetDirect(Features, NetPair, ConnId, NetOutgoingMeta, Buffer),
50    NetRoute(Features, RouteRule, NetOutgoingMeta, Buffer),
51
52    Pin(ConnId, NodeId, NetPair, SecureContext),
53    UnPin(ConnId),
54    /// first bool is flag for broadcast or not
55    Feature(bool, FeaturesToWorker<UserData>),
56    Service(ServiceId, TW),
57    /// first u16 is worker id
58    ExtFeaturesEvent(u16, UserData, FeaturesEvent),
59    /// first u16 is worker id
60    ExtServicesEvent(u16, ServiceId, UserData, SE),
61}
62
63pub enum LogicEventDest<UserData, SE, TW> {
64    Broadcast(LogicEvent<UserData, SE, TW>),
65    Worker(u16, CrossWorker<UserData, SE>),
66    Any(LogicEvent<UserData, SE, TW>),
67}
68
69impl<UserData, SE, TW> LogicEvent<UserData, SE, TW> {
70    pub fn with_dest(self) -> LogicEventDest<UserData, SE, TW> {
71        match self {
72            LogicEvent::Pin(..) => LogicEventDest::Broadcast(self),
73            LogicEvent::UnPin(..) => LogicEventDest::Broadcast(self),
74            LogicEvent::Service(..) => LogicEventDest::Broadcast(self),
75            LogicEvent::Feature(true, ..) => LogicEventDest::Broadcast(self),
76            LogicEvent::Feature(false, ..) => LogicEventDest::Any(self),
77            LogicEvent::NetNeighbour(_, _) => LogicEventDest::Any(self),
78            LogicEvent::NetDirect(_, _, _, _, _) => LogicEventDest::Any(self),
79            LogicEvent::NetRoute(_, _, _, _) => LogicEventDest::Any(self),
80            LogicEvent::ExtFeaturesEvent(worker, user_data, event) => LogicEventDest::Worker(worker, CrossWorker::Feature(user_data, event)),
81            LogicEvent::ExtServicesEvent(worker, service_id, user_data, event) => LogicEventDest::Worker(worker, CrossWorker::Service(service_id, user_data, event)),
82        }
83    }
84}