@@ -339,9 +339,11 @@ TEST_F(msg_oob, non_oob)
339
339
{
340
340
sendpair ("x" , 1 , 0 );
341
341
epollpair (false);
342
+ siocatmarkpair (false);
342
343
343
344
recvpair ("" , - EINVAL , 1 , MSG_OOB );
344
345
epollpair (false);
346
+ siocatmarkpair (false);
345
347
}
346
348
347
349
TEST_F (msg_oob , oob )
@@ -359,151 +361,198 @@ TEST_F(msg_oob, oob_drop)
359
361
{
360
362
sendpair ("x" , 1 , MSG_OOB );
361
363
epollpair (true);
364
+ siocatmarkpair (true);
362
365
363
366
recvpair ("" , - EAGAIN , 1 , 0 ); /* Drop OOB. */
364
367
epollpair (false);
368
+ siocatmarkpair (false);
365
369
366
370
recvpair ("" , - EINVAL , 1 , MSG_OOB );
367
371
epollpair (false);
372
+ siocatmarkpair (false);
368
373
}
369
374
370
375
TEST_F (msg_oob , oob_ahead )
371
376
{
372
377
sendpair ("hello" , 5 , MSG_OOB );
373
378
epollpair (true);
379
+ siocatmarkpair (false);
374
380
375
381
recvpair ("o" , 1 , 1 , MSG_OOB );
376
382
epollpair (false);
383
+ siocatmarkpair (false);
377
384
378
385
recvpair ("hell" , 4 , 4 , 0 );
379
386
epollpair (false);
387
+ siocatmarkpair (true);
380
388
}
381
389
382
390
TEST_F (msg_oob , oob_break )
383
391
{
384
392
sendpair ("hello" , 5 , MSG_OOB );
385
393
epollpair (true);
394
+ siocatmarkpair (false);
386
395
387
396
recvpair ("hell" , 4 , 5 , 0 ); /* Break at OOB even with enough buffer. */
388
397
epollpair (true);
398
+ siocatmarkpair (true);
389
399
390
400
recvpair ("o" , 1 , 1 , MSG_OOB );
391
401
epollpair (false);
402
+ siocatmarkpair (true);
403
+
404
+ recvpair ("" , - EAGAIN , 1 , 0 );
405
+ siocatmarkpair (false);
392
406
}
393
407
394
408
TEST_F (msg_oob , oob_ahead_break )
395
409
{
396
410
sendpair ("hello" , 5 , MSG_OOB );
397
411
epollpair (true);
412
+ siocatmarkpair (false);
398
413
399
414
sendpair ("world" , 5 , 0 );
400
415
epollpair (true);
416
+ siocatmarkpair (false);
401
417
402
418
recvpair ("o" , 1 , 1 , MSG_OOB );
403
419
epollpair (false);
420
+ siocatmarkpair (false);
404
421
405
422
recvpair ("hell" , 4 , 9 , 0 ); /* Break at OOB even after it's recv()ed. */
406
423
epollpair (false);
424
+ siocatmarkpair (true);
407
425
408
426
recvpair ("world" , 5 , 5 , 0 );
409
427
epollpair (false);
428
+ siocatmarkpair (false);
410
429
}
411
430
412
431
TEST_F (msg_oob , oob_break_drop )
413
432
{
414
433
sendpair ("hello" , 5 , MSG_OOB );
415
434
epollpair (true);
435
+ siocatmarkpair (false);
416
436
417
437
sendpair ("world" , 5 , 0 );
418
438
epollpair (true);
439
+ siocatmarkpair (false);
419
440
420
441
recvpair ("hell" , 4 , 10 , 0 ); /* Break at OOB even with enough buffer. */
421
442
epollpair (true);
443
+ siocatmarkpair (true);
422
444
423
445
recvpair ("world" , 5 , 10 , 0 ); /* Drop OOB and recv() the next skb. */
424
446
epollpair (false);
447
+ siocatmarkpair (false);
425
448
426
449
recvpair ("" , - EINVAL , 1 , MSG_OOB );
427
450
epollpair (false);
451
+ siocatmarkpair (false);
428
452
}
429
453
430
454
TEST_F (msg_oob , ex_oob_break )
431
455
{
432
456
sendpair ("hello" , 5 , MSG_OOB );
433
457
epollpair (true);
458
+ siocatmarkpair (false);
434
459
435
460
sendpair ("wor" , 3 , MSG_OOB );
436
461
epollpair (true);
462
+ siocatmarkpair (false);
437
463
438
464
sendpair ("ld" , 2 , 0 );
439
465
epollpair (true);
466
+ siocatmarkpair (false);
440
467
441
468
recvpair ("hellowo" , 7 , 10 , 0 ); /* Break at OOB but not at ex-OOB. */
442
469
epollpair (true);
470
+ siocatmarkpair (true);
443
471
444
472
recvpair ("r" , 1 , 1 , MSG_OOB );
445
473
epollpair (false);
474
+ siocatmarkpair (true);
446
475
447
476
recvpair ("ld" , 2 , 2 , 0 );
448
477
epollpair (false);
478
+ siocatmarkpair (false);
449
479
}
450
480
451
481
TEST_F (msg_oob , ex_oob_drop )
452
482
{
453
483
sendpair ("x" , 1 , MSG_OOB );
454
484
epollpair (true);
485
+ siocatmarkpair (true);
455
486
456
487
sendpair ("y" , 1 , MSG_OOB ); /* TCP drops "x" at this moment. */
457
488
epollpair (true);
458
489
459
490
tcp_incompliant {
491
+ siocatmarkpair (false);
492
+
460
493
recvpair ("x" , 1 , 1 , 0 ); /* TCP drops "y" by passing through it. */
461
494
epollpair (true);
495
+ siocatmarkpair (true);
462
496
463
497
recvpair ("y" , 1 , 1 , MSG_OOB ); /* TCP returns -EINVAL. */
464
498
epollpair (false);
499
+ siocatmarkpair (true);
465
500
}
466
501
}
467
502
468
503
TEST_F (msg_oob , ex_oob_drop_2 )
469
504
{
470
505
sendpair ("x" , 1 , MSG_OOB );
471
506
epollpair (true);
507
+ siocatmarkpair (true);
472
508
473
509
sendpair ("y" , 1 , MSG_OOB ); /* TCP drops "x" at this moment. */
474
510
epollpair (true);
475
511
512
+ tcp_incompliant {
513
+ siocatmarkpair (false );
514
+ }
515
+
476
516
recvpair ("y" , 1 , 1 , MSG_OOB );
477
517
epollpair (false);
478
518
479
519
tcp_incompliant {
520
+ siocatmarkpair (false);
521
+
480
522
recvpair ("x" , 1 , 1 , 0 ); /* TCP returns -EAGAIN. */
481
523
epollpair (false);
524
+ siocatmarkpair (true);
482
525
}
483
526
}
484
527
485
528
TEST_F (msg_oob , ex_oob_ahead_break )
486
529
{
487
530
sendpair ("hello" , 5 , MSG_OOB );
488
531
epollpair (true);
532
+ siocatmarkpair (false);
489
533
490
534
sendpair ("wor" , 3 , MSG_OOB );
491
535
epollpair (true);
536
+ siocatmarkpair (false);
492
537
493
538
recvpair ("r" , 1 , 1 , MSG_OOB );
494
539
epollpair (false);
540
+ siocatmarkpair (false);
495
541
496
542
sendpair ("ld" , 2 , MSG_OOB );
497
543
epollpair (true);
544
+ siocatmarkpair (false);
498
545
499
546
tcp_incompliant {
500
547
recvpair ("hellowol" , 8 , 10 , 0 ); /* TCP recv()s "helloworl", why "r" ?? */
501
548
}
502
549
503
550
epollpair (true);
551
+ siocatmarkpair (true);
504
552
505
553
recvpair ("d" , 1 , 1 , MSG_OOB );
506
554
epollpair (false);
555
+ siocatmarkpair (true);
507
556
}
508
557
509
558
TEST_F (msg_oob , ex_oob_siocatmark )
@@ -548,93 +597,116 @@ TEST_F(msg_oob, inline_oob_break)
548
597
549
598
sendpair ("hello" , 5 , MSG_OOB );
550
599
epollpair (true);
600
+ siocatmarkpair (false);
551
601
552
602
recvpair ("" , - EINVAL , 1 , MSG_OOB );
553
603
epollpair (true);
604
+ siocatmarkpair (false);
554
605
555
606
recvpair ("hell" , 4 , 5 , 0 ); /* Break at OOB but not at ex-OOB. */
556
607
epollpair (true);
608
+ siocatmarkpair (true);
557
609
558
610
recvpair ("o" , 1 , 1 , 0 );
559
611
epollpair (false);
612
+ siocatmarkpair (false);
560
613
}
561
614
562
615
TEST_F (msg_oob , inline_oob_ahead_break )
563
616
{
564
617
sendpair ("hello" , 5 , MSG_OOB );
565
618
epollpair (true);
619
+ siocatmarkpair (false);
566
620
567
621
sendpair ("world" , 5 , 0 );
568
622
epollpair (true);
623
+ siocatmarkpair (false);
569
624
570
625
recvpair ("o" , 1 , 1 , MSG_OOB );
571
626
epollpair (false);
627
+ siocatmarkpair (false);
572
628
573
629
setinlinepair ();
574
630
575
631
recvpair ("hell" , 4 , 9 , 0 ); /* Break at OOB even with enough buffer. */
576
632
epollpair (false);
633
+ siocatmarkpair (true);
577
634
578
635
tcp_incompliant {
579
636
recvpair ("world" , 5 , 6 , 0 ); /* TCP recv()s "oworld", ... "o" ??? */
580
637
}
581
638
582
639
epollpair (false);
640
+ siocatmarkpair (false);
583
641
}
584
642
585
643
TEST_F (msg_oob , inline_ex_oob_break )
586
644
{
587
645
sendpair ("hello" , 5 , MSG_OOB );
588
646
epollpair (true);
647
+ siocatmarkpair (false);
589
648
590
649
sendpair ("wor" , 3 , MSG_OOB );
591
650
epollpair (true);
651
+ siocatmarkpair (false);
592
652
593
653
sendpair ("ld" , 2 , 0 );
594
654
epollpair (true);
655
+ siocatmarkpair (false);
595
656
596
657
setinlinepair ();
597
658
598
659
recvpair ("hellowo" , 7 , 10 , 0 ); /* Break at OOB but not at ex-OOB. */
599
660
epollpair (true);
661
+ siocatmarkpair (true);
600
662
601
663
recvpair ("rld" , 3 , 3 , 0 );
602
664
epollpair (false);
665
+ siocatmarkpair (false);
603
666
}
604
667
605
668
TEST_F (msg_oob , inline_ex_oob_no_drop )
606
669
{
607
670
sendpair ("x" , 1 , MSG_OOB );
608
671
epollpair (true);
672
+ siocatmarkpair (true);
609
673
610
674
setinlinepair ();
611
675
612
676
sendpair ("y" , 1 , MSG_OOB ); /* TCP does NOT drops "x" at this moment. */
613
677
epollpair (true);
678
+ siocatmarkpair (false);
614
679
615
680
recvpair ("x" , 1 , 1 , 0 );
616
681
epollpair (true);
682
+ siocatmarkpair (true);
617
683
618
684
recvpair ("y" , 1 , 1 , 0 );
619
685
epollpair (false);
686
+ siocatmarkpair (false);
620
687
}
621
688
622
689
TEST_F (msg_oob , inline_ex_oob_drop )
623
690
{
624
691
sendpair ("x" , 1 , MSG_OOB );
625
692
epollpair (true);
693
+ siocatmarkpair (true);
626
694
627
695
sendpair ("y" , 1 , MSG_OOB ); /* TCP drops "x" at this moment. */
628
696
epollpair (true);
629
697
630
698
setinlinepair ();
631
699
632
700
tcp_incompliant {
701
+ siocatmarkpair (false);
702
+
633
703
recvpair ("x" , 1 , 1 , 0 ); /* TCP recv()s "y". */
634
704
epollpair (true);
705
+ siocatmarkpair (true);
635
706
636
707
recvpair ("y" , 1 , 1 , 0 ); /* TCP returns -EAGAIN. */
637
708
epollpair (false);
709
+ siocatmarkpair (false);
638
710
}
639
711
}
640
712
0 commit comments