BUILD/MEDIUM: tcp: set-mark support for OpenBSD

set-mark support for this platform, for routing table purpose.
Follow-up from f7f53afcf9, this time for OpenBSD.
This commit is contained in:
David Carlier 2021-07-03 10:15:15 +01:00 committed by Christopher Faulet
parent 96a2f50b51
commit bae4cb2790
3 changed files with 10 additions and 6 deletions

View File

@ -6510,7 +6510,8 @@ http-request set-mark <mark> [ { if | unless } <condition> ]
both in decimal or hexadecimal format (prefixed by "0x").
This can be useful to force certain packets to take a different route (for
example a cheaper network path for bulk downloads). This works on Linux
kernels 2.6.32 and above and requires admin privileges, as well on FreeBSD.
kernels 2.6.32 and above and requires admin privileges, as well on FreeBSD
and OpenBSD.
http-request set-method <fmt> [ { if | unless } <condition> ]
@ -7171,7 +7172,8 @@ http-response set-mark <mark> [ { if | unless } <condition> ]
It can be expressed both in decimal or hexadecimal format (prefixed by "0x").
This can be useful to force certain packets to take a different route (for
example a cheaper network path for bulk downloads). This works on Linux
kernels 2.6.32 and above and requires admin privileges, as well on FreeBSD.
kernels 2.6.32 and above and requires admin privileges, as well on FreeBSD
and OpenBSD.
http-response set-nice <nice> [ { if | unless } <condition> ]
@ -11908,7 +11910,7 @@ tcp-request connection <action> [{if | unless} <condition>]
"0x"). This can be useful to force certain packets to take a different
route (for example a cheaper network path for bulk downloads). This works
on Linux kernels 2.6.32 and above and requires admin privileges, as well
on FreeBSD.
on FreeBSD and OpenBSD.
- set-src <expr> :
Is used to set the source IP address to the value of specified

View File

@ -699,6 +699,8 @@ static inline void conn_set_mark(const struct connection *conn, int mark)
#elif defined(SO_USER_COOKIE)
uint32_t mval = (uint32_t)mark;
setsockopt(conn->handle.fd, SOL_SOCKET, SO_USER_COOKIE, &mval, sizeof(mval));
#elif defined(SO_RTABLE)
setsockopt(conn->handle.fd, SOL_SOCKET, SO_RTABLE, &mark, sizeof(mark));
#endif
}

View File

@ -237,7 +237,7 @@ static enum act_return tcp_exec_action_silent_drop(struct act_rule *rule, struct
}
#if defined(SO_MARK) || defined(SO_USER_COOKIE)
#if defined(SO_MARK) || defined(SO_USER_COOKIE) || defined(SO_RTABLE)
static enum act_return tcp_action_set_mark(struct act_rule *rule, struct proxy *px,
struct session *sess, struct stream *s, int flags)
{
@ -308,7 +308,7 @@ static enum act_parse_ret tcp_parse_set_src_dst(const char **args, int *orig_arg
static enum act_parse_ret tcp_parse_set_mark(const char **args, int *cur_arg, struct proxy *px,
struct act_rule *rule, char **err)
{
#if defined(SO_MARK) || defined(SO_USER_COOKIE)
#if defined(SO_MARK) || defined(SO_USER_COOKIE) || defined(SO_RTABLE)
char *endp;
unsigned int mark;
@ -331,7 +331,7 @@ static enum act_parse_ret tcp_parse_set_mark(const char **args, int *cur_arg, st
global.last_checks |= LSTCHK_NETADM;
return ACT_RET_PRS_OK;
#else
memprintf(err, "not supported on this platform (SO_MARK|SO_USER_COOKIE undefined)");
memprintf(err, "not supported on this platform (SO_MARK|SO_USER_COOKIE|SO_RTABLE undefined)");
return ACT_RET_PRS_ERR;
#endif
}