@@ -2,15 +2,16 @@ mod models;
2
2
mod ollama;
3
3
mod openai;
4
4
5
- use crate :: utils:: crypto:: to_address;
5
+ use crate :: utils:: { address_in_use , crypto:: to_address} ;
6
6
use eyre:: { eyre, Result } ;
7
+ use libp2p:: Multiaddr ;
7
8
use libsecp256k1:: { PublicKey , SecretKey } ;
8
9
use models:: ModelConfig ;
9
10
use ollama:: OllamaConfig ;
10
11
use ollama_workflows:: ModelProvider ;
11
12
use openai:: OpenAIConfig ;
12
13
13
- use std:: { env, time:: Duration } ;
14
+ use std:: { env, str :: FromStr , time:: Duration } ;
14
15
15
16
/// Timeout duration for checking model performance during a generation.
16
17
const CHECK_TIMEOUT_DURATION : Duration = Duration :: from_secs ( 80 ) ;
@@ -28,8 +29,8 @@ pub struct DriaComputeNodeConfig {
28
29
pub address : [ u8 ; 20 ] ,
29
30
/// Admin public key, used for message authenticity.
30
31
pub admin_public_key : PublicKey ,
31
- /// P2P listen address as a string , e.g. `/ip4/0.0.0.0/tcp/4001`.
32
- pub p2p_listen_addr : String ,
32
+ /// P2P listen address, e.g. `/ip4/0.0.0.0/tcp/4001`.
33
+ pub p2p_listen_addr : Multiaddr ,
33
34
/// Available LLM models & providers for the node.
34
35
pub model_config : ModelConfig ,
35
36
/// Even if Ollama is not used, we store the host & port here.
@@ -104,9 +105,11 @@ impl DriaComputeNodeConfig {
104
105
}
105
106
log:: info!( "Models: {:?}" , model_config. models) ;
106
107
107
- let p2p_listen_addr = env:: var ( "DKN_P2P_LISTEN_ADDR" )
108
+ let p2p_listen_addr_str = env:: var ( "DKN_P2P_LISTEN_ADDR" )
108
109
. map ( |addr| addr. trim_matches ( '"' ) . to_string ( ) )
109
110
. unwrap_or ( DEFAULT_P2P_LISTEN_ADDR . to_string ( ) ) ;
111
+ let p2p_listen_addr = Multiaddr :: from_str ( & p2p_listen_addr_str)
112
+ . expect ( "Could not parse the given P2P listen address." ) ;
110
113
111
114
Self {
112
115
admin_public_key,
@@ -178,6 +181,18 @@ impl DriaComputeNodeConfig {
178
181
Ok ( ( ) )
179
182
}
180
183
}
184
+
185
+ // ensure that listen address is free
186
+ pub fn check_address_in_use ( & self ) -> Result < ( ) > {
187
+ if address_in_use ( & self . p2p_listen_addr ) {
188
+ return Err ( eyre ! (
189
+ "Listen address {} is already in use." ,
190
+ self . p2p_listen_addr
191
+ ) ) ;
192
+ }
193
+
194
+ Ok ( ( ) )
195
+ }
181
196
}
182
197
183
198
#[ cfg( test) ]
0 commit comments