1#![allow(clippy::bool_assert_comparison)]
2
3use std::{fmt::Debug, hash::Hash};
4
5pub use atm0s_sdn_identity::{ConnDirection, ConnId, NodeAddr, NodeAddrBuilder, NodeId, NodeIdType, Protocol};
6pub use atm0s_sdn_network::controller_plane::ControllerPlaneCfg;
7pub use atm0s_sdn_network::data_plane::DataPlaneCfg;
8use atm0s_sdn_network::features::FeaturesControl;
9pub use atm0s_sdn_network::{
10 base, features, secure, services,
11 worker::{SdnWorker, SdnWorkerBusEvent, SdnWorkerCfg, SdnWorkerInput, SdnWorkerOutput},
12};
13pub use atm0s_sdn_network::{
14 base::ServiceId,
15 data_plane::{NetInput, NetOutput},
16};
17pub use atm0s_sdn_router::{shadow::ShadowRouterHistory, RouteRule, ServiceBroadcastLevel};
18pub use sans_io_runtime;
19
20mod builder;
21mod history;
22mod time;
23mod worker_inner;
24
25pub use builder::{generate_node_addr, SdnBuilder};
26pub use history::DataWorkerHistory;
27pub use time::{TimePivot, TimeTicker};
28pub use worker_inner::{SdnChannel, SdnController, SdnEvent, SdnExtIn, SdnExtOut, SdnOwner};
29
30pub trait SdnControllerUtils<UserData, SC> {
31 fn feature_control(&mut self, userdata: UserData, cmd: FeaturesControl);
32 fn service_control(&mut self, service: ServiceId, userdata: UserData, cmd: SC);
33}
34
35impl<
36 UserData: 'static + Send + Sync + Copy + Eq + Hash + Debug,
37 SC: 'static + Send + Sync + Clone,
38 SE: 'static + Send + Sync + Clone,
39 TC: 'static + Send + Sync + Clone,
40 TW: 'static + Send + Sync + Clone,
41 > SdnControllerUtils<UserData, SC> for SdnController<UserData, SC, SE, TC, TW>
42{
43 fn feature_control(&mut self, userdata: UserData, cmd: FeaturesControl) {
44 self.send_to(0, SdnExtIn::FeaturesControl(userdata, cmd));
45 }
46
47 fn service_control(&mut self, service: ServiceId, userdata: UserData, cmd: SC) {
48 self.send_to(0, SdnExtIn::ServicesControl(service, userdata, cmd));
49 }
50}