@@ -70,6 +70,7 @@ typedef struct
7070 pp_info_t pp_info_in ;
7171 uint8_t * raw_bytes_in ;
7272 uint32_t raw_bytes_in_length ;
73+ int32_t error_expected ; /* error parameter of pp_create_hdr() */
7374 int32_t rc_expected ;
7475 pp_info_t pp_info_out_expected ;
7576 test_tlv_t add_tlvs [10 ];
@@ -554,6 +555,132 @@ int main()
554555 .pp2_info .local = 1
555556 },
556557 },
558+ {
559+ .name = "v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY" ,
560+ .version = 1 ,
561+ .pp_info_in = {
562+ .transport_protocol = 3 ,
563+ },
564+ .error_expected = - ERR_PP1_TRANSPORT_FAMILY ,
565+ },
566+ {
567+ .name = "v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY" ,
568+ .version = 1 ,
569+ .pp_info_in = {
570+ .address_family = 3 ,
571+ },
572+ .error_expected = - ERR_PP1_TRANSPORT_FAMILY ,
573+ },
574+ {
575+ .name = "v1 PROXY protocol header: -ERR_PP1_IPV4_SRC_IP" ,
576+ .version = 1 ,
577+ .pp_info_in = {
578+ .address_family = ADDR_FAMILY_INET ,
579+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
580+ .src_addr = "255.255.255.255.255" ,
581+ },
582+ .error_expected = - ERR_PP1_IPV4_SRC_IP ,
583+ },
584+ {
585+ .name = "v1 PROXY protocol header: -ERR_PP1_IPV4_DST_IP" ,
586+ .version = 1 ,
587+ .pp_info_in = {
588+ .address_family = ADDR_FAMILY_INET ,
589+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
590+ .src_addr = "255.255.255.255" ,
591+ .dst_addr = "255.255.255.255.255" ,
592+ },
593+ .error_expected = - ERR_PP1_IPV4_DST_IP ,
594+ },
595+ {
596+ .name = "v1 PROXY protocol header: -ERR_PP1_IPV6_SRC_IP" ,
597+ .version = 1 ,
598+ .pp_info_in = {
599+ .address_family = ADDR_FAMILY_INET6 ,
600+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
601+ .src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
602+ },
603+ .error_expected = - ERR_PP1_IPV6_SRC_IP ,
604+ },
605+ {
606+ .name = "v1 PROXY protocol header: -ERR_PP1_IPV6_DST_IP" ,
607+ .version = 1 ,
608+ .pp_info_in = {
609+ .address_family = ADDR_FAMILY_INET6 ,
610+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
611+ .src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
612+ .dst_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
613+ },
614+ .error_expected = - ERR_PP1_IPV6_DST_IP ,
615+ },
616+ {
617+ .name = "v2 PROXY protocol header: -ERR_PP2_CMD" ,
618+ .version = 2 ,
619+ .pp_info_in = {
620+ .pp2_info .local = 0 ,
621+ },
622+ .error_expected = - ERR_PP2_CMD ,
623+ },
624+ {
625+ .name = "v2 PROXY protocol header: -ERR_PP2_ADDR_FAMILY" ,
626+ .version = 2 ,
627+ .pp_info_in = {
628+ .address_family = 4 ,
629+ },
630+ .error_expected = - ERR_PP2_ADDR_FAMILY ,
631+ },
632+ {
633+ .name = "v2 PROXY protocol header: -ERR_PP2_TRANSPORT_PROTOCOL" ,
634+ .version = 2 ,
635+ .pp_info_in = {
636+ .address_family = ADDR_FAMILY_UNSPEC ,
637+ .pp2_info .local = 1 ,
638+ .transport_protocol = 4 ,
639+ },
640+ .error_expected = - ERR_PP2_TRANSPORT_PROTOCOL ,
641+ },
642+ {
643+ .name = "v2 PROXY protocol header: -ERR_PP2_IPV4_SRC_IP" ,
644+ .version = 2 ,
645+ .pp_info_in = {
646+ .address_family = ADDR_FAMILY_INET ,
647+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
648+ .src_addr = "255.255.255.255.255" ,
649+ },
650+ .error_expected = - ERR_PP2_IPV4_SRC_IP ,
651+ },
652+ {
653+ .name = "v2 PROXY protocol header: -ERR_PP2_IPV4_DST_IP" ,
654+ .version = 2 ,
655+ .pp_info_in = {
656+ .address_family = ADDR_FAMILY_INET ,
657+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
658+ .src_addr = "255.255.255.255" ,
659+ .dst_addr = "255.255.255.255.255" ,
660+ },
661+ .error_expected = - ERR_PP2_IPV4_DST_IP ,
662+ },
663+ {
664+ .name = "v2 PROXY protocol header: -ERR_PP2_IPV6_SRC_IP" ,
665+ .version = 2 ,
666+ .pp_info_in = {
667+ .address_family = ADDR_FAMILY_INET6 ,
668+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
669+ .src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
670+ },
671+ .error_expected = - ERR_PP2_IPV6_SRC_IP ,
672+ },
673+ {
674+ .name = "v2 PROXY protocol header: -ERR_PP2_IPV6_DST_IP" ,
675+ .version = 2 ,
676+ .pp_info_in = {
677+ .address_family = ADDR_FAMILY_INET6 ,
678+ .transport_protocol = TRANSPORT_PROTOCOL_STREAM ,
679+ .src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
680+ .dst_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ,
681+ },
682+ .error_expected = - ERR_PP2_IPV6_DST_IP ,
683+ },
557684 };
558685
559686 /* Run tests */
@@ -562,16 +689,16 @@ int main()
562689 {
563690 printf ("Running test: %s..." , tests [i ].name );
564691 pp_info_t pp_info_out ;
565- int32_t rc ;
692+ int32_t pp_parse_hdr_rc = 0 ;
566693 if (tests [i ].raw_bytes_in )
567694 {
568- rc = pp_parse_hdr (tests [i ].raw_bytes_in , tests [i ].raw_bytes_in_length , & pp_info_out );
695+ pp_parse_hdr_rc = pp_parse_hdr (tests [i ].raw_bytes_in , tests [i ].raw_bytes_in_length , & pp_info_out );
569696 }
570697 else
571698 {
572- uint16_t pp_hdr_len ;
699+ uint16_t pp_hdr_len = 0 ;
573700 uint16_t alignment = 1 << tests [i ].pp_info_in .pp2_info .alignment_power ;
574- int32_t error ;
701+ int32_t error = ERR_NULL ;
575702
576703 if (tests [i ].add_tlvs [0 ].type )
577704 {
@@ -594,20 +721,33 @@ int main()
594721 pp_hdr = pp_create_hdr (tests [i ].version , & tests [i ].pp_info_in , & pp_hdr_len , & error );
595722 pp_info_clear (& tests [i ].pp_info_in );
596723 }
597- if (!pp_hdr
598- || error != ERR_NULL
599- || (alignment > 1 && pp_hdr_len % alignment ))
724+ if (tests [i ].error_expected == ERR_NULL )
600725 {
601- printf ("FAILED\n" );
602- pp_info_clear (& pp_info_out );
603- return EXIT_FAILURE ;
726+ if (!pp_hdr
727+ || error != ERR_NULL
728+ || (alignment > 1 && pp_hdr_len % alignment ))
729+ {
730+ printf ("FAILED\n" );
731+ pp_info_clear (& pp_info_out );
732+ return EXIT_FAILURE ;
733+ }
734+ tests [i ].rc_expected = pp_hdr_len ;
735+ pp_parse_hdr_rc = pp_parse_hdr (pp_hdr , pp_hdr_len , & pp_info_out );
736+ }
737+ else
738+ {
739+ if (pp_hdr || error != tests [i ].error_expected )
740+ {
741+ printf ("FAILED\n" );
742+ pp_info_clear (& pp_info_out );
743+ return EXIT_FAILURE ;
744+ }
604745 }
605- tests [i ].rc_expected = pp_hdr_len ;
606- rc = pp_parse_hdr (pp_hdr , pp_hdr_len , & pp_info_out );
607746 free (pp_hdr );
608747 }
609748
610- if (rc != tests [i ].rc_expected || !pp_info_equal (& pp_info_out , & tests [i ].pp_info_out_expected ) || !pp_verify_tlvs (& pp_info_out , & tests [i ].expected_tlvs ))
749+ if (pp_parse_hdr_rc != tests [i ].rc_expected
750+ || (pp_parse_hdr_rc && (!pp_info_equal (& pp_info_out , & tests [i ].pp_info_out_expected ) || !pp_verify_tlvs (& pp_info_out , & tests [i ].expected_tlvs ))))
611751 {
612752 printf ("FAILED\n" );
613753 pp_info_clear (& pp_info_out );
0 commit comments