parse subnet
This commit is contained in:
parent
9700539833
commit
cb251fba8a
@ -22,3 +22,4 @@ serde_repr = "0.1.18"
|
|||||||
tokio = { version = "1.36.0", features = ["full"] }
|
tokio = { version = "1.36.0", features = ["full"] }
|
||||||
tracing = "0.1.40"
|
tracing = "0.1.40"
|
||||||
tracing-appender = "0.2.3"
|
tracing-appender = "0.2.3"
|
||||||
|
uuid = { version = "1.7.0", features = ["v4"] }
|
||||||
|
|||||||
@ -1,8 +1,12 @@
|
|||||||
use dashmap::DashMap;
|
use dashmap::{DashMap, DashSet};
|
||||||
use sdlan_sn_rs::peer::IpSubnet;
|
use sdlan_sn_rs::peer::IpSubnet;
|
||||||
|
use sdlan_sn_rs::utils::gen_uuid;
|
||||||
use sdlan_sn_rs::utils::MyDashMap;
|
use sdlan_sn_rs::utils::MyDashMap;
|
||||||
use tokio::net::UdpSocket;
|
use tokio::net::UdpSocket;
|
||||||
|
|
||||||
|
use crate::config;
|
||||||
|
use std::net::Ipv4Addr;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
sync::atomic::{AtomicU32, AtomicU8},
|
sync::atomic::{AtomicU32, AtomicU8},
|
||||||
time::{SystemTime, UNIX_EPOCH},
|
time::{SystemTime, UNIX_EPOCH},
|
||||||
@ -65,21 +69,29 @@ impl SuperNode {
|
|||||||
.expect("time went backwards")
|
.expect("time went backwards")
|
||||||
.as_secs();
|
.as_secs();
|
||||||
|
|
||||||
|
let startip: u32 = config::DEFAULT_MIN_AUTO_IP_NET
|
||||||
|
.parse::<Ipv4Addr>()
|
||||||
|
.unwrap()
|
||||||
|
.into();
|
||||||
|
let endip: u32 = config::DEFAULT_MAX_AUTO_IP_NET
|
||||||
|
.parse::<Ipv4Addr>()
|
||||||
|
.unwrap()
|
||||||
|
.into();
|
||||||
Self {
|
Self {
|
||||||
start_time,
|
start_time,
|
||||||
daemon: false,
|
daemon: false,
|
||||||
local_port: 7655,
|
local_port: 7655,
|
||||||
networks: MyDashMap::new(),
|
networks: MyDashMap::new(),
|
||||||
fedration: Network::new("*fedration"),
|
fedration: Network::new("*fedration", gen_uuid(), true, 0, 0),
|
||||||
pending: Network::new("*pending"),
|
pending: Network::new("*pending", gen_uuid(), false, 0, 0),
|
||||||
ip_range: AutoIpAssign {
|
ip_range: AutoIpAssign {
|
||||||
start_ip: IpSubnet {
|
start_ip: IpSubnet {
|
||||||
net_addr: AtomicU32::new(0),
|
net_addr: AtomicU32::new(startip),
|
||||||
net_bit_len: AtomicU8::new(0),
|
net_bit_len: AtomicU8::new(config::DEFAULT_IP_NET_BIT_LEN),
|
||||||
},
|
},
|
||||||
end_ip: IpSubnet {
|
end_ip: IpSubnet {
|
||||||
net_addr: AtomicU32::new(0),
|
net_addr: AtomicU32::new(endip),
|
||||||
net_bit_len: AtomicU8::new(0),
|
net_bit_len: AtomicU8::new(config::DEFAULT_IP_NET_BIT_LEN),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sock,
|
sock,
|
||||||
@ -94,13 +106,34 @@ pub struct AutoIpAssign {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Network {
|
pub struct Network {
|
||||||
name: String,
|
pub id: String,
|
||||||
|
pub name: String,
|
||||||
|
pub is_fedration: bool,
|
||||||
|
pub enabled: bool,
|
||||||
|
pub network_pass: String,
|
||||||
|
pub header_pass: String,
|
||||||
|
pub auto_ip_net: IpSubnet,
|
||||||
|
// 这个网络下面的节点,ip到peer uuid
|
||||||
|
// pub edges: DashMap<u32, String>,
|
||||||
|
pub edges: DashSet<String>,
|
||||||
|
pub ip_to_edge_id: DashMap<u32, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Network {
|
impl Network {
|
||||||
fn new(name: &str) -> Self {
|
fn new(name: &str, id: String, is_fedration: bool, ipnet: u32, ipnet_bitlen: u8) -> Self {
|
||||||
Self {
|
Self {
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
|
id,
|
||||||
|
is_fedration,
|
||||||
|
enabled: true,
|
||||||
|
network_pass: gen_uuid(),
|
||||||
|
header_pass: gen_uuid(),
|
||||||
|
auto_ip_net: IpSubnet {
|
||||||
|
net_addr: AtomicU32::new(ipnet),
|
||||||
|
net_bit_len: AtomicU8::new(ipnet_bitlen),
|
||||||
|
},
|
||||||
|
edges: DashSet::new(),
|
||||||
|
ip_to_edge_id: DashMap::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,12 +3,16 @@ mod error;
|
|||||||
mod helper;
|
mod helper;
|
||||||
mod myaes;
|
mod myaes;
|
||||||
mod myrsa;
|
mod myrsa;
|
||||||
|
mod myuuid;
|
||||||
|
|
||||||
pub use encode_decode::*;
|
pub use encode_decode::*;
|
||||||
pub use error::*;
|
pub use error::*;
|
||||||
pub use helper::*;
|
pub use helper::*;
|
||||||
pub use myaes::{aes_decrypt, aes_encrypt};
|
pub use myaes::{aes_decrypt, aes_encrypt};
|
||||||
pub use myrsa::{gen_keys, load_private_key_file, load_public_key_file, rsa_decrypt, rsa_encrypt};
|
pub use myrsa::{
|
||||||
|
gen_rsa_keys, load_private_key_file, load_public_key_file, rsa_decrypt, rsa_encrypt,
|
||||||
|
};
|
||||||
|
pub use myuuid::*;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod test_utils {
|
pub mod test_utils {
|
||||||
|
|||||||
@ -9,7 +9,7 @@ use rsa::{Pkcs1v15Encrypt, RsaPrivateKey, RsaPublicKey};
|
|||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
pub fn gen_keys() {
|
pub fn gen_rsa_keys() {
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
let bits = 2048;
|
let bits = 2048;
|
||||||
let priv_key = RsaPrivateKey::new(&mut rng, bits).unwrap();
|
let priv_key = RsaPrivateKey::new(&mut rng, bits).unwrap();
|
||||||
@ -103,7 +103,7 @@ mod tests {
|
|||||||
if std::fs::File::open(".data/id_rsa").is_ok() {
|
if std::fs::File::open(".data/id_rsa").is_ok() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gen_keys();
|
gen_rsa_keys();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
5
src/utils/myuuid.rs
Normal file
5
src/utils/myuuid.rs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
pub fn gen_uuid() -> String {
|
||||||
|
format!("{:x}", Uuid::new_v4().as_u128())
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user