Skip to content

Commit 4355f1c

Browse files
committed
feat: Add function to retrieve layer info for a stage
1 parent 9aa1440 commit 4355f1c

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

src/utils/getLayerInfoForStage.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { TCP_IP_LAYER_NAMES, type TCPIPLayerName } from '@/data'
2+
3+
/**
4+
* Up the stack = receiving data (e.g. parsing headers, delivering data to app)
5+
* Down the stack = sending data (e.g. wrapping data with headers to send)
6+
*/
7+
const layerInfoMap: Record<TCPIPLayerName, { down: string; up: string }> = {
8+
[TCP_IP_LAYER_NAMES.application]: {
9+
down: 'Application Layer: Creating data payload',
10+
up: 'Application Layer: Consuming data payload',
11+
},
12+
[TCP_IP_LAYER_NAMES.transport]: {
13+
down: 'Transport Layer: Adding TCP header (ports, sequence numbers)',
14+
up: 'Transport Layer: Parsing TCP header (ports, sequence numbers)',
15+
},
16+
[TCP_IP_LAYER_NAMES.internet]: {
17+
down: 'Internet Layer: Adding IP header (addresses, routing)',
18+
up: 'Internet Layer: Parsing IP header (addresses, routing)',
19+
},
20+
[TCP_IP_LAYER_NAMES.network_interface]: {
21+
down: 'Network Interface Layer: Adding Ethernet frame header (MAC addressing)',
22+
up: 'Network Interface Layer: Parsing Ethernet frame header (MAC addressing)',
23+
},
24+
[TCP_IP_LAYER_NAMES.transmission]: {
25+
down: 'Transmission Layer: Transmitting data across the network',
26+
up: 'Transmission Layer: Receiving data across the network',
27+
},
28+
}
29+
30+
const STAGE_TO_LAYER: Record<number, TCPIPLayerName> = {
31+
0: TCP_IP_LAYER_NAMES.application,
32+
1: TCP_IP_LAYER_NAMES.transport,
33+
2: TCP_IP_LAYER_NAMES.internet,
34+
3: TCP_IP_LAYER_NAMES.network_interface,
35+
4: TCP_IP_LAYER_NAMES.transmission,
36+
5: TCP_IP_LAYER_NAMES.network_interface,
37+
6: TCP_IP_LAYER_NAMES.internet,
38+
7: TCP_IP_LAYER_NAMES.transport,
39+
8: TCP_IP_LAYER_NAMES.application,
40+
}
41+
42+
function getLayerInfoForStage(stage: number, isClientToServer: boolean) {
43+
const layerName = STAGE_TO_LAYER[stage]
44+
const layerInfo = layerInfoMap[layerName]
45+
return isClientToServer ? layerInfo.down : layerInfo.up
46+
}
47+
48+
export default getLayerInfoForStage

0 commit comments

Comments
 (0)