Skip to content

Commit fc76544

Browse files
Add support for adding crc32c checksum when creating v2 PROXY protocol headers
1 parent e03b5ae commit fc76544

3 files changed

Lines changed: 146 additions & 110 deletions

File tree

src/proxy_protocol.c

Lines changed: 120 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,103 @@ void pp_info_clear(pp_info_t *pp_info)
473473
memset(pp_info, 0, sizeof(*pp_info));
474474
}
475475

476+
/*****************************************************************/
477+
/* */
478+
/* CRC LOOKUP TABLE */
479+
/* ================ */
480+
/* The following CRC lookup table was generated automagically */
481+
/* by the Rocksoft^tm Model CRC Algorithm Table Generation */
482+
/* Program V1.0 using the following model parameters: */
483+
/* */
484+
/* Width : 4 bytes. */
485+
/* Poly : 0x1EDC6F41L */
486+
/* Reverse : TRUE. */
487+
/* */
488+
/* For more information on the Rocksoft^tm Model CRC Algorithm, */
489+
/* see the document titled "A Painless Guide to CRC Error */
490+
/* Detection Algorithms" by Ross Williams */
491+
/* (ross@guest.adelaide.edu.au.). This document is likely to be */
492+
/* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft". */
493+
/* */
494+
/*****************************************************************/
495+
496+
static uint32_t crctable[256] = {
497+
0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
498+
0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
499+
0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
500+
0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
501+
0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
502+
0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
503+
0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
504+
0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
505+
0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
506+
0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
507+
0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
508+
0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
509+
0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
510+
0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
511+
0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
512+
0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
513+
0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
514+
0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
515+
0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
516+
0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
517+
0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
518+
0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
519+
0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
520+
0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
521+
0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
522+
0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
523+
0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
524+
0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
525+
0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
526+
0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
527+
0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
528+
0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
529+
0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
530+
0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
531+
0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
532+
0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
533+
0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
534+
0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
535+
0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
536+
0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
537+
0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
538+
0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
539+
0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
540+
0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
541+
0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
542+
0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
543+
0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
544+
0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
545+
0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
546+
0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
547+
0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
548+
0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
549+
0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
550+
0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
551+
0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
552+
0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
553+
0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
554+
0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
555+
0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
556+
0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
557+
0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
558+
0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
559+
0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
560+
0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L
561+
};
562+
563+
static uint32_t crc32c(const uint8_t* buf, uint32_t len)
564+
{
565+
uint32_t crc = 0xffffffff;
566+
while (len-- > 0)
567+
{
568+
crc = (crc >> 8) ^ crctable[(crc ^ (*buf++)) & 0xFF];
569+
}
570+
return crc ^ 0xffffffff;
571+
}
572+
476573
uint8_t *pp2_create_hdr(const pp_info_t *pp_info, uint16_t *pp2_hdr_len, int32_t *error)
477574
{
478575
proxy_hdr_v2_t proxy_hdr_v2 = { .sig = PP2_SIG, .ver_cmd = '\x21' };
@@ -540,6 +637,7 @@ uint8_t *pp2_create_hdr(const pp_info_t *pp_info, uint16_t *pp2_hdr_len, int32_t
540637

541638
proxy_hdr_v2.fam = pp_info->address_family << 4 | pp_info->transport_protocol;
542639

640+
/* Calculate the total length */
543641
uint16_t len = proxy_addr_len;
544642
const tlv_array_t *tlv_array = &pp_info->pp2_info.tlv_array;
545643
uint32_t i;
@@ -548,6 +646,10 @@ uint8_t *pp2_create_hdr(const pp_info_t *pp_info, uint16_t *pp2_hdr_len, int32_t
548646
uint16_t tlv_len = sizeof_pp2_tlv_t + (tlv_array->tlvs[i]->length_hi << 8 | tlv_array->tlvs[i]->length_lo);
549647
len += tlv_len;
550648
}
649+
if (pp_info->pp2_info.crc32c)
650+
{
651+
len += sizeof_pp2_tlv_t + sizeof(uint32_t);
652+
}
551653
proxy_hdr_v2.len = htons(len);
552654

553655
/* Create the PROXY protocol header */
@@ -563,12 +665,23 @@ uint8_t *pp2_create_hdr(const pp_info_t *pp_info, uint16_t *pp2_hdr_len, int32_t
563665
index += sizeof(proxy_hdr_v2_t);
564666
memcpy(pp2_hdr + index, &proxy_addr, proxy_addr_len);
565667
index += proxy_addr_len;
668+
669+
/* Append the TLVs */
566670
for (i = 0; i < tlv_array->len; i++)
567671
{
568672
uint16_t tlv_len = sizeof_pp2_tlv_t + (tlv_array->tlvs[i]->length_hi << 8 | tlv_array->tlvs[i]->length_lo);
569673
memcpy(pp2_hdr + index, tlv_array->tlvs[i], tlv_len);
570674
index += tlv_len;
571675
}
676+
if (pp_info->pp2_info.crc32c)
677+
{
678+
pp2_tlv_t tlv = { .type = PP2_TYPE_CRC32C, .length_lo = sizeof(uint32_t) };
679+
memcpy(pp2_hdr + index, &tlv, sizeof_pp2_tlv_t);
680+
index += sizeof_pp2_tlv_t;
681+
memset(pp2_hdr + index, 0, sizeof(uint32_t));
682+
uint32_t crc32c_calculated = crc32c(pp2_hdr, *pp2_hdr_len);
683+
memcpy(pp2_hdr + index, &crc32c_calculated, sizeof(uint32_t));
684+
}
572685

573686
*error = ERR_NULL;
574687
return pp2_hdr;
@@ -629,13 +742,13 @@ static uint8_t *pp1_create_hdr(const pp_info_t *pp_info, uint16_t *pp1_hdr_len,
629742

630743
uint8_t *pp_create_hdr(uint8_t version, const pp_info_t *pp_info, uint16_t *pp_hdr_len, int32_t *error)
631744
{
632-
if (version == 1)
745+
if (version == 2)
633746
{
634-
return pp1_create_hdr(pp_info, pp_hdr_len, error);
747+
return pp2_create_hdr(pp_info, pp_hdr_len, error);
635748
}
636-
else if (version == 2)
749+
else if (version == 1)
637750
{
638-
return pp2_create_hdr(pp_info, pp_hdr_len, error);
751+
return pp1_create_hdr(pp_info, pp_hdr_len, error);
639752
}
640753
else
641754
{
@@ -644,107 +757,10 @@ uint8_t *pp_create_hdr(uint8_t version, const pp_info_t *pp_info, uint16_t *pp_h
644757
}
645758
}
646759

647-
/*****************************************************************/
648-
/* */
649-
/* CRC LOOKUP TABLE */
650-
/* ================ */
651-
/* The following CRC lookup table was generated automagically */
652-
/* by the Rocksoft^tm Model CRC Algorithm Table Generation */
653-
/* Program V1.0 using the following model parameters: */
654-
/* */
655-
/* Width : 4 bytes. */
656-
/* Poly : 0x1EDC6F41L */
657-
/* Reverse : TRUE. */
658-
/* */
659-
/* For more information on the Rocksoft^tm Model CRC Algorithm, */
660-
/* see the document titled "A Painless Guide to CRC Error */
661-
/* Detection Algorithms" by Ross Williams */
662-
/* (ross@guest.adelaide.edu.au.). This document is likely to be */
663-
/* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft". */
664-
/* */
665-
/*****************************************************************/
666-
667-
static uint32_t crctable[256] = {
668-
0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
669-
0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
670-
0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
671-
0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
672-
0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
673-
0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
674-
0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
675-
0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
676-
0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
677-
0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
678-
0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
679-
0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
680-
0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
681-
0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
682-
0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
683-
0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
684-
0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
685-
0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
686-
0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
687-
0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
688-
0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
689-
0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
690-
0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
691-
0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
692-
0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
693-
0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
694-
0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
695-
0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
696-
0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
697-
0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
698-
0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
699-
0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
700-
0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
701-
0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
702-
0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
703-
0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
704-
0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
705-
0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
706-
0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
707-
0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
708-
0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
709-
0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
710-
0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
711-
0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
712-
0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
713-
0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
714-
0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
715-
0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
716-
0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
717-
0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
718-
0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
719-
0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
720-
0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
721-
0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
722-
0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
723-
0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
724-
0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
725-
0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
726-
0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
727-
0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
728-
0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
729-
0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
730-
0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
731-
0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L
732-
};
733-
734-
static uint32_t crc32c(const uint8_t *buf, uint32_t len)
735-
{
736-
uint32_t crc = 0xffffffff;
737-
while (len-- > 0)
738-
{
739-
crc = (crc >> 8) ^ crctable[(crc ^ (*buf++)) & 0xFF];
740-
}
741-
return crc^0xffffffff;
742-
}
743-
744760
/* Verifies and parses a version 2 PROXY protocol header */
745761
static int32_t pp2_parse_hdr(uint8_t *buffer, uint32_t buffer_length, pp_info_t *pp_info)
746762
{
747-
const uint8_t *ppv2_hdr = buffer;
763+
const uint8_t *pp2_hdr = buffer;
748764
const proxy_hdr_v2_t *proxy_hdr_v2 = (proxy_hdr_v2_t *) buffer;
749765

750766
/* The next byte (the 13th one) is the protocol version and command */
@@ -904,7 +920,7 @@ static int32_t pp2_parse_hdr(uint8_t *buffer, uint32_t buffer_length, pp_info_t
904920

905921
/* Calculate the CRC32c checksum value of the whole PROXY header */
906922
memset(pp2_tlv->value, 0, pp2_tlv_len);
907-
uint32_t crc32c_calculated = crc32c(ppv2_hdr, sizeof(proxy_hdr_v2_t) + len);
923+
uint32_t crc32c_calculated = crc32c(pp2_hdr, sizeof(proxy_hdr_v2_t) + len);
908924

909925
/* Verify that the calculated CRC32c checksum is the same as the received CRC32c checksum*/
910926
if (memcmp(&crc32c_chksum, &crc32c_calculated, 4))
@@ -916,6 +932,7 @@ static int32_t pp2_parse_hdr(uint8_t *buffer, uint32_t buffer_length, pp_info_t
916932
{
917933
return -ERR_HEAP_ALLOC;
918934
}
935+
pp_info->pp2_info.crc32c = 1;
919936
break;
920937
}
921938
case PP2_TYPE_NOOP:

src/proxy_protocol.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,15 @@ typedef struct
8383
uint8_t local; /* 1: LOCAL 0: PROXY */
8484
pp2_ssl_info_t pp2_ssl_info;
8585
tlv_array_t tlv_array;
86+
/*
87+
* In creation:
88+
* 1: calculate and add crc32c checksum TLV
89+
* 0: no crc32c checksum
90+
* In parsing:
91+
* 1: crc32c checksum TLV is present. Optionally, pp_info_get_crc32c() can be used to get the value
92+
* 0: crc32c checksum is not present
93+
*/
94+
uint8_t crc32c;
8695
} pp2_info_t;
8796

8897
enum

tests/test.c

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,6 @@ static uint8_t pp_add_tlvs(pp_info_t *pp_info, const test_tlv_t (*add_tlvs)[10])
153153
case PP2_TYPE_AUTHORITY:
154154
rc = pp_info_add_authority(pp_info, test_tlv->value_len, test_tlv->value);
155155
break;
156-
case PP2_TYPE_NOOP:
157-
break;
158156
case PP2_TYPE_UNIQUE_ID:
159157
rc = pp_info_add_unique_id(pp_info, test_tlv->value_len, test_tlv->value);
160158
break;
@@ -298,6 +296,10 @@ static uint8_t pp_info_equal(const pp_info_t *pp_info_a, const pp_info_t *pp_inf
298296
{
299297
return 0;
300298
}
299+
if (pp_info_a->pp2_info.crc32c != pp_info_b->pp2_info.crc32c)
300+
{
301+
return 0;
302+
}
301303
return 1;
302304
}
303305

@@ -328,19 +330,20 @@ int main()
328330
.src_addr = "192.168.10.100",
329331
.dst_addr = "192.168.11.90",
330332
.src_port = 42332,
331-
.dst_port = 8080
333+
.dst_port = 8080,
334+
.pp2_info = { .crc32c = 1 }
332335
},
333336
.expected_tlvs = {
334337
{
335338
.type = PP2_TYPE_CRC32C,
336339
.value_len = 4,
337-
.value = (uint8_t *) "\xe5\x18\x86\xf8"
340+
.value = (uint8_t*)"\xe5\x18\x86\xf8"
338341
},
339342
{
340343
.type = PP2_TYPE_AWS,
341344
.subtype = PP2_SUBTYPE_AWS_VPCE_ID,
342345
.value_len = 23,
343-
.value = (uint8_t *) "vpce-23d8ezjk38bchilm4"
346+
.value = (uint8_t*)"vpce-23d8ezjk38bchilm4"
344347
},
345348
},
346349
},
@@ -419,7 +422,8 @@ int main()
419422
},
420423
{
421424
.name = "v2 PROXY protocol header: create and parse - PROXY, TCP over IPv4. TLVs: "
422-
"PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER, PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG, PP2_TYPE_AWS(PP2_SUBTYPE_AWS_VPCE_ID)",
425+
"PP2_TYPE_SSL, PP2_SUBTYPE_SSL_VERSION, PP2_SUBTYPE_SSL_CN, PP2_SUBTYPE_SSL_CIPHER,"
426+
"PP2_SUBTYPE_SSL_SIG_ALG, PP2_SUBTYPE_SSL_KEY_ALG, PP2_TYPE_AWS(PP2_SUBTYPE_AWS_VPCE_ID), PP2_TYPE_CRC32C",
423427
.version = 2,
424428
.pp_info_in = {
425429
.address_family = ADDR_FAMILY_INET,
@@ -429,6 +433,7 @@ int main()
429433
.src_port = 42332,
430434
.dst_port = 8080,
431435
.pp2_info = {
436+
.crc32c = 1,
432437
.pp2_ssl_info = {
433438
.ssl = 1,
434439
.cert_in_connection = 1,
@@ -468,7 +473,12 @@ int main()
468473
.type = PP2_TYPE_AWS,
469474
.subtype = PP2_SUBTYPE_AWS_VPCE_ID,
470475
.value_len = 23,
471-
.value = (uint8_t*)"vpce-23d8ezjk38bchilm4"
476+
.value = (uint8_t*)"vpce-24d8ezjk38bchilm4"
477+
},
478+
{
479+
.type = PP2_TYPE_CRC32C,
480+
.value_len = 4,
481+
.value = (uint8_t*)"\x72\x45\x29\xd8"
472482
},
473483
},
474484
.pp_info_out_expected = tests[9].pp_info_in,

0 commit comments

Comments
 (0)