Skip to content

Commit cbc32da

Browse files
fmaurer-rhNipaLocal
authored andcommitted
selftests: can: Document test_raw_filter test cases
The expected results did not explain very well what was really tested. Make the expectations more clear by writing out the flags that should be set in the received frames and add a short explanation for each test case. Also, document the overall test design. Signed-off-by: Felix Maurer <[email protected]> Signed-off-by: NipaLocal <nipa@local>
1 parent 6be9654 commit cbc32da

File tree

1 file changed

+49
-16
lines changed

1 file changed

+49
-16
lines changed

tools/testing/selftests/net/can/test_raw_filter.c

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -101,138 +101,171 @@ FIXTURE_VARIANT(can_filters) {
101101
int exp_num_rx;
102102
int exp_rxbits;
103103
};
104+
#define T_EFF (CAN_EFF_FLAG >> 28)
105+
#define T_RTR (CAN_RTR_FLAG >> 28)
104106

107+
/* Receive all frames when filtering for the ID in standard frame format */
105108
FIXTURE_VARIANT_ADD(can_filters, base) {
106109
.testcase = 1,
107110
.id = ID,
108111
.mask = CAN_SFF_MASK,
109112
.exp_num_rx = 4,
110-
.exp_rxbits = 4369,
113+
.exp_rxbits = (1 | 1 << (T_EFF) | 1 << (T_RTR) | 1 << (T_EFF | T_RTR)),
111114
};
115+
/* Ignore EFF flag in filter ID if not covered by filter mask */
112116
FIXTURE_VARIANT_ADD(can_filters, base_eff) {
113117
.testcase = 2,
114118
.id = ID | CAN_EFF_FLAG,
115119
.mask = CAN_SFF_MASK,
116120
.exp_num_rx = 4,
117-
.exp_rxbits = 4369,
121+
.exp_rxbits = (1 | 1 << (T_EFF) | 1 << (T_RTR) | 1 << (T_EFF | T_RTR)),
118122
};
123+
/* Ignore RTR flag in filter ID if not covered by filter mask */
119124
FIXTURE_VARIANT_ADD(can_filters, base_rtr) {
120125
.testcase = 3,
121126
.id = ID | CAN_RTR_FLAG,
122127
.mask = CAN_SFF_MASK,
123128
.exp_num_rx = 4,
124-
.exp_rxbits = 4369,
129+
.exp_rxbits = (1 | 1 << (T_EFF) | 1 << (T_RTR) | 1 << (T_EFF | T_RTR)),
125130
};
131+
/* Ignore EFF and RTR flags in filter ID if not covered by filter mask */
126132
FIXTURE_VARIANT_ADD(can_filters, base_effrtr) {
127133
.testcase = 4,
128134
.id = ID | CAN_EFF_FLAG | CAN_RTR_FLAG,
129135
.mask = CAN_SFF_MASK,
130136
.exp_num_rx = 4,
131-
.exp_rxbits = 4369,
137+
.exp_rxbits = (1 | 1 << (T_EFF) | 1 << (T_RTR) | 1 << (T_EFF | T_RTR)),
132138
};
133139

140+
/* Receive only SFF frames when expecting no EFF flag */
134141
FIXTURE_VARIANT_ADD(can_filters, filter_eff) {
135142
.testcase = 5,
136143
.id = ID,
137144
.mask = CAN_SFF_MASK | CAN_EFF_FLAG,
138145
.exp_num_rx = 2,
139-
.exp_rxbits = 17,
146+
.exp_rxbits = (1 | 1 << (T_RTR)),
140147
};
148+
/* Receive only EFF frames when filter id and filter mask include EFF flag */
141149
FIXTURE_VARIANT_ADD(can_filters, filter_eff_eff) {
142150
.testcase = 6,
143151
.id = ID | CAN_EFF_FLAG,
144152
.mask = CAN_SFF_MASK | CAN_EFF_FLAG,
145153
.exp_num_rx = 2,
146-
.exp_rxbits = 4352,
154+
.exp_rxbits = (1 << (T_EFF) | 1 << (T_EFF | T_RTR)),
147155
};
156+
/* Receive only SFF frames when expecting no EFF flag, ignoring RTR flag */
148157
FIXTURE_VARIANT_ADD(can_filters, filter_eff_rtr) {
149158
.testcase = 7,
150159
.id = ID | CAN_RTR_FLAG,
151160
.mask = CAN_SFF_MASK | CAN_EFF_FLAG,
152161
.exp_num_rx = 2,
153-
.exp_rxbits = 17,
162+
.exp_rxbits = (1 | 1 << (T_RTR)),
154163
};
164+
/* Receive only EFF frames when filter id and filter mask include EFF flag,
165+
* ignoring RTR flag
166+
*/
155167
FIXTURE_VARIANT_ADD(can_filters, filter_eff_effrtr) {
156168
.testcase = 8,
157169
.id = ID | CAN_EFF_FLAG | CAN_RTR_FLAG,
158170
.mask = CAN_SFF_MASK | CAN_EFF_FLAG,
159171
.exp_num_rx = 2,
160-
.exp_rxbits = 4352,
172+
.exp_rxbits = (1 << (T_EFF) | 1 << (T_EFF | T_RTR)),
161173
};
162174

