mirror of
https://github.com/clearml/dropbear
synced 2025-05-19 18:57:41 +00:00
Set IPTOS_LOWDELAY on PTY sessions only
This commit is contained in:
parent
4f6f651b7d
commit
ddc10b2d0c
@ -369,6 +369,7 @@ static int cli_initchansess(struct Channel *channel) {
|
|||||||
|
|
||||||
if (cli_opts.wantpty) {
|
if (cli_opts.wantpty) {
|
||||||
send_chansess_pty_req(channel);
|
send_chansess_pty_req(channel);
|
||||||
|
set_sock_priority(ses.sock_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
send_chansess_shell_req(channel);
|
send_chansess_shell_req(channel);
|
||||||
|
29
dbutil.c
29
dbutil.c
@ -177,28 +177,41 @@ void dropbear_trace2(const char* format, ...) {
|
|||||||
}
|
}
|
||||||
#endif /* DEBUG_TRACE */
|
#endif /* DEBUG_TRACE */
|
||||||
|
|
||||||
static void set_sock_priority(int sock) {
|
void set_sock_nodelay(int sock) {
|
||||||
|
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
/* disable nagle */
|
/* disable nagle */
|
||||||
val = 1;
|
val = 1;
|
||||||
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&val, sizeof(val));
|
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&val, sizeof(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_sock_priority(int sock) {
|
||||||
|
|
||||||
|
int val, rc;
|
||||||
|
|
||||||
/* set the TOS bit for either ipv4 or ipv6 */
|
/* set the TOS bit for either ipv4 or ipv6 */
|
||||||
#ifdef IPTOS_LOWDELAY
|
#ifdef IPTOS_LOWDELAY
|
||||||
val = IPTOS_LOWDELAY;
|
val = IPTOS_LOWDELAY;
|
||||||
#if defined(IPPROTO_IPV6) && defined(IPV6_TCLASS)
|
#if defined(IPPROTO_IPV6) && defined(IPV6_TCLASS)
|
||||||
setsockopt(sock, IPPROTO_IPV6, IPV6_TCLASS, (void*)&val, sizeof(val));
|
rc = setsockopt(sock, IPPROTO_IPV6, IPV6_TCLASS, (void*)&val, sizeof(val));
|
||||||
|
if (rc < 0)
|
||||||
|
dropbear_log(LOG_WARNING, "Couldn't set IPV6_TCLASS (%s)",
|
||||||
|
strerror(errno));
|
||||||
#endif
|
#endif
|
||||||
setsockopt(sock, IPPROTO_IP, IP_TOS, (void*)&val, sizeof(val));
|
rc = setsockopt(sock, IPPROTO_IP, IP_TOS, (void*)&val, sizeof(val));
|
||||||
|
if (rc < 0)
|
||||||
|
dropbear_log(LOG_WARNING, "Couldn't set IP_TOS (%s)",
|
||||||
|
strerror(errno));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SO_PRIORITY
|
#ifdef SO_PRIORITY
|
||||||
/* linux specific, sets QoS class.
|
/* linux specific, sets QoS class.
|
||||||
* 6 looks to be optimal for interactive traffic (see tc-prio(8) ). */
|
* 6 looks to be optimal for interactive traffic (see tc-prio(8) ). */
|
||||||
val = 6;
|
val = TC_PRIO_INTERACTIVE;
|
||||||
setsockopt(sock, SOL_SOCKET, SO_PRIORITY, (void*) &val, sizeof(val));
|
rc = setsockopt(sock, SOL_SOCKET, SO_PRIORITY, (void*) &val, sizeof(val));
|
||||||
|
if (rc < 0)
|
||||||
|
dropbear_log(LOG_WARNING, "Couldn't set SO_PRIORITY (%s)",
|
||||||
|
strerror(errno));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -290,7 +303,7 @@ int dropbear_listen(const char* address, const char* port,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
set_sock_priority(sock);
|
set_sock_nodelay(sock);
|
||||||
|
|
||||||
if (bind(sock, res->ai_addr, res->ai_addrlen) < 0) {
|
if (bind(sock, res->ai_addr, res->ai_addrlen) < 0) {
|
||||||
err = errno;
|
err = errno;
|
||||||
@ -429,7 +442,7 @@ int connect_remote(const char* remotehost, const char* remoteport,
|
|||||||
TRACE(("Error connecting: %s", strerror(err)))
|
TRACE(("Error connecting: %s", strerror(err)))
|
||||||
} else {
|
} else {
|
||||||
/* Success */
|
/* Success */
|
||||||
set_sock_priority(sock);
|
set_sock_nodelay(sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
freeaddrinfo(res0);
|
freeaddrinfo(res0);
|
||||||
|
2
dbutil.h
2
dbutil.h
@ -66,6 +66,8 @@ void get_socket_address(int fd, char **local_host, char **local_port,
|
|||||||
char **remote_host, char **remote_port, int host_lookup);
|
char **remote_host, char **remote_port, int host_lookup);
|
||||||
void getaddrstring(struct sockaddr_storage* addr,
|
void getaddrstring(struct sockaddr_storage* addr,
|
||||||
char **ret_host, char **ret_port, int host_lookup);
|
char **ret_host, char **ret_port, int host_lookup);
|
||||||
|
void set_sock_nodelay(int sock);
|
||||||
|
void set_sock_priority(int sock);
|
||||||
int dropbear_listen(const char* address, const char* port,
|
int dropbear_listen(const char* address, const char* port,
|
||||||
int *socks, unsigned int sockcount, char **errstring, int *maxfd);
|
int *socks, unsigned int sockcount, char **errstring, int *maxfd);
|
||||||
int spawn_command(void(*exec_fn)(void *user_data), void *exec_data,
|
int spawn_command(void(*exec_fn)(void *user_data), void *exec_data,
|
||||||
|
@ -156,6 +156,10 @@ typedef unsigned int u_int32_t;
|
|||||||
typedef u_int32_t uint32_t;
|
typedef u_int32_t uint32_t;
|
||||||
#endif /* HAVE_UINT32_T */
|
#endif /* HAVE_UINT32_T */
|
||||||
|
|
||||||
|
#ifdef SO_PRIORITY
|
||||||
|
#include <linux/pkt_sched.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "fake-rfc2553.h"
|
#include "fake-rfc2553.h"
|
||||||
|
|
||||||
#ifndef LOG_AUTHPRIV
|
#ifndef LOG_AUTHPRIV
|
||||||
|
@ -580,6 +580,8 @@ static int sessionpty(struct ChanSess * chansess) {
|
|||||||
/* Read the terminal modes */
|
/* Read the terminal modes */
|
||||||
get_termmodes(chansess);
|
get_termmodes(chansess);
|
||||||
|
|
||||||
|
set_sock_priority(ses.sock_out);
|
||||||
|
|
||||||
TRACE(("leave sessionpty"))
|
TRACE(("leave sessionpty"))
|
||||||
return DROPBEAR_SUCCESS;
|
return DROPBEAR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user