Skip to content

Commit 3d00359

Browse files
committed
TCP according to RFC 9293.
[Feature] Signed-off-by: Markus Alexander Kuppe <[email protected]>
1 parent 616639f commit 3d00359

File tree

5 files changed

+421
-1
lines changed

5 files changed

+421
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ Here is a list of specs included in this repository, with links to the relevant
8787
| [RFC 3506: Voucher Transaction System](specifications/byihive) | Santhosh Raju, Cherry G. Mathew, Fransisca Andriani | | | || |
8888
| [TLA⁺ Level Checking](specifications/LevelChecking) | Leslie Lamport | | | | | |
8989
| [Condition-Based Consensus](specifications/cbc_max) | Thanh Hai Tran, Igor Konnov, Josef Widder | | | | | |
90-
| [Yo-Yo Leader Election](specifications/YoYo) | Ludovic Yvoz, Stephan Merz | | | || |
90+
| [Yo-Yo Leader Election](specifications/YoYo) | Ludovic Yvoz, Stephan Merz | | | || |
91+
| [TCP as defined in RFC 9293](specifications/tcp) | Markus Kuppe | | | || |
9192

9293
## Examples Elsewhere
9394
Here is a list of specs stored in locations outside this repository, including submodules.

manifest.json

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5128,6 +5128,49 @@
51285128
]
51295129
}
51305130
]
5131+
},
5132+
{
5133+
"path": "specifications/tcp",
5134+
"title": "TCP as defined in RFC 9293",
5135+
"description": "Transmission Control Protocol (TCP)",
5136+
"sources": ["https://datatracker.ietf.org/doc/html/rfc9293"],
5137+
"authors": [
5138+
"Markus Kuppe"
5139+
],
5140+
"tags": [],
5141+
"modules": [
5142+
{
5143+
"path": "specifications/tcp/tcp.tla",
5144+
"communityDependencies": [
5145+
"SequencesExt"
5146+
],
5147+
"tlaLanguageVersion": 2,
5148+
"features": [],
5149+
"models": []
5150+
},
5151+
{
5152+
"path": "specifications/tcp/MCtcp.tla",
5153+
"communityDependencies": [],
5154+
"tlaLanguageVersion": 2,
5155+
"features": [],
5156+
"models": [
5157+
{
5158+
"path": "specifications/tcp/MCtcp.cfg",
5159+
"runtime": "00:00:01",
5160+
"size": "small",
5161+
"mode": "exhaustive search",
5162+
"features": [
5163+
"state constraint",
5164+
"symmetry"
5165+
],
5166+
"result": "success",
5167+
"distinctStates": 598,
5168+
"totalStates": 3196,
5169+
"stateDepth": 14
5170+
}
5171+
]
5172+
}
5173+
]
51315174
}
51325175
]
51335176
}

specifications/tcp/MCtcp.cfg

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
CONSTANTS
2+
A = A
3+
B = B
4+
5+
CONSTANT
6+
Peers <- peers
7+
8+
SYMMETRY
9+
Symmetry
10+
11+
SPECIFICATION
12+
Spec
13+
14+
INVARIANT
15+
TypeOK
16+
Inv
17+
18+
CONSTRAINT
19+
NoRetransmission
20+
21+
ACTION_CONSTRAINT
22+
SingleActiveOpen

specifications/tcp/MCtcp.tla

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---- MODULE MCtcp ----
2+
EXTENDS tcp, TLC
3+
4+
CONSTANTS A, B
5+
peers == {A, B}
6+
Symmetry == Permutations(peers)
7+
8+
NoRetransmission ==
9+
\A p \in Peers :
10+
\A i \in 1..Len(network[p]) - 1 :
11+
network[p][i] # network[p][i + 1]
12+
13+
SingleActiveOpen ==
14+
\* A real system will allow infinitely many active opens of TCP connections. An
15+
\* explicit state model checker like TLC cannot enumerate infinitely many states.
16+
\* Thus, do not allow multiple active opens (the first active open is implicit in Init).
17+
~ \E local, remote \in Peers:
18+
\/ ACTIVE_OPEN(local, remote)
19+
\/ PASSIVE_OPEN(local, remote)
20+
\/ SEND(local, remote)
21+
22+
=============================================================================
23+
\* Modification History
24+
\* Created Tue Apr 02 10:38:50 PDT 2024 by markus

0 commit comments

Comments
 (0)