From 85923f79e1d1191673c5dffa4bdf1f5aadaa415b Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Tue, 6 May 2014 22:02:14 +0200 Subject: [PATCH] sd-dhcp: network - set TOS on outgoing packets This should improve performance on busy wireless networks and the like. Inspired by a similar change in dnsmasq. --- src/libsystemd-network/dhcp-network.c | 5 ++++- src/libsystemd-network/dhcp-packet.c | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libsystemd-network/dhcp-network.c b/src/libsystemd-network/dhcp-network.c index 722f1b18b..2a63f1850 100644 --- a/src/libsystemd-network/dhcp-network.c +++ b/src/libsystemd-network/dhcp-network.c @@ -98,7 +98,7 @@ int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link, uint32_t int dhcp_network_bind_udp_socket(be32_t address, uint16_t port) { - int s; + int s, tos = IPTOS_CLASS_CS6; union sockaddr_union src = { .in.sin_family = AF_INET, .in.sin_port = htobe16(port), @@ -109,6 +109,9 @@ int dhcp_network_bind_udp_socket(be32_t address, uint16_t port) if (s < 0) return -errno; + if (setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0) + return -errno; + if (bind(s, &src.sa, sizeof(src.in)) < 0) { safe_close(s); return -errno; diff --git a/src/libsystemd-network/dhcp-packet.c b/src/libsystemd-network/dhcp-packet.c index b012e63d1..d72d7a686 100644 --- a/src/libsystemd-network/dhcp-packet.c +++ b/src/libsystemd-network/dhcp-packet.c @@ -116,6 +116,8 @@ void dhcp_packet_append_ip_headers(DHCPPacket *packet, be32_t source_addr, packet->ip.ihl = DHCP_IP_SIZE / 4; packet->ip.tot_len = htobe16(len); + packet->ip.tos = IPTOS_CLASS_CS6; + packet->ip.protocol = IPPROTO_UDP; packet->ip.saddr = source_addr; packet->ip.daddr = destination_addr; -- 2.30.2