@@ -127,35 +127,41 @@ struct State {
127
127
/// Keepalive values that help keeping Derp connection in conntrack alive,
128
128
/// so server can send traffic after being silent for a while
129
129
/// *derp_keepalive* is also used as an interval for retrieving remote peer states.
130
+ /// TODO: Update comments for Poll Keepalives
130
131
#[ derive( Debug , Clone , PartialEq , Eq ) ]
131
132
pub struct DerpKeepaliveConfig {
132
133
tcp_keepalive : u32 ,
133
134
derp_keepalive : u32 ,
135
+ poll_keepalive : Option < u32 > ,
134
136
}
135
137
136
138
impl From < & Option < FeatureDerp > > for DerpKeepaliveConfig {
137
139
fn from ( derp : & Option < FeatureDerp > ) -> Self {
138
140
let mut tcp_keepalive = proto:: DERP_TCP_KEEPALIVE_INTERVAL ;
139
141
let mut derp_keepalive = proto:: DERP_KEEPALIVE_INTERVAL ;
142
+ let mut poll_keepalive = None ;
140
143
if let Some ( derp) = derp {
141
144
if let Some ( tcp_ka) = derp. tcp_keepalive {
142
145
tcp_keepalive = tcp_ka;
143
146
}
144
147
if let Some ( derp_ka) = derp. derp_keepalive {
145
148
derp_keepalive = derp_ka;
146
149
}
150
+ poll_keepalive = derp. poll_keepalive ;
147
151
}
148
152
149
153
DerpKeepaliveConfig {
150
154
tcp_keepalive,
151
155
derp_keepalive,
156
+ poll_keepalive,
152
157
}
153
158
}
154
159
}
155
160
156
161
const DEFAULT_SERVER_KEEPALIVE_CONFIG : DerpKeepaliveConfig = DerpKeepaliveConfig {
157
162
tcp_keepalive : proto:: DERP_TCP_KEEPALIVE_INTERVAL ,
158
163
derp_keepalive : proto:: DERP_KEEPALIVE_INTERVAL ,
164
+ poll_keepalive : None ,
159
165
} ;
160
166
161
167
/// Derp configuration
@@ -726,8 +732,9 @@ impl Runtime for State {
726
732
} ,
727
733
// On tick send derp poll request to derp stream
728
734
Some ( ( permit, _) ) = wait_for_tx( & c. comms_direct. tx, poll_timer_tick) => {
729
- if config. enable_polling {
735
+ if config. enable_polling || config . server_keepalives . poll_keepalive . is_some ( ) {
730
736
self . derp_poll_session = self . derp_poll_session. wrapping_add( 1 ) ;
737
+ telio_log_debug!( "Sending DerpPollRequest with session {}" , self . derp_poll_session) ;
731
738
Self :: handle_outcoming_payload_direct( permit, PacketControl :: DerpPollRequest ( DerpPollRequestMsg :: new(
732
739
self . derp_poll_session, & config. meshnet_peers
733
740
) ) ) . await ;
0 commit comments