1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/*
* Datagram processing functions
*
* Copyright 2014 Baptiste Assmann <bedis9@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
*/
#include <haproxy/fd.h>
#include <haproxy/cfgparse.h>
#include <haproxy/dgram.h>
#include <haproxy/errors.h>
#include <haproxy/tools.h>
/* datagram handler callback */
void dgram_fd_handler(int fd)
{
struct dgram_conn *dgram = fdtab[fd].owner;
if (unlikely(!dgram))
return;
if (fd_recv_ready(fd))
dgram->data->recv(dgram);
if (fd_send_ready(fd))
dgram->data->send(dgram);
return;
}
/* config parser for global "tune.{rcv,snd}buf.{frontend,backend}" */
static int dgram_parse_tune_bufs(char **args, int section_type, struct proxy *curpx,
const struct proxy *defpx, const char *file, int line,
char **err)
{
int *valptr;
int val;
if (too_many_args(1, args, err, NULL))
return -1;
/* "tune.rcvbuf.frontend", "tune.rcvbuf.backend",
* "tune.sndbuf.frontend", "tune.sndbuf.backend"
*/
valptr = (args[0][5] == 'r' && args[0][12] == 'f') ? &global.tune.frontend_rcvbuf :
(args[0][5] == 'r' && args[0][12] == 'b') ? &global.tune.backend_rcvbuf :
(args[0][5] == 's' && args[0][12] == 'f') ? &global.tune.frontend_sndbuf :
&global.tune.backend_sndbuf;
if (*valptr != 0) {
memprintf(err, "parsing [%s:%d] : ignoring '%s' which was already specified.\n", file, line, args[0]);
return 1;
}
val = atoi(args[1]);
if (*(args[1]) == 0 || val <= 0) {
memprintf(err, "parsing [%s:%d] : '%s' expects a strictly positive integer argument.\n", file, line, args[0]);
return -1;
}
*valptr = val;
return 0;
}
/* register "global" section keywords */
static struct cfg_kw_list dgram_cfg_kws = {ILH, {
{ CFG_GLOBAL, "tune.rcvbuf.backend", dgram_parse_tune_bufs },
{ CFG_GLOBAL, "tune.rcvbuf.frontend", dgram_parse_tune_bufs },
{ CFG_GLOBAL, "tune.sndbuf.backend", dgram_parse_tune_bufs },
{ CFG_GLOBAL, "tune.sndbuf.frontend", dgram_parse_tune_bufs },
{ 0, NULL, NULL }
}};
INITCALL1(STG_REGISTER, cfg_register_keywords, &dgram_cfg_kws);
|