@@ -90,6 +90,29 @@ typedef union
9090 } unix_addr ;
9191} proxy_addr_t ;
9292
93+ /* Type-Length-Value (TLV vectors) */
94+ #define PP2_TYPE_ALPN 0x01
95+ #define PP2_TYPE_AUTHORITY 0x02
96+ #define PP2_TYPE_CRC32C 0x03
97+ #define PP2_TYPE_NOOP 0x04
98+ #define PP2_TYPE_UNIQUE_ID 0x05
99+ #define PP2_TYPE_SSL 0x20
100+ #define PP2_SUBTYPE_SSL_VERSION 0x21
101+ #define PP2_SUBTYPE_SSL_CN 0x22
102+ #define PP2_SUBTYPE_SSL_CIPHER 0x23
103+ #define PP2_SUBTYPE_SSL_SIG_ALG 0x24
104+ #define PP2_SUBTYPE_SSL_KEY_ALG 0x25
105+ #define PP2_TYPE_NETNS 0x30
106+ /* Custom TLVs */
107+ #define PP2_TYPE_AWS 0xEA
108+ #define PP2_TYPE_AZURE 0xEE
109+
110+ /* PP2_TYPE_AWS subtypes */
111+ #define PP2_SUBTYPE_AWS_VPCE_ID 0x01
112+
113+ /* PP2_TYPE_AZURE subtypes */
114+ #define PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID 0x01
115+
93116typedef struct
94117{
95118 uint8_t type ;
@@ -98,6 +121,11 @@ typedef struct
98121 uint8_t value [1 ];
99122} pp2_tlv_t ;
100123
124+ /* PP2_TYPE_SSL <client> bit field */
125+ #define PP2_CLIENT_SSL 0x01
126+ #define PP2_CLIENT_CERT_CONN 0x02
127+ #define PP2_CLIENT_CERT_SESS 0x04
128+
101129typedef struct
102130{
103131 uint8_t client ;
@@ -263,7 +291,7 @@ static void tlv_array_clear(tlv_array_t *tlv_array)
263291 tlv_array -> tlvs = NULL ;
264292}
265293
266- const uint8_t * pp_info_get_tlv_value (const pp_info_t * pp_info , uint8_t type , uint8_t subtype , uint16_t * value_len_out )
294+ static const uint8_t * pp_info_get_tlv_value (const pp_info_t * pp_info , uint8_t type , uint8_t subtype , uint16_t * value_len_out )
267295{
268296 * value_len_out = 0 ;
269297 if (!pp_info -> tlv_array -> tlvs || !pp_info -> tlv_array -> len )
@@ -293,6 +321,66 @@ const uint8_t *pp_info_get_tlv_value(const pp_info_t *pp_info, uint8_t type, uin
293321 return NULL ;
294322}
295323
324+ const uint8_t * pp_info_get_alpn (const pp_info_t * pp_info , uint16_t * value_len_out )
325+ {
326+ return pp_info_get_tlv_value (pp_info , PP2_TYPE_ALPN , 0 , value_len_out );
327+ }
328+
329+ const uint8_t * pp_info_get_authority (const pp_info_t * pp_info , uint16_t * value_len_out )
330+ {
331+ return pp_info_get_tlv_value (pp_info , PP2_TYPE_AUTHORITY , 0 , value_len_out );
332+ }
333+
334+ const uint8_t * pp_info_get_crc32c (const pp_info_t * pp_info , uint16_t * value_len_out )
335+ {
336+ return pp_info_get_tlv_value (pp_info , PP2_TYPE_CRC32C , 0 , value_len_out );
337+ }
338+
339+ const uint8_t * pp_info_get_unique_id (const pp_info_t * pp_info , uint16_t * value_len_out )
340+ {
341+ return pp_info_get_tlv_value (pp_info , PP2_TYPE_UNIQUE_ID , 0 , value_len_out );
342+ }
343+
344+ const uint8_t * pp_info_get_ssl_version (const pp_info_t * pp_info , uint16_t * value_len_out )
345+ {
346+ return pp_info_get_tlv_value (pp_info , PP2_SUBTYPE_SSL_VERSION , 0 , value_len_out );
347+ }
348+
349+ const uint8_t * pp_info_get_ssl_cn (const pp_info_t * pp_info , uint16_t * value_len_out )
350+ {
351+ return pp_info_get_tlv_value (pp_info , PP2_SUBTYPE_SSL_CN , 0 , value_len_out );
352+ }
353+
354+ const uint8_t * pp_info_get_ssl_cipher (const pp_info_t * pp_info , uint16_t * value_len_out )
355+ {
356+ return pp_info_get_tlv_value (pp_info , PP2_SUBTYPE_SSL_CIPHER , 0 , value_len_out );
357+ }
358+
359+ const uint8_t * pp_info_get_ssl_sig_alg (const pp_info_t * pp_info , uint16_t * value_len_out )
360+ {
361+ return pp_info_get_tlv_value (pp_info , PP2_SUBTYPE_SSL_SIG_ALG , 0 , value_len_out );
362+ }
363+
364+ const uint8_t * pp_info_get_ssl_key_alg (const pp_info_t * pp_info , uint16_t * value_len_out )
365+ {
366+ return pp_info_get_tlv_value (pp_info , PP2_SUBTYPE_SSL_KEY_ALG , 0 , value_len_out );
367+ }
368+
369+ const uint8_t * pp_info_get_ssl_netns (const pp_info_t * pp_info , uint16_t * value_len_out )
370+ {
371+ return pp_info_get_tlv_value (pp_info , PP2_TYPE_NETNS , 0 , value_len_out );
372+ }
373+
374+ const uint8_t * pp_info_get_aws_vpce_id (const pp_info_t * pp_info , uint16_t * value_len_out )
375+ {
376+ return pp_info_get_tlv_value (pp_info , PP2_TYPE_AWS , PP2_SUBTYPE_AWS_VPCE_ID , value_len_out );
377+ }
378+
379+ const uint8_t * pp_info_get_azure_linkid (const pp_info_t * pp_info , uint16_t * value_len_out )
380+ {
381+ return pp_info_get_tlv_value (pp_info , PP2_TYPE_AZURE , PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID , value_len_out );
382+ }
383+
296384void pp_info_clear (pp_info_t * pp_info )
297385{
298386 if (pp_info -> tlv_array )
0 commit comments