On Fri, 11 Apr 2014 16:50:59 +0200
Willy Tarreau <[email protected]> wrote:

> Hi Apollon,
> 
> On Fri, Apr 11, 2014 at 05:37:00PM +0300, Apollon Oikonomopoulos wrote:
> > Hi,
> > 
> > While experimenting with counters in a dual-stack setup, I noticed that 
> > src_inc_gpc0 does not seem to work for IPv4 clients looked up against 
> > type ipv6 stick-tables. The following configuration:
> > 
> >  global
> >      log 127.0.0.1    local0
> >      user haproxy
> >      group haproxy
> >      stats socket /var/run/haproxy.sock user root group root level admin
> >  
> >  frontend test
> >      mode http
> >      bind 127.0.0.1:8888
> >      bind ::1:8888
> >      stick-table type ipv6 size 1k expire 1h store gpc0,http_req_rate(5m)
> >      tcp-request connection track-sc0 src
> >      redirect prefix http://example.com if { src_inc_gpc0 ge 0 }
> > 
> > with a 1.5-dev22 instance and the following scenario:
> > 
> >  $ for i in {1..4}; do curl -6 http://localhost:8888/; done
> >  $ for i in {1..4}; do curl -4 http://localhost:8888/; done
> > 
> > yields these results:
> > 
> >  $ echo show table test | sudo socat STDIO /var/run/haproxy.sock
> >  # table: test, type: ipv6, size:1024, used:2
> >  0x17efd50: key=::1 use=0 exp=3596869 gpc0=4 http_req_rate(300000)=4
> >  0x17effb0: key=::ffff:127.0.0.1 use=0 exp=3598516 gpc0=0 
> > http_req_rate(300000)=4
> > 
> > Notice that while the http_req_rate is properly calculated in both cases, 
> > gpc0
> > is not incremented for the mapped IPv4 client. Using sc0_inc_gpc0 on the 
> > other hand works as expected.
> > 
> > Any ideas?
> 
> Yes, I just checked and found that src_* use addr_to_stktable_key() which
> only returns a pointer to the original address based on its family and does
> not consider the table's type to perform a conversion.
> 
> We'd need to extend the function to support an output key type to provide a
> matching result.
> 

Hi,

Thanks for the bug repport, this is fixed in the current HAProxy version.

Thierry

Reply via email to