• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1% MACControl test campaign
2
3#
4# execute test:
5# $ test/run_tests -P "load_contrib('mac_control')" -t test/contrib/mac_control.uts
6#
7
8+ Basic layer handling
9
10= pause frame
11
12frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC)/\
13      MACControlPause(pause_time=0x1234)
14
15frm = Ether(frm.do_build())
16
17pause_layer  = frm[MACControlPause]
18assert pause_layer.pause_time == 0x1234
19assert pause_layer.get_pause_time(ETHER_SPEED_MBIT_10) == 0.238592
20
21= gate frame
22
23frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC)/\
24      MACControlGate(timestamp=0x12345678)
25frm = Ether(frm.do_build())
26
27gate_layer  = frm[MACControlGate]
28assert gate_layer.timestamp == 0x12345678
29
30= report frame
31
32frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC)/\
33      MACControlReport(timestamp=0x12345678, pending_grants=0x23)
34
35frm = Ether(frm.do_build())
36
37report_layer = frm[MACControlReport]
38
39assert report_layer.timestamp == 0x12345678
40assert report_layer.pending_grants == 0x23
41
42= report frame flags (generic for all other register frame types)
43
44for flag in MACControl.REGISTER_FLAGS:
45      frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC) / \
46            MACControlReport(timestamp=0x12345678, flags=flag)
47      frm = Ether(frm.do_build())
48      report_layer = frm[MACControlReport]
49      assert report_layer.flags == flag
50
51= register_req frame
52
53frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC)/\
54            MACControlRegisterReq(timestamp=0x87654321,
55                                  echoed_pending_grants=0x12,
56                                  sync_time=0x3344,
57                                  assigned_port=0x7766)
58
59frm = Ether(frm.do_build())
60register_req_layer = frm[MACControlRegisterReq]
61
62assert register_req_layer.timestamp == 0x87654321
63assert (register_req_layer.echoed_pending_grants == 0x12)
64assert (register_req_layer.sync_time == 0x3344)
65assert (register_req_layer.assigned_port == 0x7766)
66
67= register frame
68
69frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC)/\
70            MACControlRegister(timestamp=0x11223344,
71                               echoed_assigned_port=0x2277,
72                               echoed_sync_time=0x3399)
73
74frm = Ether(frm.do_build())
75register_layer = frm[MACControlRegister]
76assert register_layer.timestamp == 0x11223344
77assert register_layer.echoed_assigned_port == 0x2277
78assert register_layer.echoed_sync_time == 0x3399
79
80= register_ack frame
81
82frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC)/\
83            MACControlRegisterAck(timestamp=0x11223344,
84                                  echoed_assigned_port=0x2277,
85                                  echoed_sync_time=0x3399)
86
87frm = Ether(frm.do_build())
88register_ack_layer = frm[MACControlRegisterAck]
89assert register_ack_layer.timestamp == 0x11223344
90assert register_ack_layer.echoed_assigned_port == 0x2277
91assert register_ack_layer.echoed_sync_time == 0x3399
92
93= class based flow control frame
94
95frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC)/ \
96      MACControlClassBasedFlowControl(c0_enabled=1, c0_pause_time=0x4321,
97                                      c5_enabled=1, c5_pause_time=0x1234)
98
99frm = Ether(frm.do_build())
100cbfc_layer = frm[MACControlClassBasedFlowControl]
101assert cbfc_layer.c0_enabled
102assert cbfc_layer.c0_pause_time == 0x4321
103assert cbfc_layer.c5_enabled
104assert cbfc_layer.c5_pause_time == 0x1234
105assert not cbfc_layer.c1_enabled
106assert cbfc_layer.c1_pause_time == 0
107assert not cbfc_layer.c7_enabled
108assert cbfc_layer.c7_pause_time == 0
109assert cbfc_layer._reserved == 0
110
111+ test padding
112
113= naked frame
114
115frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC) / \
116            MACControlRegisterAck(timestamp=0x12345678)
117
118frm = frm.do_build()
119assert len(frm) == 60
120
121= single vlan tag
122
123frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC) / \
124            Dot1Q(vlan=42) / \
125            MACControlRegisterAck(timestamp=0x12345678)
126
127frm = frm.do_build()
128assert len(frm) == 60
129
130= QinQ
131
132frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC) / \
133            Dot1Q(vlan=42) / \
134            Dot1Q(vlan=42) / \
135            MACControlRegisterAck(timestamp=0x12345678)
136
137frm = frm.do_build()
138assert len(frm) == 60
139
140= hand craftet payload (disabled auto padding)
141
142frm = Ether(src='00:01:01:01:01:01', dst=MACControl.DEFAULT_DST_MAC) / \
143            MACControlRegisterAck(timestamp=0x12345678) / \
144            Raw(b'may pass devices')
145
146frm = Ether(frm.do_build())
147raw_layer = frm[Raw]
148assert raw_layer.load == b'may pass devices'
149assert len(frm) < 64
150