@@ -112,8 +112,17 @@ ETH_NET_DEVICE_INIT(eth_fake2, "eth_fake2", NULL, NULL, ð_fake_data2, NULL,
112
112
static void setup_packet_socket (int * sock , struct net_if * iface , int type ,
113
113
int proto )
114
114
{
115
+ struct timeval optval = {
116
+ .tv_usec = 100000 ,
117
+ };
118
+ int ret ;
119
+
115
120
* sock = zsock_socket (AF_PACKET , type , proto );
116
121
zassert_true (* sock >= 0 , "Cannot create packet socket (%d)" , - errno );
122
+
123
+ ret = zsock_setsockopt (* sock , SOL_SOCKET , SO_RCVTIMEO , & optval ,
124
+ sizeof (optval ));
125
+ zassert_ok (ret , "setsockopt failed (%d)" , errno );
117
126
}
118
127
119
128
static void bind_packet_socket (int sock , struct net_if * iface )
@@ -165,27 +174,13 @@ static void iface_cb(struct net_if *iface, void *user_data)
165
174
ud -> second = iface ;
166
175
}
167
176
168
- static void setblocking (int fd , bool val )
169
- {
170
- int fl , res ;
171
-
172
- fl = zsock_fcntl (fd , F_GETFL , 0 );
173
- zassert_not_equal (fl , -1 , "Fail to set fcntl" );
174
-
175
- if (val ) {
176
- fl &= ~O_NONBLOCK ;
177
- } else {
178
- fl |= O_NONBLOCK ;
179
- }
180
-
181
- res = zsock_fcntl (fd , F_SETFL , fl );
182
- zassert_not_equal (res , -1 , "Fail to set fcntl" );
183
- }
184
-
185
177
#define SRC_PORT 4240
186
178
#define DST_PORT 4242
187
179
static void prepare_udp_socket (int * sock , struct sockaddr_in * sockaddr , uint16_t local_port )
188
180
{
181
+ struct timeval optval = {
182
+ .tv_usec = 100000 ,
183
+ };
189
184
int ret ;
190
185
191
186
* sock = zsock_socket (AF_INET , SOCK_DGRAM , IPPROTO_UDP );
@@ -199,6 +194,10 @@ static void prepare_udp_socket(int *sock, struct sockaddr_in *sockaddr, uint16_t
199
194
/* Bind UDP socket to local port */
200
195
ret = zsock_bind (* sock , (struct sockaddr * ) sockaddr , sizeof (* sockaddr ));
201
196
zassert_equal (ret , 0 , "Cannot bind DGRAM (UDP) socket (%d)" , - errno );
197
+
198
+ ret = zsock_setsockopt (* sock , SOL_SOCKET , SO_RCVTIMEO , & optval ,
199
+ sizeof (optval ));
200
+ zassert_ok (ret , "setsockopt failed (%d)" , errno );
202
201
}
203
202
204
203
static void __test_packet_sockets (int * sock1 , int * sock2 )
@@ -245,9 +244,6 @@ ZTEST(socket_packet, test_raw_packet_sockets)
245
244
0 , (struct sockaddr * )& sockaddr , sizeof (sockaddr ));
246
245
zassert_equal (sent , sizeof (data_to_send ), "sendto failed" );
247
246
248
- k_msleep (10 ); /* Let the packet enter the system */
249
-
250
- setblocking (udp_sock_1 , false);
251
247
memset (& data_to_receive , 0 , sizeof (data_to_receive ));
252
248
errno = 0 ;
253
249
@@ -261,7 +257,6 @@ ZTEST(socket_packet, test_raw_packet_sockets)
261
257
"Sent and received buffers do not match" );
262
258
263
259
/* And if the packet has been also passed to RAW socket */
264
- setblocking (packet_sock_1 , false);
265
260
memset (& data_to_receive , 0 , sizeof (data_to_receive ));
266
261
memset (& src , 0 , sizeof (src ));
267
262
addrlen = sizeof (src );
@@ -294,7 +289,6 @@ ZTEST(socket_packet, test_packet_sockets_dgram)
294
289
struct user_data ud = { 0 };
295
290
struct sockaddr_ll dst , src ;
296
291
int ret ;
297
- int iter , max_iter = 10 ;
298
292
299
293
net_if_foreach (iface_cb , & ud );
300
294
@@ -304,9 +298,6 @@ ZTEST(socket_packet, test_packet_sockets_dgram)
304
298
prepare_packet_socket (& packet_sock_1 , ud .first , SOCK_DGRAM , htons (ETH_P_TSN ));
305
299
prepare_packet_socket (& packet_sock_2 , ud .second , SOCK_DGRAM , htons (ETH_P_TSN ));
306
300
307
- setblocking (packet_sock_1 , false);
308
- setblocking (packet_sock_2 , false);
309
-
310
301
memset (& dst , 0 , sizeof (dst ));
311
302
dst .sll_family = AF_PACKET ;
312
303
dst .sll_protocol = htons (ETH_P_TSN );
@@ -317,23 +308,15 @@ ZTEST(socket_packet, test_packet_sockets_dgram)
317
308
zassert_equal (ret , sizeof (data_to_send ), "Cannot send all data (%d)" ,
318
309
- errno );
319
310
320
- k_msleep (10 ); /* Let the packet enter the system */
321
-
322
311
ret = zsock_recvfrom (packet_sock_2 , data_to_receive , sizeof (data_to_receive ), 0 ,
323
312
(struct sockaddr * )& src , & addrlen );
324
313
zassert_equal (ret , -1 , "Received something (%d)" , ret );
325
314
zassert_equal (errno , EAGAIN , "Wrong errno (%d)" , errno );
326
315
327
316
memset (& src , 0 , sizeof (src ));
328
317
errno = 0 ;
329
- iter = 0 ;
330
- do {
331
- ret = zsock_recvfrom (packet_sock_1 , data_to_receive , sizeof (data_to_receive ),
332
- 0 , (struct sockaddr * )& src , & addrlen );
333
- k_msleep (10 );
334
- iter ++ ;
335
- } while (ret < 0 && errno == EAGAIN && iter < max_iter );
336
-
318
+ ret = zsock_recvfrom (packet_sock_1 , data_to_receive , sizeof (data_to_receive ),
319
+ 0 , (struct sockaddr * )& src , & addrlen );
337
320
zassert_equal (ret , sizeof (data_to_send ),
338
321
"Cannot receive all data (%d vs %zd) (%d)" ,
339
322
ret , sizeof (data_to_send ), - errno );
@@ -366,7 +349,6 @@ ZTEST(socket_packet, test_packet_sockets_dgram)
366
349
zassert_equal (ret , sizeof (data_to_send ), "Cannot send all data (%d)" ,
367
350
- errno );
368
351
369
- k_msleep (10 );
370
352
memset (& src , 0 , sizeof (src ));
371
353
372
354
ret = zsock_recvfrom (packet_sock_1 , data_to_receive , sizeof (data_to_receive ), 0 ,
@@ -377,14 +359,8 @@ ZTEST(socket_packet, test_packet_sockets_dgram)
377
359
memset (& src , 0 , sizeof (src ));
378
360
379
361
errno = 0 ;
380
- iter = 0 ;
381
- do {
382
- ret = zsock_recvfrom (packet_sock_2 , data_to_receive , sizeof (data_to_receive ),
383
- 0 , (struct sockaddr * )& src , & addrlen );
384
- k_msleep (10 );
385
- iter ++ ;
386
- } while (ret < 0 && errno == EAGAIN && iter < max_iter );
387
-
362
+ ret = zsock_recvfrom (packet_sock_2 , data_to_receive , sizeof (data_to_receive ),
363
+ 0 , (struct sockaddr * )& src , & addrlen );
388
364
zassert_equal (ret , sizeof (data_to_send ), "Cannot receive all data (%d)" ,
389
365
- errno );
390
366
zassert_equal (addrlen , sizeof (struct sockaddr_ll ),
@@ -421,17 +397,10 @@ ZTEST(socket_packet, test_packet_sockets_dgram)
421
397
(const struct sockaddr * )& dst , sizeof (struct sockaddr_ll ));
422
398
zassert_equal (ret , sizeof (payload_ip_length ), "Cannot send all data (%d)" , - errno );
423
399
424
- k_msleep (10 );
425
-
426
400
memset (& src , 0 , sizeof (src ));
427
401
errno = 0 ;
428
- iter = 0 ;
429
- do {
430
- ret = zsock_recvfrom (packet_sock_2 , receive_ip_length , sizeof (receive_ip_length ), 0 ,
431
- (struct sockaddr * )& src , & addrlen );
432
- k_msleep (10 );
433
- iter ++ ;
434
- } while (ret < 0 && errno == EAGAIN && iter < max_iter );
402
+ ret = zsock_recvfrom (packet_sock_2 , receive_ip_length , sizeof (receive_ip_length ), 0 ,
403
+ (struct sockaddr * )& src , & addrlen );
435
404
436
405
zassert_equal (ret , ARRAY_SIZE (payload_ip_length ), "Cannot receive all data (%d)" , - errno );
437
406
zassert_mem_equal (payload_ip_length , receive_ip_length , sizeof (payload_ip_length ),
@@ -446,7 +415,6 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_exchange)
446
415
struct user_data ud = { 0 };
447
416
struct sockaddr_ll dst , src ;
448
417
int ret ;
449
- int iter , max_iter = 10 ;
450
418
const uint8_t expected_payload_raw [] = {
451
419
0x02 , 0x02 , 0x02 , 0x02 , 0x02 , 0x02 , /* Dst ll addr */
452
420
0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , /* Src ll addr */
@@ -469,9 +437,6 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_exchange)
469
437
prepare_packet_socket (& packet_sock_1 , ud .first , SOCK_DGRAM , htons (ETH_P_ALL ));
470
438
prepare_packet_socket (& packet_sock_2 , ud .second , SOCK_RAW , htons (ETH_P_ALL ));
471
439
472
- setblocking (packet_sock_1 , false);
473
- setblocking (packet_sock_2 , false);
474
-
475
440
memset (& dst , 0 , sizeof (dst ));
476
441
dst .sll_family = AF_PACKET ;
477
442
dst .sll_protocol = htons (ETH_P_IP );
@@ -488,18 +453,11 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_exchange)
488
453
memset (& src , 0 , sizeof (src ));
489
454
490
455
errno = 0 ;
491
- iter = 0 ;
492
- do {
493
- ret = zsock_recvfrom (packet_sock_2 , data_to_receive , sizeof (data_to_receive ),
494
- 0 , (struct sockaddr * )& src , & addrlen );
495
- k_msleep (10 );
496
- iter ++ ;
497
- } while (ret < 0 && errno == EAGAIN && iter < max_iter );
498
-
456
+ ret = zsock_recvfrom (packet_sock_2 , data_to_receive , sizeof (data_to_receive ),
457
+ 0 , (struct sockaddr * )& src , & addrlen );
499
458
zassert_equal (ret , sizeof (expected_payload_raw ),
500
459
"Cannot receive all data (%d vs %zd) (%d)" ,
501
460
ret , sizeof (expected_payload_raw ), - errno );
502
-
503
461
zassert_mem_equal (expected_payload_raw , data_to_receive ,
504
462
sizeof (expected_payload_raw ), "Data mismatch" );
505
463
@@ -514,18 +472,11 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_exchange)
514
472
zassert_equal (ret , sizeof (send_payload_raw ), "Cannot send all data (%d)" ,
515
473
- errno );
516
474
517
- k_msleep (10 );
518
475
memset (& src , 0 , sizeof (src ));
519
476
520
477
errno = 0 ;
521
- iter = 0 ;
522
- do {
523
- ret = zsock_recvfrom (packet_sock_1 , data_to_receive , sizeof (data_to_receive ),
524
- 0 , (struct sockaddr * )& src , & addrlen );
525
- k_msleep (10 );
526
- iter ++ ;
527
- } while (ret < 0 && errno == EAGAIN && iter < max_iter );
528
-
478
+ ret = zsock_recvfrom (packet_sock_1 , data_to_receive , sizeof (data_to_receive ),
479
+ 0 , (struct sockaddr * )& src , & addrlen );
529
480
zassert_equal (ret , sizeof (data_to_send ), "Cannot receive all data (%d)" ,
530
481
- errno );
531
482
zassert_mem_equal (data_to_send , data_to_receive , sizeof (data_to_send ),
@@ -540,7 +491,6 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_recv)
540
491
struct user_data ud = { 0 };
541
492
struct sockaddr_ll dst , src ;
542
493
int ret ;
543
- int iter , max_iter = 10 ;
544
494
const uint8_t expected_payload_raw [] = {
545
495
0x02 , 0x02 , 0x02 , 0x02 , 0x02 , 0x02 , /* Dst ll addr */
546
496
0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , /* Src ll addr */
@@ -557,10 +507,6 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_recv)
557
507
prepare_packet_socket (& packet_sock_2 , ud .second , SOCK_RAW , htons (ETH_P_ALL ));
558
508
prepare_packet_socket (& packet_sock_3 , ud .second , SOCK_RAW , htons (ETH_P_ALL ));
559
509
560
- setblocking (packet_sock_1 , false);
561
- setblocking (packet_sock_2 , false);
562
- setblocking (packet_sock_3 , false);
563
-
564
510
memset (& dst , 0 , sizeof (dst ));
565
511
dst .sll_family = AF_PACKET ;
566
512
dst .sll_protocol = htons (ETH_P_IP );
@@ -571,20 +517,13 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_recv)
571
517
zassert_equal (ret , sizeof (data_to_send ), "Cannot send all data (%d)" ,
572
518
- errno );
573
519
574
- k_msleep (10 ); /* Let the packet enter the system */
575
520
memset (& src , 0 , sizeof (src ));
576
521
577
522
/* Both SOCK_DGRAM to SOCK_RAW sockets should receive packet. */
578
523
579
524
errno = 0 ;
580
- iter = 0 ;
581
- do {
582
- ret = zsock_recvfrom (packet_sock_2 , data_to_receive , sizeof (data_to_receive ),
583
- 0 , (struct sockaddr * )& src , & addrlen );
584
- k_msleep (10 );
585
- iter ++ ;
586
- } while (ret < 0 && errno == EAGAIN && iter < max_iter );
587
-
525
+ ret = zsock_recvfrom (packet_sock_2 , data_to_receive , sizeof (data_to_receive ),
526
+ 0 , (struct sockaddr * )& src , & addrlen );
588
527
zassert_equal (ret , sizeof (expected_payload_raw ),
589
528
"Cannot receive all data (%d vs %zd) (%d)" ,
590
529
ret , sizeof (expected_payload_raw ), - errno );
@@ -595,14 +534,8 @@ ZTEST(socket_packet, test_raw_and_dgram_socket_recv)
595
534
memset (& src , 0 , sizeof (src ));
596
535
597
536
errno = 0 ;
598
- iter = 0 ;
599
- do {
600
- ret = zsock_recvfrom (packet_sock_3 , data_to_receive , sizeof (data_to_receive ),
601
- 0 , (struct sockaddr * )& src , & addrlen );
602
- k_msleep (10 );
603
- iter ++ ;
604
- } while (ret < 0 && errno == EAGAIN && iter < max_iter );
605
-
537
+ ret = zsock_recvfrom (packet_sock_3 , data_to_receive , sizeof (data_to_receive ),
538
+ 0 , (struct sockaddr * )& src , & addrlen );
606
539
zassert_equal (ret , sizeof (expected_payload_raw ),
607
540
"Cannot receive all data (%d)" , - errno );
608
541
zassert_mem_equal (expected_payload_raw , data_to_receive ,
0 commit comments