diff --git a/src/network/async_main.rs b/src/network/async_main.rs index 1d6d309..b06be28 100644 --- a/src/network/async_main.rs +++ b/src/network/async_main.rs @@ -312,10 +312,14 @@ pub async fn async_main( async fn run_edge_loop(eee: &'static Node, cancel: CancellationToken) { ping_to_sn().await; { + let cancel2 = cancel.clone(); let cancel = cancel.clone(); tokio::spawn(async move { loop_socket_v4(eee, &eee.udp_sock_v4, cancel).await; }); + tokio::spawn(async move { + loop_socket_v4(eee, &eee.udp_sock_multicast, cancel2).await; + }); } { diff --git a/src/network/node.rs b/src/network/node.rs index 2703da6..bb2ed76 100644 --- a/src/network/node.rs +++ b/src/network/node.rs @@ -51,8 +51,9 @@ pub async fn init_edge( // let edge_uuid = create_or_load_uuid("")?; //let node_conf = parse_config(edge_uuid, &args).await?; - let sock_v4 = Socket::build(0, true, true, tos).await?; + let sock_v4 = Socket::build(0, true, false, tos).await?; + let sock_multicast = Socket::build(MULTICAST_PORT, true, true, 0).await?; // allow multicast // TODO: set the sn's tcp socket @@ -62,6 +63,7 @@ pub async fn init_edge( pubkey, node_conf, sock_v4, + sock_multicast, token, privatekey, tcp_pong.clone(), @@ -119,6 +121,7 @@ pub struct Node { pub known_peers: PeerMap, // pub tcp_sock_v4: TCPSocket, + pub udp_sock_multicast: Socket, pub udp_sock_v4: Socket, pub outer_ip_v4: AtomicU32, pub udp_sock_v6: RwLock>>, @@ -158,6 +161,7 @@ impl Node { pubkey: String, config: NodeConfig, sock: Socket, + multicast_sock: Socket, // tcpsock: TCPSocket, token: &str, private: RsaPrivateKey, @@ -190,6 +194,7 @@ impl Node { known_peers: PeerMap::new(), // tcp_sock_v4: tcpsock, + udp_sock_multicast: multicast_sock, udp_sock_v4: sock, outer_ip_v4: AtomicU32::new(0), udp_sock_v6: RwLock::new(Arc::new(None)), @@ -467,7 +472,7 @@ impl NodeStats { use sdlan_sn_rs::peer::SdlanSock; -use crate::config::{self, REGISTER_INTERVAL}; +use crate::config::{self, MULTICAST_PORT, REGISTER_INTERVAL}; pub struct NodeConfig { // node name pub name: String,