@@ -148,6 +148,7 @@ import Ouroboros.Network.BlockFetch.Decision.Trace
148148import  Ouroboros.Network.NodeToNode 
149149  ( ConnectionId 
150150  , MiniProtocolParameters  (.. )
151+   , NodeToNodeVersion  (.. )
151152  )
152153import  Ouroboros.Network.PeerSelection.Governor.Types 
153154  ( PublicPeerSelectionState 
@@ -274,20 +275,24 @@ mkNodeKernelPeerStates csHandles pcdHandles = do
274275  pcdPeerStates <-  traverse  (readTVar .  odihState) =<<  odihcMap pcdHandles
275276  pure  (NodeKernelPeerState  <$>  align csPeerStates pcdPeerStates)
276277
277- nodeKernelPeerIsIdle  ::  NodeKernelPeerState  blk  ->  Bool 
278- nodeKernelPeerIsIdle (NodeKernelPeerState  these) = 
278+ nodeKernelPeerIsIdle  ::  Set   CardanoFeatureFlag   ->   NodeKernelPeerState  blk  ->  Bool 
279+ nodeKernelPeerIsIdle featureFlags  (NodeKernelPeerState  these) = 
279280  case  these of 
280281    --  We have both ChainSync and PerasCertDiffusion connections => idle if both are idling
281282    These  csState pcdState ->  csIdling csState &&  odisIdling pcdState
282283    --  Only a ChainSync connection is available => idle if the ChainSync connection is idling
283-     This  csState |  not  peerUsesPeras ->  csIdling csState
284+     This  csState |  not  perasIsEnabled ->  csIdling csState
285+     This  csState |  not  (peerUsesPeras csState) ->  csIdling csState
284286    --  We will soon establish a PerasCertDiffusion connection => not idling
285287    This  _ ->  False 
286288    --  We will soon establish a ChainSync connection => not idling
287289    That  _ ->  False 
288290 where 
289-   --  TODO: use the Peras feature flag or check negotiated NodeToNode version for the peer
290-   peerUsesPeras =  False 
291+   --  Is the Peras feature flag enabled?
292+   perasIsEnabled =  PerasFlag  `elem`  featureFlags
293+ 
294+   --  Does the peer support the Peras mini-protocol?
295+   peerUsesPeras csState =  csNodeToNodeVersion csState >=  NodeToNodeV_16 
291296
292297initNodeKernel  :: 
293298  forall  m  addrNTN  addrNTC  blk . 
@@ -304,6 +309,7 @@ initNodeKernel
304309  args@ NodeKernelArgs 
305310    { registry
306311    , cfg
312+     , featureFlags
307313    , tracers
308314    , chainDB
309315    , initChainDB
@@ -363,7 +369,7 @@ initNodeKernel
363369                          --  We don't have an established ChainSync connection with this peer.
364370                          --  We conservatively assume that its candidate is not better than ours.
365371                          GSM. WhetherCandidateIsBetterFalse 
366-                 , GSM. peerIsIdle =  nodeKernelPeerIsIdle
372+                 , GSM. peerIsIdle =  nodeKernelPeerIsIdle featureFlags 
367373                , GSM. durationUntilTooOld = 
368374                    gsmDurationUntilTooOld
369375                      <&>  \ wd (_headers, lst) -> 
0 commit comments