Test for IP_TOS and hardcode DSCP values

This allows it to work on macos too
This commit is contained in:
Matt Johnston 2022-01-25 17:57:05 +08:00
parent f3a4ea511b
commit a4362d3019

11
netio.c
View File

@ -374,7 +374,7 @@ void set_sock_priority(int sock, enum dropbear_prio prio) {
/* Don't log ENOTSOCK errors so that this can harmlessly be called /* Don't log ENOTSOCK errors so that this can harmlessly be called
* on a client '-J' proxy pipe */ * on a client '-J' proxy pipe */
#ifdef IPTOS_DSCP_AF21 #ifdef IP_TOS
/* Set the DSCP field for outbound IP packet priority. /* Set the DSCP field for outbound IP packet priority.
rfc4594 has some guidance to meanings. rfc4594 has some guidance to meanings.
@ -388,11 +388,14 @@ void set_sock_priority(int sock, enum dropbear_prio prio) {
Old Dropbear/OpenSSH and Debian/Ubuntu OpenSSH (at Jan 2022) use Old Dropbear/OpenSSH and Debian/Ubuntu OpenSSH (at Jan 2022) use
IPTOS_LOWDELAY/IPTOS_THROUGHPUT IPTOS_LOWDELAY/IPTOS_THROUGHPUT
DSCP constants are from Linux headers, applicable to other platforms
such as macos.
*/ */
if (prio == DROPBEAR_PRIO_LOWDELAY) { if (prio == DROPBEAR_PRIO_LOWDELAY) {
val = IPTOS_DSCP_AF21; val = 0x48; /* IPTOS_DSCP_AF21 */
} else if (prio == DROPBEAR_PRIO_BULK) { } else if (prio == DROPBEAR_PRIO_BULK) {
val = IPTOS_DSCP_AF11; val = 0x28; /* IPTOS_DSCP_AF11; */
} else { } else {
val = 0; /* default */ val = 0; /* default */
} }
@ -406,7 +409,7 @@ void set_sock_priority(int sock, enum dropbear_prio prio) {
if (rc < 0 && errno != ENOTSOCK) { if (rc < 0 && errno != ENOTSOCK) {
TRACE(("Couldn't set IP_TOS (%s)", strerror(errno))); TRACE(("Couldn't set IP_TOS (%s)", strerror(errno)));
} }
#endif #endif /* IP_TOS */
#ifdef HAVE_LINUX_PKT_SCHED_H #ifdef HAVE_LINUX_PKT_SCHED_H
/* Set scheduling priority within the local Linux network stack */ /* Set scheduling priority within the local Linux network stack */