175+
/* Receive no remote frames when filtering for no RTR flag */
163176
FIXTURE_VARIANT_ADD(can_filters, filter_rtr) {
164177
.testcase = 9,
165178
.id = ID,
166179
.mask = CAN_SFF_MASK | CAN_RTR_FLAG,
167180
.exp_num_rx = 2,
168-
.exp_rxbits = 257,
181+
.exp_rxbits = (1 | 1 << (T_EFF)),
169182
};
183+
/* Receive no remote frames when filtering for no RTR flag, ignoring EFF flag */
170184
FIXTURE_VARIANT_ADD(can_filters, filter_rtr_eff) {
171185
.testcase = 10,
172186
.id = ID | CAN_EFF_FLAG,
173187
.mask = CAN_SFF_MASK | CAN_RTR_FLAG,
174188
.exp_num_rx = 2,
175-
.exp_rxbits = 257,
189+
.exp_rxbits = (1 | 1 << (T_EFF)),
176190
};
191+
/* Receive only remote frames when filter includes RTR flag */
177192
FIXTURE_VARIANT_ADD(can_filters, filter_rtr_rtr) {
178193
.testcase = 11,
179194
.id = ID | CAN_RTR_FLAG,
180195
.mask = CAN_SFF_MASK | CAN_RTR_FLAG,
181196
.exp_num_rx = 2,
182-
.exp_rxbits = 4112,
197+
.exp_rxbits = (1 << (T_RTR) | 1 << (T_EFF | T_RTR)),
183198
};
199+
/* Receive only remote frames when filter includes RTR flag, ignoring EFF
200+
* flag
201+
*/
184202
FIXTURE_VARIANT_ADD(can_filters, filter_rtr_effrtr) {
185203
.testcase = 12,
186204
.id = ID | CAN_EFF_FLAG | CAN_RTR_FLAG,
187205
.mask = CAN_SFF_MASK | CAN_RTR_FLAG,
188206
.exp_num_rx = 2,
189-
.exp_rxbits = 4112,
207+
.exp_rxbits = (1 << (T_RTR) | 1 << (T_EFF | T_RTR)),
190208
};
191209

210+
/* Receive only SFF data frame when filtering for no flags */
192211
FIXTURE_VARIANT_ADD(can_filters, filter_effrtr) {
193212
.testcase = 13,
194213
.id = ID,
195214
.mask = CAN_SFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG,
196215
.exp_num_rx = 1,
197216
.exp_rxbits = 1,
198217
};
218+
/* Receive only EFF data frame when filtering for EFF but no RTR flag */
199219
FIXTURE_VARIANT_ADD(can_filters, filter_effrtr_eff) {
200220
.testcase = 14,
201221
.id = ID | CAN_EFF_FLAG,
202222
.mask = CAN_SFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG,
203223
.exp_num_rx = 1,
204-
.exp_rxbits = 256,
224+
.exp_rxbits = (1 << (T_EFF)),
205225
};
226+
/* Receive only SFF remote frame when filtering for RTR but no EFF flag */
206227
FIXTURE_VARIANT_ADD(can_filters, filter_effrtr_rtr) {
207228
.testcase = 15,
208229
.id = ID | CAN_RTR_FLAG,
209230
.mask = CAN_SFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG,
210231
.exp_num_rx = 1,
211-
.exp_rxbits = 16,
232+
.exp_rxbits = (1 << (T_RTR)),
212233
};
234+
/* Receive only EFF remote frame when filtering for EFF and RTR flag */
213235
FIXTURE_VARIANT_ADD(can_filters, filter_effrtr_effrtr) {
214236
.testcase = 16,
215237
.id = ID | CAN_EFF_FLAG | CAN_RTR_FLAG,
216238
.mask = CAN_SFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG,
217239
.exp_num_rx = 1,
218-
.exp_rxbits = 4096,
240+
.exp_rxbits = (1 << (T_EFF | T_RTR)),
219241
};
220242

243+
/* Receive only SFF data frame when filtering for no EFF flag and no RTR flag
244+
* but based on EFF mask
245+
*/
221246
FIXTURE_VARIANT_ADD(can_filters, eff) {
222247
.testcase = 17,
223248
.id = ID,
224249
.mask = CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG,
225250
.exp_num_rx = 1,
226251
.exp_rxbits = 1,
227252
};
253+
/* Receive only EFF data frame when filtering for EFF flag and no RTR flag but
254+
* based on EFF mask
255+
*/
228256
FIXTURE_VARIANT_ADD(can_filters, eff_eff) {
229257
.testcase = 18,
230258
.id = ID | CAN_EFF_FLAG,
231259
.mask = CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG,
232260
.exp_num_rx = 1,
233-
.exp_rxbits = 256,
261+
.exp_rxbits = (1 << (T_EFF)),
234262
};
235263

264+
/* This test verifies that the raw CAN filters work, by checking if only frames
265+
* with the expected set of flags are received. For each test case, the given
266+
* filter (id and mask) is added and four CAN frames are sent with every
267+
* combination of set/unset EFF/RTR flags.
268+
*/
236269
TEST_F(can_filters, test_filter)
237270
{
238271
fd_set rdfs;

0 commit comments

Comments
 (0)