mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-14 15:34:35 +00:00
[MINOR] Allow showing and clearing by key of integer stick tables
This commit is contained in:
parent
c5b89f6495
commit
cec9a22780
@ -9336,7 +9336,7 @@ clear table <table> [ data.<type> <operator> <value> ] | [ key <key> ]
|
|||||||
- gt : match entries whose data is greater than this value
|
- gt : match entries whose data is greater than this value
|
||||||
|
|
||||||
When the key form is used the entry <key> is removed. The key must be of the
|
When the key form is used the entry <key> is removed. The key must be of the
|
||||||
same type as the table, which currently is limited to IPv4 and IPv6.
|
same type as the table, which currently is limited to IPv4, IPv6 and integer.
|
||||||
|
|
||||||
Example :
|
Example :
|
||||||
$ echo "show table http_proxy" | socat stdio /tmp/sock1
|
$ echo "show table http_proxy" | socat stdio /tmp/sock1
|
||||||
@ -9562,7 +9562,7 @@ show table <name> [ data.<type> <operator> <value> ] | [ key <key> ]
|
|||||||
|
|
||||||
|
|
||||||
When the key form is used the entry <key> is shown. The key must be of the
|
When the key form is used the entry <key> is shown. The key must be of the
|
||||||
same type as the table, which currently is limited to IPv4 and IPv6.
|
same type as the table, which currently is limited to IPv4, IPv6 and integer.
|
||||||
|
|
||||||
Example :
|
Example :
|
||||||
$ echo "show table http_proxy" | socat stdio /tmp/sock1
|
$ echo "show table http_proxy" | socat stdio /tmp/sock1
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -510,7 +511,7 @@ static void stats_sock_table_key_request(struct stream_interface *si, char **arg
|
|||||||
struct session *s = si->applet.private;
|
struct session *s = si->applet.private;
|
||||||
struct proxy *px = si->applet.ctx.table.target;
|
struct proxy *px = si->applet.ctx.table.target;
|
||||||
struct stksess *ts;
|
struct stksess *ts;
|
||||||
unsigned int ip_key;
|
uint32_t uint32_key;
|
||||||
unsigned char ip6_key[sizeof(struct in6_addr)];
|
unsigned char ip6_key[sizeof(struct in6_addr)];
|
||||||
|
|
||||||
si->applet.st0 = STAT_CLI_OUTPUT;
|
si->applet.st0 = STAT_CLI_OUTPUT;
|
||||||
@ -523,18 +524,36 @@ static void stats_sock_table_key_request(struct stream_interface *si, char **arg
|
|||||||
|
|
||||||
switch (px->table.type) {
|
switch (px->table.type) {
|
||||||
case STKTABLE_TYPE_IP:
|
case STKTABLE_TYPE_IP:
|
||||||
ip_key = htonl(inetaddr_host(args[4]));
|
uint32_key = htonl(inetaddr_host(args[4]));
|
||||||
static_table_key.key = (void *)&ip_key;
|
static_table_key.key = &uint32_key;
|
||||||
break;
|
break;
|
||||||
case STKTABLE_TYPE_IPV6:
|
case STKTABLE_TYPE_IPV6:
|
||||||
inet_pton(AF_INET6, args[4], ip6_key);
|
inet_pton(AF_INET6, args[4], ip6_key);
|
||||||
static_table_key.key = &ip6_key;
|
static_table_key.key = &ip6_key;
|
||||||
break;
|
break;
|
||||||
|
case STKTABLE_TYPE_INTEGER:
|
||||||
|
{
|
||||||
|
char *endptr;
|
||||||
|
unsigned long val;
|
||||||
|
errno = 0;
|
||||||
|
val = strtoul(args[4], &endptr, 10);
|
||||||
|
if ((errno == ERANGE && val == ULONG_MAX) ||
|
||||||
|
(errno != 0 && val == 0) || endptr == args[4] ||
|
||||||
|
val > 0xffffffff) {
|
||||||
|
si->applet.ctx.cli.msg = "Invalid key\n";
|
||||||
|
si->applet.st0 = STAT_CLI_PRINT;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uint32_key = (uint32_t) val;
|
||||||
|
static_table_key.key = &uint32_key;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (show)
|
if (show)
|
||||||
si->applet.ctx.cli.msg = "Showing keys from tables of type other than ip and ipv6 is not supported\n";
|
si->applet.ctx.cli.msg = "Showing keys from tables of type other than ip, ipv6 and integer is not supported\n";
|
||||||
else
|
else
|
||||||
si->applet.ctx.cli.msg = "Removing keys from ip tables of type other than ip and ipv6 is not supported\n";
|
si->applet.ctx.cli.msg = "Removing keys from ip tables of type other than ip, ipv6 and integer is not supported\n";
|
||||||
si->applet.st0 = STAT_CLI_PRINT;
|
si->applet.st0 = STAT_CLI_PRINT;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user