diff --git a/docs/network-spec/miniprotocols.tex b/docs/network-spec/miniprotocols.tex index 996b71a400..23678d64b1 100644 --- a/docs/network-spec/miniprotocols.tex +++ b/docs/network-spec/miniprotocols.tex @@ -239,7 +239,7 @@ \subsection{Node-to-node mini-protocols} \subsection{Node-to-client mini-protocols} Mini-protocols used by node-to-client protocol. The chain-sync mini-protocol -is shared between node-to-node and node-to-client protocols, but it is instantiated differently. In +is shared between node-to-node and node-to-client protocols, but it is instantiated differently. In node-to-client protocol, it is used with full blocks rather than just headers. \miniEntry @@ -709,7 +709,7 @@ \subsection{CDDL encoding specification}\label{handshake-cddl} messages. First, one is used by the node-to-node protocol, and the other is used by the node-to-client protocol. \subsubsection{Node-to-node handshake mini-protocol} -\lstinputlisting[style=cddl]{../../ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v13.cddl} +\lstinputlisting[style=cddl]{../../ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v14.cddl} \subsubsection{Node-to-client handshake mini-protocol} \lstinputlisting[style=cddl]{../../ouroboros-network-protocols/cddl/specs/handshake-node-to-client.cddl} @@ -718,7 +718,7 @@ \section{Chain-Sync mini-protocol} \label{chain-sync-protocol} \haddockref{Ouroboros.Network.Protocol.ChainSync.Type}{ouroboros-network-protocols/Ouroboros-Network-Protocol-ChainSync-Type\#t:ChainSync}\\ \hyperref[table:node-to-node-protocol-numbers]{\textit{node-to-node mini-protocol number}}: \texttt{2}\\ -\hyperref[table:node-to-client-protocol-numbers]{\textit{node-to-client mini-protocol number}}: \texttt{5}\\ +\hyperref[table:node-to-client-protocol-numbers]{\textit{node-to-client mini-protocol number}}: \texttt{5}\\ \newcommand{\StCanAwait}{\state{StCanAwait}} \newcommand{\StMustReply}{\state{StMustReply}} @@ -1597,11 +1597,8 @@ \subsection{Server Implementation Details} function application all the way to diffusion and share the relevant parts of \texttt{PeerSelectionState} with this function via a \texttt{TVar}. -\subsection{CDDL encoding specification ($11$ to $12$)}\label{peersharing-cddl} -\lstinputlisting[style=cddl]{../../ouroboros-network-protocols/cddl/specs/peer-sharing-v11-12.cddl} - -\subsection{CDDL encoding specification ($\geq 13$)}\label{peersharing-cddl} -\lstinputlisting[style=cddl]{../../ouroboros-network-protocols/cddl/specs/peer-sharing-v13.cddl} +\subsection{CDDL encoding specification ($\geq 14$)}\label{peersharing-cddl} +\lstinputlisting[style=cddl]{../../ouroboros-network-protocols/cddl/specs/peer-sharing-v14.cddl} \section{Local Tx-Submission mini-protocol} \haddockref{Ouroboros.Network.Protocol.LocalTxSubmission.Type}{ouroboros-network-protocols/Ouroboros-Network-Protocol-LocalTxSubmission-Type\#t:LocalTxSubmission}\\ @@ -1976,8 +1973,7 @@ \section{Node-to-node protocol} \begin{center} \begin{tabular}{l|l} \header{version} & \header{description} \\\hline - \texttt{NodeToNodeV\_13} & Disabled peer sharing for buggy V11 \& V12 and for InitiatorOnly nodes \\ - \texttt{NodeToNodeV\_14} & No changes, identifies Chang+1 HF nodes\\ + \texttt{NodeToNodeV\_14} & No changes, identifies Plomin HF nodes mandatory on mainnet as of 2025.01.29\\ \end{tabular} \caption{Node-to-node protocol versions} \label{table:node-to-node-protocol-versions} diff --git a/docs/network-spec/network-spec.tex b/docs/network-spec/network-spec.tex index 71b2deaa41..bedbf4eebf 100644 --- a/docs/network-spec/network-spec.tex +++ b/docs/network-spec/network-spec.tex @@ -247,6 +247,7 @@ \section{Node-to-node protocol} \texttt{NodeToNodeV\_10} & Full duplex connections \\ \texttt{NodeToNodeV\_11} & Peer sharing willingness \\ \texttt{NodeToNodeV\_12} & No observable changes \\ + \texttt{NodeToNodeV\_13} & Disabled peer sharing for buggy V11 \& V12 and for InitiatorOnly nodes \\ \end{tabular} \caption{Node-to-node protocol versions} \label{table:historical-node-to-node-protocol-versions} diff --git a/ouroboros-network-api/CHANGELOG.md b/ouroboros-network-api/CHANGELOG.md index 8e1dfa6751..172e386b1e 100644 --- a/ouroboros-network-api/CHANGELOG.md +++ b/ouroboros-network-api/CHANGELOG.md @@ -5,6 +5,7 @@ ### Breaking changes * Added `NodeToClientV_20`. +* Removed `NodeToNodeV_13` which can't cross Plomin HF on 2025.01.29 ### Non-breaking changes diff --git a/ouroboros-network-api/src/Ouroboros/Network/NodeToNode/Version.hs b/ouroboros-network-api/src/Ouroboros/Network/NodeToNode/Version.hs index f2080f8ffd..fb8fc747b2 100644 --- a/ouroboros-network-api/src/Ouroboros/Network/NodeToNode/Version.hs +++ b/ouroboros-network-api/src/Ouroboros/Network/NodeToNode/Version.hs @@ -60,24 +60,22 @@ data NodeToNodeVersion = -- -- -- -- (In the past, this enabled Conway, but the negotiated 'NodeToNodeVersion' -- -- no longer en-/disables eras.) - NodeToNodeV_13 + -- | NodeToNodeV_13 -- ^ Changes: -- -- * Removed PeerSharingPrivate constructor -- * Fixed Codec to disable PeerSharing with buggy versions 11 and 12. -- * Disable PeerSharing with InitiatorOnly nodes, since they do not run -- peer sharing server side and can not reply to requests. - | NodeToNodeV_14 - -- ^ Chang+1 HF + NodeToNodeV_14 + -- ^ Plomin HF, mandatory on mainnet as of 2025.01.29 deriving (Eq, Ord, Enum, Bounded, Show, Typeable, Generic, NFData) nodeToNodeVersionCodec :: CodecCBORTerm (Text, Maybe Int) NodeToNodeVersion nodeToNodeVersionCodec = CodecCBORTerm { encodeTerm, decodeTerm } where - encodeTerm NodeToNodeV_13 = CBOR.TInt 13 encodeTerm NodeToNodeV_14 = CBOR.TInt 14 - decodeTerm (CBOR.TInt 13) = Right NodeToNodeV_13 decodeTerm (CBOR.TInt 14) = Right NodeToNodeV_14 decodeTerm (CBOR.TInt n) = Left ( T.pack "decode NodeToNodeVersion: unknown tag: " <> T.pack (show n) @@ -150,14 +148,13 @@ instance Queryable NodeToNodeVersionData where nodeToNodeCodecCBORTerm :: NodeToNodeVersion -> CodecCBORTerm Text NodeToNodeVersionData nodeToNodeCodecCBORTerm = \case - NodeToNodeV_13 -> v13 - NodeToNodeV_14 -> v13 + NodeToNodeV_14 -> v14 where - v13 = CodecCBORTerm { encodeTerm = encodeTerm13, decodeTerm = decodeTerm13 } + v14 = CodecCBORTerm { encodeTerm = encodeTerm14, decodeTerm = decodeTerm14 } - encodeTerm13 :: NodeToNodeVersionData -> CBOR.Term - encodeTerm13 NodeToNodeVersionData { networkMagic, diffusionMode, peerSharing, query } + encodeTerm14 :: NodeToNodeVersionData -> CBOR.Term + encodeTerm14 NodeToNodeVersionData { networkMagic, diffusionMode, peerSharing, query } = CBOR.TList [ CBOR.TInt (fromIntegral $ unNetworkMagic networkMagic) , CBOR.TBool (case diffusionMode of @@ -169,8 +166,8 @@ nodeToNodeCodecCBORTerm = , CBOR.TBool query ] - decodeTerm13 :: CBOR.Term -> Either Text NodeToNodeVersionData - decodeTerm13 (CBOR.TList [CBOR.TInt x, CBOR.TBool diffusionMode, CBOR.TInt peerSharing, CBOR.TBool query]) + decodeTerm14 :: CBOR.Term -> Either Text NodeToNodeVersionData + decodeTerm14 (CBOR.TList [CBOR.TInt x, CBOR.TBool diffusionMode, CBOR.TInt peerSharing, CBOR.TBool query]) | x >= 0 , x <= 0xffffffff , Just ps <- case peerSharing of @@ -190,7 +187,7 @@ nodeToNodeCodecCBORTerm = = Left $ T.pack $ "networkMagic out of bound: " <> show x | otherwise -- peerSharing < 0 || peerSharing > 1 = Left $ T.pack $ "peerSharing is out of bound: " <> show peerSharing - decodeTerm13 t + decodeTerm14 t = Left $ T.pack $ "unknown encoding: " ++ show t diff --git a/ouroboros-network-api/src/Ouroboros/Network/PeerSelection/PeerSharing/Codec.hs b/ouroboros-network-api/src/Ouroboros/Network/PeerSelection/PeerSharing/Codec.hs index 196a77953e..98d544fa2e 100644 --- a/ouroboros-network-api/src/Ouroboros/Network/PeerSelection/PeerSharing/Codec.hs +++ b/ouroboros-network-api/src/Ouroboros/Network/PeerSelection/PeerSharing/Codec.hs @@ -30,7 +30,6 @@ decodePortNumber = fromIntegral <$> CBOR.decodeWord16 encodeRemoteAddress :: NodeToNodeVersion -> SockAddr -> CBOR.Encoding encodeRemoteAddress = \case - NodeToNodeV_13 -> sockAddr NodeToNodeV_14 -> sockAddr where @@ -56,11 +55,10 @@ encodeRemoteAddress = decodeRemoteAddress :: NodeToNodeVersion -> CBOR.Decoder s SockAddr decodeRemoteAddress = \case - NodeToNodeV_13 -> decoder13 - NodeToNodeV_14 -> decoder13 + NodeToNodeV_14 -> decoder14 where - decoder13 = do + decoder14 = do _ <- CBOR.decodeListLen tok <- CBOR.decodeWord case tok of diff --git a/ouroboros-network-protocols/cddl/Main.hs b/ouroboros-network-protocols/cddl/Main.hs index 92945e53f8..9ea402e2c6 100644 --- a/ouroboros-network-protocols/cddl/Main.hs +++ b/ouroboros-network-protocols/cddl/Main.hs @@ -150,18 +150,18 @@ tests CDDLSpecs { cddlChainSync , cddlTxSubmission2 , cddlKeepAlive , cddlLocalStateQuery - , cddlHandshakeNodeToNodeV13ToLast + , cddlHandshakeNodeToNodeV14ToLast , cddlHandshakeNodeToClient - , cddlPeerSharingNodeToNodeV13ToLast - , cddlNodeToNodeVersionDataV13ToLast + , cddlPeerSharingNodeToNodeV14ToLast + , cddlNodeToNodeVersionDataV14ToLast } = adjustOption (const $ QuickCheckMaxSize 10) $ testGroup "cddl" [ testGroup "encoding" -- validate encoding against a specification - [ testProperty "NodeToNode.Handshake V13 to Last" - (prop_encodeHandshakeNodeToNodeV13ToLast - cddlHandshakeNodeToNodeV13ToLast) + [ testProperty "NodeToNode.Handshake V14 to Last" + (prop_encodeHandshakeNodeToNodeV14ToLast + cddlHandshakeNodeToNodeV14ToLast) , -- If this fails whilst adding a new node-to-client version, ensure that -- all the necessary changes are included: -- @@ -186,17 +186,17 @@ tests CDDLSpecs { cddlChainSync , testProperty "LocalStateQuery" (prop_encodeLocalStateQuery cddlLocalStateQuery) - , testProperty "PeerSharing V13 to Last" (prop_encodePeerSharingV13ToLast - cddlPeerSharingNodeToNodeV13ToLast) + , testProperty "PeerSharing V14 to Last" (prop_encodePeerSharingV14ToLast + cddlPeerSharingNodeToNodeV14ToLast) - , testProperty "NodeToNodeVersionData V13 to Last" (prop_encodeNodeToNodeVersionDataV13ToLast - cddlNodeToNodeVersionDataV13ToLast) + , testProperty "NodeToNodeVersionData V14 to Last" (prop_encodeNodeToNodeVersionDataV14ToLast + cddlNodeToNodeVersionDataV14ToLast) ] , testGroup "decoder" -- validate decoder by generating messages from the specification - [ testCase "NodeToNode.Handshake V13 to Last" + [ testCase "NodeToNode.Handshake V14 to Last" (unit_decodeHandshakeNodeToNode - cddlHandshakeNodeToNodeV13ToLast) + cddlHandshakeNodeToNodeV14ToLast) , testCase "NodeToClient.Handshake" (unit_decodeHandshakeNodeToClient cddlHandshakeNodeToClient) @@ -215,11 +215,11 @@ tests CDDLSpecs { cddlChainSync , testCase "LocalStateQuery" (unit_decodeLocalStateQuery cddlLocalStateQuery) - , testCase "PeerSharing V13 to Last" (unit_decodePeerSharingV13ToLast - cddlPeerSharingNodeToNodeV13ToLast) + , testCase "PeerSharing V14 to Last" (unit_decodePeerSharingV14ToLast + cddlPeerSharingNodeToNodeV14ToLast) - , testCase "NodeToNodeVersionData V13 to Last" (unit_decodeNodeToNodeVersionDataV13ToLast - cddlNodeToNodeVersionDataV13ToLast) + , testCase "NodeToNodeVersionData V14 to Last" (unit_decodeNodeToNodeVersionDataV14ToLast + cddlNodeToNodeVersionDataV14ToLast) ] ] @@ -229,7 +229,7 @@ newtype CDDLSpec ps = CDDLSpec BL.ByteString data CDDLSpecs = CDDLSpecs { cddlHandshakeNodeToClient :: CDDLSpec (Handshake NodeToClientVersion CBOR.Term), - cddlHandshakeNodeToNodeV13ToLast :: CDDLSpec (Handshake NodeToNodeVersion CBOR.Term), + cddlHandshakeNodeToNodeV14ToLast :: CDDLSpec (Handshake NodeToNodeVersion CBOR.Term), cddlChainSync :: CDDLSpec (ChainSync BlockHeader HeaderPoint HeaderTip), cddlBlockFetch :: CDDLSpec (BlockFetch Block BlockPoint), cddlTxSubmission2 :: CDDLSpec (TxSubmission2 TxId Tx), @@ -240,9 +240,9 @@ data CDDLSpecs = CDDLSpecs { cddlLocalTxMonitor :: CDDLSpec (LocalTxMonitor TxId Tx SlotNo), cddlLocalStateQuery :: CDDLSpec (LocalStateQuery Block BlockPoint Query), - cddlPeerSharingNodeToNodeV13ToLast :: CDDLSpec (PeerSharing.PeerSharing SockAddr), + cddlPeerSharingNodeToNodeV14ToLast :: CDDLSpec (PeerSharing.PeerSharing SockAddr), - cddlNodeToNodeVersionDataV13ToLast :: CDDLSpec NodeToNodeVersionData + cddlNodeToNodeVersionDataV14ToLast :: CDDLSpec NodeToNodeVersionData } @@ -253,7 +253,7 @@ readCDDLSpecs = do <$> doesDirectoryExist "ouroboros-network-protocols" common <- BL.readFile (dir "common.cddl") handshakeNodeToClient <- BL.readFile (dir "handshake-node-to-client.cddl") - handshakeNodeToNodeV13ToLast <- BL.readFile (dir "handshake-node-to-node-v13.cddl") + handshakeNodeToNodeV14ToLast <- BL.readFile (dir "handshake-node-to-node-v14.cddl") chainSync <- BL.readFile (dir "chain-sync.cddl") blockFetch <- BL.readFile (dir "block-fetch.cddl") txSubmission2 <- BL.readFile (dir "tx-submission2.cddl") @@ -262,14 +262,14 @@ readCDDLSpecs = do localTxMonitor <- BL.readFile (dir "local-tx-monitor.cddl") localStateQuery <- BL.readFile (dir "local-state-query.cddl") - peerSharingNodeToNodeV13ToLast <- BL.readFile (dir "peer-sharing-v13.cddl") + peerSharingNodeToNodeV14ToLast <- BL.readFile (dir "peer-sharing-v14.cddl") - nodeToNodeVersionDataV13ToLast <- BL.readFile (dir "node-to-node-version-data-v13.cddl") + nodeToNodeVersionDataV14ToLast <- BL.readFile (dir "node-to-node-version-data-v14.cddl") -- append common definitions; they must be appended since the first -- definition is the entry point for a cddl spec. return CDDLSpecs { cddlHandshakeNodeToClient = CDDLSpec handshakeNodeToClient, - cddlHandshakeNodeToNodeV13ToLast = CDDLSpec handshakeNodeToNodeV13ToLast, + cddlHandshakeNodeToNodeV14ToLast = CDDLSpec handshakeNodeToNodeV14ToLast, cddlChainSync = CDDLSpec $ chainSync <> common, cddlBlockFetch = CDDLSpec $ blockFetch @@ -284,10 +284,10 @@ readCDDLSpecs = do cddlLocalStateQuery = CDDLSpec $ localStateQuery <> common, - cddlPeerSharingNodeToNodeV13ToLast = CDDLSpec $ peerSharingNodeToNodeV13ToLast + cddlPeerSharingNodeToNodeV14ToLast = CDDLSpec $ peerSharingNodeToNodeV14ToLast <> common, - cddlNodeToNodeVersionDataV13ToLast = CDDLSpec nodeToNodeVersionDataV13ToLast + cddlNodeToNodeVersionDataV14ToLast = CDDLSpec nodeToNodeVersionDataV14ToLast } -- @@ -409,8 +409,8 @@ validateCBOR (CDDLSpec spec) blob = -- with Peer Sharing required yet another parameter ((see -- specs/handshake-node-to-node-v13.cddl) -- -newtype NtNHandshakeV13ToLast = - NtNHandshakeV13ToLast +newtype NtNHandshakeV14ToLast = + NtNHandshakeV14ToLast (AnyMessage (Handshake NodeToNodeVersion CBOR.Term)) deriving Show @@ -458,16 +458,16 @@ genNtNHandshake genVersion = oneof <*> (Text.pack <$> arbitrary) ] -instance Arbitrary NtNHandshakeV13ToLast where +instance Arbitrary NtNHandshakeV14ToLast where arbitrary = do - let genVersion = elements [NodeToNodeV_13 ..] - NtNHandshakeV13ToLast <$> genNtNHandshake genVersion + let genVersion = elements [NodeToNodeV_14 ..] + NtNHandshakeV14ToLast <$> genNtNHandshake genVersion -prop_encodeHandshakeNodeToNodeV13ToLast +prop_encodeHandshakeNodeToNodeV14ToLast :: CDDLSpec (Handshake NodeToNodeVersion CBOR.Term) - -> NtNHandshakeV13ToLast + -> NtNHandshakeV14ToLast -> Property -prop_encodeHandshakeNodeToNodeV13ToLast spec (NtNHandshakeV13ToLast x) = +prop_encodeHandshakeNodeToNodeV14ToLast spec (NtNHandshakeV14ToLast x) = validateEncoder spec nodeToNodeHandshakeCodec x -- TODO: add our regular tests for `Handshake NodeToClientVerision CBOR.Term` @@ -586,19 +586,19 @@ instance Arbitrary SockAddr where <*> arbitrary ] -prop_encodePeerSharingV13ToLast +prop_encodePeerSharingV14ToLast :: CDDLSpec (PeerSharing.PeerSharing SockAddr) - -> NtNVersionV13ToLast + -> NtNVersionV14ToLast -> AnyMessage (PeerSharing.PeerSharing SockAddr) -> Property -prop_encodePeerSharingV13ToLast spec (NtNVersionV13ToLast ntnVersion) = +prop_encodePeerSharingV14ToLast spec (NtNVersionV14ToLast ntnVersion) = validateEncoder spec (peerSharingCodec ntnVersion) -newtype NtNVersionV13ToLast = NtNVersionV13ToLast NodeToNodeVersion +newtype NtNVersionV14ToLast = NtNVersionV14ToLast NodeToNodeVersion deriving Show -instance Arbitrary NtNVersionV13ToLast where - arbitrary = NtNVersionV13ToLast <$> elements [NodeToNodeV_13 ..] +instance Arbitrary NtNVersionV14ToLast where + arbitrary = NtNVersionV14ToLast <$> elements [NodeToNodeV_14 ..] instance Arbitrary NodeToNodeVersionData where arbitrary = @@ -612,20 +612,20 @@ instance Arbitrary NodeToNodeVersionData where ] <*> arbitrary -newtype NtNVersionDataV13ToLast = NtNVersionDataV13ToLast (NodeToNodeVersion, NodeToNodeVersionData) +newtype NtNVersionDataV14ToLast = NtNVersionDataV14ToLast (NodeToNodeVersion, NodeToNodeVersionData) deriving Show -instance Arbitrary NtNVersionDataV13ToLast where +instance Arbitrary NtNVersionDataV14ToLast where arbitrary = do - NtNVersionV13ToLast ntnVersion <- arbitrary + NtNVersionV14ToLast ntnVersion <- arbitrary ntnVersionData <- arbitrary - return (NtNVersionDataV13ToLast (ntnVersion, ntnVersionData)) + return (NtNVersionDataV14ToLast (ntnVersion, ntnVersionData)) -prop_encodeNodeToNodeVersionDataV13ToLast +prop_encodeNodeToNodeVersionDataV14ToLast :: CDDLSpec NodeToNodeVersionData - -> NtNVersionDataV13ToLast + -> NtNVersionDataV14ToLast -> Property -prop_encodeNodeToNodeVersionDataV13ToLast spec (NtNVersionDataV13ToLast (v, a)) = +prop_encodeNodeToNodeVersionDataV14ToLast spec (NtNVersionDataV14ToLast (v, a)) = validateCBORTermEncoder spec (nodeToNodeCodecCBORTerm v) a -- @@ -939,11 +939,11 @@ unit_decodeLocalStateQuery spec = ] 100 -unit_decodePeerSharingV13ToLast +unit_decodePeerSharingV14ToLast :: CDDLSpec (PeerSharing.PeerSharing SockAddr) -> Assertion -unit_decodePeerSharingV13ToLast spec = - forM_ [NodeToNodeV_13 ..] $ \v -> +unit_decodePeerSharingV14ToLast spec = + forM_ [NodeToNodeV_14 ..] $ \v -> validateDecoder Nothing spec (peerSharingCodec v) [ SomeAgency PeerSharing.SingIdle @@ -951,11 +951,11 @@ unit_decodePeerSharingV13ToLast spec = ] 100 -unit_decodeNodeToNodeVersionDataV13ToLast +unit_decodeNodeToNodeVersionDataV14ToLast :: CDDLSpec NodeToNodeVersionData -> Assertion -unit_decodeNodeToNodeVersionDataV13ToLast spec = - forM_ [NodeToNodeV_13 ..] $ \v -> +unit_decodeNodeToNodeVersionDataV14ToLast spec = + forM_ [NodeToNodeV_14 ..] $ \v -> validateCBORTermDecoder Nothing spec (nodeToNodeCodecCBORTerm v) 100 -- diff --git a/ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v14.cddl b/ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v14.cddl new file mode 100644 index 0000000000..6bfe560b35 --- /dev/null +++ b/ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v14.cddl @@ -0,0 +1,35 @@ +; +; NodeToNode Handshake (>=v14) +; +handshakeMessage + = msgProposeVersions + / msgAcceptVersion + / msgRefuse + / msgQueryReply + +msgProposeVersions = [0, versionTable] +msgAcceptVersion = [1, versionNumber, nodeToNodeVersionData] +msgRefuse = [2, refuseReason] +msgQueryReply = [3, versionTable] + +versionTable = { * versionNumber => nodeToNodeVersionData } + +versionNumber = 14 + +nodeToNodeVersionData = [ networkMagic, initiatorOnlyDiffusionMode, peerSharing, query ] + +; range between 0 and 0xffffffff +networkMagic = 0..4294967295 +initiatorOnlyDiffusionMode = bool +; range between 0 and 1 +peerSharing = 0..1 +query = bool + +refuseReason + = refuseReasonVersionMismatch + / refuseReasonHandshakeDecodeError + / refuseReasonRefused + +refuseReasonVersionMismatch = [0, [ *versionNumber ] ] +refuseReasonHandshakeDecodeError = [1, versionNumber, tstr] +refuseReasonRefused = [2, versionNumber, tstr] diff --git a/ouroboros-network-protocols/cddl/specs/node-to-node-version-data-v14.cddl b/ouroboros-network-protocols/cddl/specs/node-to-node-version-data-v14.cddl new file mode 100644 index 0000000000..d69dbd4900 --- /dev/null +++ b/ouroboros-network-protocols/cddl/specs/node-to-node-version-data-v14.cddl @@ -0,0 +1,12 @@ +; +; NodeToNodeVersionData, v14 +; + +nodeToNodeVersionData = [ networkMagic, initiatorOnlyDiffusionMode, peerSharing, query ] + +; range between 0 and 0xffffffff +networkMagic = 0..4294967295 +initiatorOnlyDiffusionMode = bool +; range between 0 and 1 +peerSharing = 0..1 +query = bool diff --git a/ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v11-12.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/handshake-node-to-node-v11-12.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v11-12.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/handshake-node-to-node-v11-12.cddl diff --git a/ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v13.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/handshake-node-to-node-v13.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/handshake-node-to-node-v13.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/handshake-node-to-node-v13.cddl diff --git a/ouroboros-network-protocols/cddl/specs/handshake-node-to-node.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/handshake-node-to-node.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/handshake-node-to-node.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/handshake-node-to-node.cddl diff --git a/ouroboros-network-protocols/cddl/specs/node-to-node-version-data-v11-12.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/node-to-node-version-data-v11-12.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/node-to-node-version-data-v11-12.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/node-to-node-version-data-v11-12.cddl diff --git a/ouroboros-network-protocols/cddl/specs/node-to-node-version-data-v13.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/node-to-node-version-data-v13.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/node-to-node-version-data-v13.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/node-to-node-version-data-v13.cddl diff --git a/ouroboros-network-protocols/cddl/specs/node-to-node-version-data.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/node-to-node-version-data.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/node-to-node-version-data.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/node-to-node-version-data.cddl diff --git a/ouroboros-network-protocols/cddl/specs/peer-sharing-v11-12.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/peer-sharing-v11-12.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/peer-sharing-v11-12.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/peer-sharing-v11-12.cddl diff --git a/ouroboros-network-protocols/cddl/specs/peer-sharing-v13.cddl b/ouroboros-network-protocols/cddl/specs/obsolete/peer-sharing-v13.cddl similarity index 100% rename from ouroboros-network-protocols/cddl/specs/peer-sharing-v13.cddl rename to ouroboros-network-protocols/cddl/specs/obsolete/peer-sharing-v13.cddl diff --git a/ouroboros-network-protocols/cddl/specs/peer-sharing-v14.cddl b/ouroboros-network-protocols/cddl/specs/peer-sharing-v14.cddl new file mode 100644 index 0000000000..fef67334de --- /dev/null +++ b/ouroboros-network-protocols/cddl/specs/peer-sharing-v14.cddl @@ -0,0 +1,20 @@ +; +; Peer Sharing MiniProtocol +; + +peerSharingMessage = msgShareRequest + / msgSharePeers + / msgDone + +msgShareRequest = [0, byte] +msgSharePeers = [1, peerAddresses] +msgDone = [2] + +peerAddresses = [* peerAddress] + +byte = 0..255 + +peerAddress = [0, word32, portNumber] ; ipv4 + portNumber + / [1, word32, word32, word32, word32, portNumber] ; ipv6 + portNumber + +portNumber = word16 diff --git a/ouroboros-network-protocols/testlib/Ouroboros/Network/Protocol/Handshake/Test.hs b/ouroboros-network-protocols/testlib/Ouroboros/Network/Protocol/Handshake/Test.hs index 151bfa67e4..ec63747274 100644 --- a/ouroboros-network-protocols/testlib/Ouroboros/Network/Protocol/Handshake/Test.hs +++ b/ouroboros-network-protocols/testlib/Ouroboros/Network/Protocol/Handshake/Test.hs @@ -1009,12 +1009,12 @@ prop_peerSharing_symmetric createChannels codec versionDataCodec clientVersions ( Right (HandshakeNegotiationResult _ v (ArbitraryNodeToNodeVersionData clientResult)) , Right (HandshakeNegotiationResult _ v' (ArbitraryNodeToNodeVersionData serverResult)) ) | v == v' - , v >= NodeToNodeV_13 -> + , v >= NodeToNodeV_14 -> counterexample ("VersionNumber: " ++ show v) $ clientResult === serverResult | v == v' - , v < NodeToNodeV_13 -> property True + , v < NodeToNodeV_14 -> property True | otherwise -> counterexample "Version mismatch" False (Right _, Left _) -> counterexample "Acceptance mismatch" False (Left _, Right _) -> counterexample "Acceptance mismatch" False