X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fdhcp-packet.c;h=3e2fb96c27f3054633dc7430381a40f3deb22303;hb=966bff2660a13c82b70a1e1ac4f1a48bb33d7f7e;hp=b012e63d1f498a3c534ee1503e3beeea1db2648e;hpb=aa6fc9b8c823834f262ab5ab2ac094a3775370a9;p=elogind.git diff --git a/src/libsystemd-network/dhcp-packet.c b/src/libsystemd-network/dhcp-packet.c index b012e63d1..3e2fb96c2 100644 --- a/src/libsystemd-network/dhcp-packet.c +++ b/src/libsystemd-network/dhcp-packet.c @@ -38,8 +38,9 @@ #define DHCP_CLIENT_MIN_OPTIONS_SIZE 312 int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid, - uint8_t type, uint8_t **opt, size_t *optlen) { - int err; + uint8_t type, size_t optlen, size_t *optoffset) { + size_t offset = 0; + int r; assert(op == BOOTREQUEST || op == BOOTREPLY); @@ -49,12 +50,12 @@ int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid, message->xid = htobe32(xid); message->magic = htobe32(DHCP_MAGIC_COOKIE); - *opt = (uint8_t *)(message + 1); + r = dhcp_option_append(message, optlen, &offset, 0, + DHCP_OPTION_MESSAGE_TYPE, 1, &type); + if (r < 0) + return r; - err = dhcp_option_append(opt, optlen, DHCP_OPTION_MESSAGE_TYPE, 1, - &type); - if (err < 0) - return err; + *optoffset = offset; return 0; } @@ -116,6 +117,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;