Skip to content

Commit 5d2e86d

Browse files
Add behind firewall flag to local root config
1 parent 0c381f3 commit 5d2e86d

File tree

9 files changed

+84
-48
lines changed

9 files changed

+84
-48
lines changed

cardano-diffusion/lib/Cardano/Network/Diffusion/Topology.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@ isValidTrustedPeerConfiguration
3030
IsTrustable -> not
3131
. null
3232
. rootAccessPoints
33+
. rootConfig
3334
$ localRoots
3435
) lprgs

cardano-diffusion/tests/lib/Test/Cardano/Network/Diffusion/Testnet.hs

Lines changed: 31 additions & 30 deletions
Large diffs are not rendered by default.

cardano-diffusion/tests/lib/Test/Cardano/Network/PeerSelection.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4431,8 +4431,8 @@ prop_issue_3550 = prop_governor_target_established_below defaultMaxTime $
44314431
(PeerAddr 29,[],GovernorScripts {peerShareScript = Script (Nothing :| []), peerSharingScript = Script (PeerSharingDisabled :| []), connectionScript = Script ((ToWarm,NoDelay) :| [(ToCold,NoDelay),(Noop,NoDelay)])})
44324432
],
44334433
localRootPeers = LocalRootPeers.fromGroups
4434-
[ (1, 1, Map.fromList [(PeerAddr 16, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode IsNotTrustable)])
4435-
, (1, 1, Map.fromList [(PeerAddr 4, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode IsNotTrustable)])
4434+
[ (1, 1, Map.fromList [(PeerAddr 16, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable)])
4435+
, (1, 1, Map.fromList [(PeerAddr 4, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable)])
44364436
],
44374437
publicRootPeers = Cardano.PublicRootPeers.fromPublicRootPeers
44384438
(Map.fromList [ (PeerAddr 14, DoNotAdvertisePeer)
@@ -4479,7 +4479,7 @@ prop_issue_3515 = prop_governor_nolivelock $
44794479
peerSharingScript = Script (PeerSharingDisabled :| []),
44804480
connectionScript = Script ((ToCold,NoDelay) :| [(Noop,NoDelay)])
44814481
})],
4482-
localRootPeers = LocalRootPeers.fromGroups [(1,1,Map.fromList [(PeerAddr 10, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode IsNotTrustable)])],
4482+
localRootPeers = LocalRootPeers.fromGroups [(1,1,Map.fromList [(PeerAddr 10, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable)])],
44834483
publicRootPeers = PublicRootPeers.empty Cardano.ExtraPeers.empty,
44844484
targets = Script . NonEmpty.fromList $ targets'',
44854485
pickKnownPeersForPeerShare = Script (PickFirst :| []),
@@ -4521,7 +4521,7 @@ prop_issue_3494 = prop_governor_nofail $
45214521
peerSharingScript = Script (PeerSharingDisabled :| []),
45224522
connectionScript = Script ((ToCold,NoDelay) :| [(Noop,NoDelay)])
45234523
})],
4524-
localRootPeers = LocalRootPeers.fromGroups [(1,1,Map.fromList [(PeerAddr 64, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode IsNotTrustable)])],
4524+
localRootPeers = LocalRootPeers.fromGroups [(1,1,Map.fromList [(PeerAddr 64, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable)])],
45254525
publicRootPeers = PublicRootPeers.empty Cardano.ExtraPeers.empty,
45264526
targets = Script . NonEmpty.fromList $ targets'',
45274527
pickKnownPeersForPeerShare = Script (PickFirst :| []),
@@ -4571,8 +4571,8 @@ prop_issue_3233 = prop_governor_nolivelock $
45714571
(PeerAddr 15,[],GovernorScripts {peerShareScript = Script (Just ([],PeerShareTimeSlow) :| []), peerSharingScript = Script (PeerSharingDisabled :| []), connectionScript = Script ((Noop,NoDelay) :| [])})
45724572
],
45734573
localRootPeers = LocalRootPeers.fromGroups
4574-
[ (1, 1, Map.fromList [(PeerAddr 15, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode IsNotTrustable)])
4575-
, (1, 1, Map.fromList [(PeerAddr 13, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode IsNotTrustable)])
4574+
[ (1, 1, Map.fromList [(PeerAddr 15, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable)])
4575+
, (1, 1, Map.fromList [(PeerAddr 13, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable)])
45764576
],
45774577
publicRootPeers = Cardano.PublicRootPeers.fromPublicRootPeers
45784578
(Map.fromList [(PeerAddr 4, DoNotAdvertisePeer)]),

ouroboros-network/lib/Ouroboros/Network/Diffusion/Topology.hs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ newtype LocalRootPeersGroups extraFlags = LocalRootPeersGroups
3232
-- will attempt to maintain. By default this value will be equal to 'hotValency'.
3333
--
3434
data LocalRootPeersGroup extraFlags = LocalRootPeersGroup
35-
{ localRoots :: RootConfig
35+
{ localRoots :: LocalRoots
3636
, hotValency :: HotValency
3737
, warmValency :: WarmValency
3838
, rootDiffusionMode :: DiffusionMode
@@ -44,6 +44,12 @@ newtype PublicRootPeers = PublicRootPeers
4444
{ publicRoots :: RootConfig
4545
} deriving (Eq, Show)
4646

47+
data LocalRoots = LocalRoots
48+
{ rootConfig :: RootConfig
49+
, behindFirewall :: Bool
50+
-- ^ peer is unreachable and will initiate the connection first
51+
} deriving (Eq, Show)
52+
4753
-- | Each root peer consists of a list of access points and a shared
4854
-- 'PeerAdvertise' field.
4955
--
@@ -63,9 +69,16 @@ data RootConfig = RootConfig
6369
rootConfigToRelayAccessPoint
6470
:: RootConfig
6571
-> [(RelayAccessPoint, PeerAdvertise)]
66-
rootConfigToRelayAccessPoint RootConfig { rootAccessPoints, rootAdvertise } =
72+
rootConfigToRelayAccessPoint RootConfig { rootAccessPoints, rootAdvertise } =
6773
[ (ap, rootAdvertise) | ap <- rootAccessPoints ]
6874

75+
localRootsToRelayAccessPoint
76+
:: LocalRoots
77+
-> [(RelayAccessPoint, PeerAdvertise, Bool)]
78+
localRootsToRelayAccessPoint LocalRoots {rootConfig, behindFirewall} =
79+
(\(accessPoint, advertise) -> (accessPoint, advertise, behindFirewall))
80+
<$> rootConfigToRelayAccessPoint rootConfig
81+
6982
producerAddresses
7083
:: NetworkTopology extraConfig extraFlags
7184
-> ( [(HotValency, WarmValency, Map RelayAccessPoint (LocalRootConfig extraFlags))]
@@ -78,16 +91,17 @@ producerAddresses NetworkTopology { localRootPeersGroups
7891
( map (\lrp -> ( hotValency lrp
7992
, warmValency lrp
8093
, Map.fromList
81-
. map (\(addr, peerAdvertise) ->
94+
. map (\(addr, peerAdvertise, localRootBehindFirewall) ->
8295
( addr
8396
, LocalRootConfig {
8497
diffusionMode = rootDiffusionMode lrp,
8598
peerAdvertise,
99+
localRootBehindFirewall,
86100
extraLocalRootFlags = extraFlags lrp
87101
}
88102
)
89103
)
90-
. rootConfigToRelayAccessPoint
104+
. localRootsToRelayAccessPoint
91105
$ localRoots lrp
92106
)
93107
)

ouroboros-network/lib/Ouroboros/Network/PeerSelection/State/KnownPeers.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ data KnownPeers peeraddr = KnownPeers {
7979
-- establish a connection to now. This is because we have not connected
8080
-- with them before or because any failure backoff time has expired.
8181
--
82+
-- Note: Some peers may be behind a firewall. Local root peers marked as
83+
-- behind a firewall are not excluded from this list.
84+
--
8285
availableToConnect :: !(Set peeraddr),
8386

8487
-- | The subset of known peers that we cannot connect to for the moment.

ouroboros-network/lib/Ouroboros/Network/PeerSelection/State/LocalRootPeers.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ import Ouroboros.Network.PeerSelection.PeerAdvertise (PeerAdvertise)
4444
--
4545

4646
data LocalRootConfig extraFlags = LocalRootConfig {
47-
peerAdvertise :: !PeerAdvertise,
48-
diffusionMode :: !DiffusionMode,
49-
extraLocalRootFlags :: !extraFlags
47+
peerAdvertise :: !PeerAdvertise,
48+
diffusionMode :: !DiffusionMode,
49+
localRootBehindFirewall :: !Bool,
50+
extraLocalRootFlags :: !extraFlags
5051
}
5152
deriving (Show, Eq)
5253

ouroboros-network/orphan-instances/Ouroboros/Network/OrphanInstances.hs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ import Ouroboros.Network.DeltaQ (GSV (GSV),
6969
PeerGSV (PeerGSV, inboundGSV, outboundGSV))
7070
import Ouroboros.Network.Diffusion.Topology (LocalRootPeersGroup (..),
7171
LocalRootPeersGroups (..), NetworkTopology (..),
72-
PublicRootPeers (..), RootConfig (..))
72+
PublicRootPeers (..), LocalRoots (..), RootConfig (..))
7373
import Ouroboros.Network.Diffusion.Types (DiffusionTracer (..))
7474
import Ouroboros.Network.DiffusionMode
7575
import Ouroboros.Network.Driver.Simple
@@ -97,6 +97,21 @@ kindObject k fields = object $ ("kind" .= String k) : fields
9797

9898
-- FromJSON Instances
9999

100+
instance FromJSON LocalRoots where
101+
parseJSON = withObject "LocalRoots" $ \o ->
102+
LocalRoots
103+
<$> (RootConfig
104+
<$> o .: "accessPoints"
105+
<*> o .:? "advertise" .!= DoNotAdvertisePeer)
106+
<*> o .:? "behindFirewall" .!= False
107+
108+
instance ToJSON LocalRoots where
109+
toJSON ra =
110+
object
111+
[ "rootConfig" .= rootConfig ra
112+
, "behindFirewall" .= behindFirewall ra
113+
]
114+
100115
instance FromJSON RootConfig where
101116
parseJSON = withObject "RootConfig" $ \o ->
102117
RootConfig
@@ -144,8 +159,8 @@ localRootPeersGroupToJSON :: (extraFlags -> Maybe (Key, Value))
144159
-> Value
145160
localRootPeersGroupToJSON extraFlagsToJSON lrpg@LocalRootPeersGroup {extraFlags} =
146161
Object $
147-
("accessPoints" .?= rootAccessPoints (localRoots lrpg))
148-
<> ("advertise" .?= rootAdvertise (localRoots lrpg))
162+
("accessPoints" .?= rootAccessPoints (rootConfig . localRoots $ lrpg))
163+
<> ("advertise" .?= rootAdvertise (rootConfig . localRoots $ lrpg))
149164
<> ("hotValency" .?= hotValency lrpg)
150165
<> ("warmValency" .?= warmValency lrpg)
151166
<> foldMap (uncurry (.?=)) (extraFlagsToJSON extraFlags)

ouroboros-network/tests/lib/Test/Ouroboros/Network/PeerSelection/Instances.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ instance Arbitrary extraFlags => Arbitrary (LocalRootConfig extraFlags) where
172172
<$> arbitrary
173173
<*> elements [InitiatorAndResponderDiffusionMode, InitiatorOnlyDiffusionMode]
174174
<*> arbitrary
175+
<*> arbitrary
175176
shrink a@LocalRootConfig { peerAdvertise,
176177
extraLocalRootFlags = peerTrustable,
177178
diffusionMode

ouroboros-network/tests/lib/Test/Ouroboros/Network/PeerSelection/RootPeersDNS.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,10 +344,10 @@ simpleMockRoots = MockRoots localRootPeers dnsMap Map.empty (singletonScript Map
344344
[ ( 2, 2
345345
, Map.fromList
346346
[ ( RelayAccessAddress (read "192.0.2.1") (read "3333")
347-
, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode ()
347+
, LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False ()
348348
)
349349
, ( RelayAccessDomain "test.domain" (read "4444")
350-
, LocalRootConfig DoNotAdvertisePeer InitiatorAndResponderDiffusionMode ()
350+
, LocalRootConfig DoNotAdvertisePeer InitiatorAndResponderDiffusionMode False ()
351351
)
352352
]
353353
)

0 commit comments

Comments
 (0)