MEDIUM: tree-wide: fetches that may return IPV4+IPV6 now return ADDR
Historically, the ADDR pseudo-type did not exist. So when IPV6 support was added to existing IPV4 sample fetches (e.g.: src,dst,hdr_ip...) the expected out_type in related sample definitions was left on IPV4 because it was required to declare the out_type as the lowest common denominator (the type that can be casted into all other ones) to make compatibility checks at parse time work properly. However, now that ADDR pseudo-type may safely be used as out_type since ("MEDIUM: sample: add missing ADDR=>? compatibility matrix entries"), we can use ADDR for fetches that may output both IPV4 and IPV6 at runtime. One added benefit on top of making the code less confusing is that 'haproxy -dKsmp' output will now show "addr" instead of "ipv4" for such fetches, so the 'haproxy -dKsmp' output better complies with the fetches signatures from the documentation. out_ip fetch, which returns an ip according to the doc, was purposely left as is (returning IPV4) since the smp_fetch_url_ip() implementation forces output type to IPV4 anyway, and since this is an historical fetch I prefer not to touch it to prevent any regression. However if smp_fetch_url_ip() were to be fixed to also return IPV6 in the future, then its expected out_type may be changed to ADDR as well. Multiple notes in the code were updated to mention that the appropriate pseudo-type may be used instead of the lowest common denominator for out_type when available.
This commit is contained in:
parent
67544fdd1c
commit
4136aba830
|
@ -2267,9 +2267,9 @@ int smp_fetch_fc_err_str(const struct arg *args, struct sample *smp, const char
|
|||
}
|
||||
|
||||
/* Note: must not be declared <const> as its list will be overwritten.
|
||||
* Note: fetches that may return multiple types must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones. For
|
||||
* instance v4/v6 must be declared v4.
|
||||
* Note: fetches that may return multiple types should be declared using the
|
||||
* appropriate pseudo-type. If not available it must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones.
|
||||
*/
|
||||
static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
|
||||
{ "bc_err", smp_fetch_fc_err, 0, NULL, SMP_T_SINT, SMP_USE_L4SRV },
|
||||
|
|
|
@ -2162,7 +2162,7 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
|
|||
*/
|
||||
{ "hdr", smp_fetch_chn_hdr, ARG2(0,STR,SINT), val_hdr, SMP_T_STR, SMP_USE_HRQHV|SMP_USE_HRSHV },
|
||||
{ "hdr_cnt", smp_fetch_hdr_cnt, ARG1(0,STR), NULL, SMP_T_SINT, SMP_USE_HRQHV },
|
||||
{ "hdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRQHV },
|
||||
{ "hdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_ADDR, SMP_USE_HRQHV },
|
||||
{ "hdr_val", smp_fetch_hdr_val, ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRQHV },
|
||||
|
||||
{ "http_auth_type", smp_fetch_http_auth_type, 0, NULL, SMP_T_STR, SMP_USE_HRQHV },
|
||||
|
@ -2213,7 +2213,7 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
|
|||
{ "req.fhdr_cnt", smp_fetch_fhdr_cnt, ARG1(0,STR), NULL, SMP_T_SINT, SMP_USE_HRQHV },
|
||||
{ "req.hdr", smp_fetch_hdr, ARG2(0,STR,SINT), val_hdr, SMP_T_STR, SMP_USE_HRQHV },
|
||||
{ "req.hdr_cnt", smp_fetch_hdr_cnt, ARG1(0,STR), NULL, SMP_T_SINT, SMP_USE_HRQHV },
|
||||
{ "req.hdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRQHV },
|
||||
{ "req.hdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_ADDR, SMP_USE_HRQHV },
|
||||
{ "req.hdr_names", smp_fetch_hdr_names, ARG1(0,STR), NULL, SMP_T_STR, SMP_USE_HRQHV },
|
||||
{ "req.hdr_val", smp_fetch_hdr_val, ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRQHV },
|
||||
|
||||
|
@ -2226,7 +2226,7 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
|
|||
{ "res.fhdr_cnt", smp_fetch_fhdr_cnt, ARG1(0,STR), NULL, SMP_T_SINT, SMP_USE_HRSHV },
|
||||
{ "res.hdr", smp_fetch_hdr, ARG2(0,STR,SINT), val_hdr, SMP_T_STR, SMP_USE_HRSHV },
|
||||
{ "res.hdr_cnt", smp_fetch_hdr_cnt, ARG1(0,STR), NULL, SMP_T_SINT, SMP_USE_HRSHV },
|
||||
{ "res.hdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRSHV },
|
||||
{ "res.hdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_ADDR, SMP_USE_HRSHV },
|
||||
{ "res.hdr_names", smp_fetch_hdr_names, ARG1(0,STR), NULL, SMP_T_STR, SMP_USE_HRSHV },
|
||||
{ "res.hdr_val", smp_fetch_hdr_val, ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRSHV },
|
||||
|
||||
|
@ -2238,7 +2238,7 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
|
|||
/* shdr is valid only on the response and is used for ACL compatibility */
|
||||
{ "shdr", smp_fetch_hdr, ARG2(0,STR,SINT), val_hdr, SMP_T_STR, SMP_USE_HRSHV },
|
||||
{ "shdr_cnt", smp_fetch_hdr_cnt, ARG1(0,STR), NULL, SMP_T_SINT, SMP_USE_HRSHV },
|
||||
{ "shdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRSHV },
|
||||
{ "shdr_ip", smp_fetch_hdr_ip, ARG2(0,STR,SINT), val_hdr, SMP_T_ADDR, SMP_USE_HRSHV },
|
||||
{ "shdr_val", smp_fetch_hdr_val, ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRSHV },
|
||||
|
||||
{ "status", smp_fetch_stcode, 0, NULL, SMP_T_SINT, SMP_USE_HRSHP },
|
||||
|
|
|
@ -1386,9 +1386,9 @@ int val_distcc(struct arg *arg, char **err_msg)
|
|||
/************************************************************************/
|
||||
|
||||
/* Note: must not be declared <const> as its list will be overwritten.
|
||||
* Note: fetches that may return multiple types must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones. For
|
||||
* instance IPv4/IPv6 must be declared IPv4.
|
||||
* Note: fetches that may return multiple types should be declared using the
|
||||
* appropriate pseudo-type. If not available it must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones.
|
||||
*/
|
||||
static struct sample_fetch_kw_list smp_kws = {ILH, {
|
||||
{ "distcc_body", smp_fetch_distcc_body, ARG2(1,STR,SINT), val_distcc, SMP_T_BIN, SMP_USE_L6REQ|SMP_USE_L6RES },
|
||||
|
|
|
@ -4447,9 +4447,9 @@ static int smp_fetch_quic_enabled(const struct arg *args, struct sample *smp, co
|
|||
}
|
||||
|
||||
/* Note: must not be declared <const> as its list will be overwritten.
|
||||
* Note: fetches that may return multiple types must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones. For
|
||||
* instance IPv4/IPv6 must be declared IPv4.
|
||||
* Note: fetches that may return multiple types should be declared using the
|
||||
* appropriate pseudo-type. If not available it must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones.
|
||||
*/
|
||||
static struct sample_fetch_kw_list smp_kws = {ILH, {
|
||||
{ "always_false", smp_fetch_false, 0, NULL, SMP_T_BOOL, SMP_USE_CONST },
|
||||
|
|
|
@ -498,29 +498,29 @@ smp_fetch_fc_reordering(const struct arg *args, struct sample *smp, const char *
|
|||
#endif // TCP_INFO
|
||||
|
||||
/* Note: must not be declared <const> as its list will be overwritten.
|
||||
* Note: fetches that may return multiple types must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones. For
|
||||
* instance v4/v6 must be declared v4.
|
||||
* Note: fetches that may return multiple types should be declared using the
|
||||
* appropriate pseudo-type. If not available it must be declared as the lowest
|
||||
* common denominator, the type that can be casted into all other ones.
|
||||
*/
|
||||
static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
|
||||
{ "bc_dst", smp_fetch_dst, 0, NULL, SMP_T_IPV4, SMP_USE_L4SRV },
|
||||
{ "bc_dst", smp_fetch_dst, 0, NULL, SMP_T_ADDR, SMP_USE_L4SRV },
|
||||
{ "bc_dst_port", smp_fetch_dport, 0, NULL, SMP_T_SINT, SMP_USE_L4SRV },
|
||||
{ "bc_src", smp_fetch_src, 0, NULL, SMP_T_IPV4, SMP_USE_L4SRV },
|
||||
{ "bc_src", smp_fetch_src, 0, NULL, SMP_T_ADDR, SMP_USE_L4SRV },
|
||||
{ "bc_src_port", smp_fetch_sport, 0, NULL, SMP_T_SINT, SMP_USE_L4SRV },
|
||||
|
||||
{ "dst", smp_fetch_dst, 0, NULL, SMP_T_IPV4, SMP_USE_L4CLI },
|
||||
{ "dst", smp_fetch_dst, 0, NULL, SMP_T_ADDR, SMP_USE_L4CLI },
|
||||
{ "dst_is_local", smp_fetch_dst_is_local, 0, NULL, SMP_T_BOOL, SMP_USE_L4CLI },
|
||||
{ "dst_port", smp_fetch_dport, 0, NULL, SMP_T_SINT, SMP_USE_L4CLI },
|
||||
|
||||
{ "fc_dst", smp_fetch_dst, 0, NULL, SMP_T_IPV4, SMP_USE_L4CLI },
|
||||
{ "fc_dst", smp_fetch_dst, 0, NULL, SMP_T_ADDR, SMP_USE_L4CLI },
|
||||
{ "fc_dst_is_local", smp_fetch_dst_is_local, 0, NULL, SMP_T_BOOL, SMP_USE_L4CLI },
|
||||
{ "fc_dst_port", smp_fetch_dport, 0, NULL, SMP_T_SINT, SMP_USE_L4CLI },
|
||||
|
||||
{ "fc_src", smp_fetch_src, 0, NULL, SMP_T_IPV4, SMP_USE_L4CLI },
|
||||
{ "fc_src", smp_fetch_src, 0, NULL, SMP_T_ADDR, SMP_USE_L4CLI },
|
||||
{ "fc_src_is_local", smp_fetch_src_is_local, 0, NULL, SMP_T_BOOL, SMP_USE_L4CLI },
|
||||
{ "fc_src_port", smp_fetch_sport, 0, NULL, SMP_T_SINT, SMP_USE_L4CLI },
|
||||
|
||||
{ "src", smp_fetch_src, 0, NULL, SMP_T_IPV4, SMP_USE_L4CLI },
|
||||
{ "src", smp_fetch_src, 0, NULL, SMP_T_ADDR, SMP_USE_L4CLI },
|
||||
{ "src_is_local", smp_fetch_src_is_local, 0, NULL, SMP_T_BOOL, SMP_USE_L4CLI },
|
||||
{ "src_port", smp_fetch_sport, 0, NULL, SMP_T_SINT, SMP_USE_L4CLI },
|
||||
#ifdef TCP_INFO
|
||||
|
|
Loading…
Reference in New Issue