chiark / gitweb /
sd-dhcp: network - set TOS on outgoing packets
authorTom Gundersen <teg@jklm.no>
Tue, 6 May 2014 20:02:14 +0000 (22:02 +0200)
committerTom Gundersen <teg@jklm.no>
Tue, 6 May 2014 20:09:05 +0000 (22:09 +0200)
This should improve performance on busy wireless networks and the
like. Inspired by a similar change in dnsmasq.

src/libsystemd-network/dhcp-network.c
src/libsystemd-network/dhcp-packet.c

index 722f1b18b3af52705b282e340fb110d964fc6213..2a63f1850eaaf8d167db39b6716d3b47d0435c71 100644 (file)
@@ -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 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),
         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 (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;
         if (bind(s, &src.sa, sizeof(src.in)) < 0) {
                 safe_close(s);
                 return -errno;
index b012e63d1f498a3c534ee1503e3beeea1db2648e..d72d7a686de1a47a28f85685b5226c2bc7a45d7d 100644 (file)
@@ -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.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;
         packet->ip.protocol = IPPROTO_UDP;
         packet->ip.saddr = source_addr;
         packet->ip.daddr = destination_addr;