diff options
author | Heiko Hund <heiko.hund@sophos.com> | 2011-08-31 20:05:15 +0200 |
---|---|---|
committer | David Sommerseth <davids@redhat.com> | 2011-08-31 20:22:57 +0200 |
commit | d90428d141102a646a20b1310de1716621e32bd6 (patch) | |
tree | 755fb252ce9231f337b5b1c4436e0cb3dec21356 /socket.c | |
parent | 82167eb2ecfda2ddfbe9899ff7a58b13fac23a60 (diff) | |
download | openvpn-d90428d141102a646a20b1310de1716621e32bd6.tar.gz openvpn-d90428d141102a646a20b1310de1716621e32bd6.tar.xz openvpn-d90428d141102a646a20b1310de1716621e32bd6.zip |
add --mark option to set SO_MARK sockopt
Signed-off-by: Heiko Hund <heiko.hund@sophos.com>
Acked-by: David Sommerseth <davids@redhat.com>
Signed-off-by: David Sommerseth <davids@redhat.com>
Diffstat (limited to 'socket.c')
-rw-r--r-- | socket.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -779,6 +779,15 @@ socket_set_tcp_nodelay (int sd, int state) #endif } +static void +socket_set_mark (int sd, int mark) +{ +#ifdef TARGET_LINUX + if (mark && setsockopt (sd, SOL_SOCKET, SO_MARK, &mark, sizeof (mark)) != 0) + msg (M_WARN, "NOTE: setsockopt SO_MARK=%d failed", mark); +#endif +} + static bool socket_set_flags (int sd, unsigned int sockflags) { @@ -1599,6 +1608,7 @@ link_socket_init_phase1 (struct link_socket *sock, int mtu_discover_type, int rcvbuf, int sndbuf, + int mark, unsigned int sockflags) { ASSERT (sock); @@ -1716,6 +1726,9 @@ link_socket_init_phase1 (struct link_socket *sock, /* set socket buffers based on --sndbuf and --rcvbuf options */ socket_set_buffers (sock->sd, &sock->socket_buffer_sizes); + /* set socket to --mark packets with given value */ + socket_set_mark (sock->sd, mark); + resolve_bind_local (sock); resolve_remote (sock, 1, NULL, NULL); } |