Hi Marcel, On 11.10.2012 16:31, Marcel Holtmann wrote:
Hi Jukka,Convert to network byte order just before sending the packet. --- gdhcp/client.c | 47 +++++++++++++++++++++-------------------------- gdhcp/common.c | 20 +++++++++++++++----- gdhcp/common.h | 17 +---------------- gdhcp/ipv4ll.c | 4 ++-- gdhcp/server.c | 41 +++++++++++++++++++---------------------- 5 files changed, 58 insertions(+), 71 deletions(-) diff --git a/gdhcp/client.c b/gdhcp/client.c index cf04ced..7340f3a 100644 --- a/gdhcp/client.c +++ b/gdhcp/client.c @@ -367,7 +367,7 @@ static int send_discover(GDHCPClient *dhcp_client, uint32_t requested) /* Explicitly saying that we want RFC-compliant packets helps * some buggy DHCP servers to NOT send bigger packets */ - dhcp_add_simple_option(&packet, DHCP_MAX_SIZE, htons(576)); + dhcp_add_simple_option(&packet, DHCP_MAX_SIZE, 576); add_request_options(dhcp_client, &packet); @@ -410,7 +410,7 @@ static int send_renew(GDHCPClient *dhcp_client) init_packet(dhcp_client , &packet, DHCPREQUEST); packet.xid = dhcp_client->xid; - packet.ciaddr = dhcp_client->requested_ip; + packet.ciaddr = htonl(dhcp_client->requested_ip); add_request_options(dhcp_client, &packet); @@ -429,7 +429,7 @@ static int send_rebound(GDHCPClient *dhcp_client) init_packet(dhcp_client , &packet, DHCPREQUEST); packet.xid = dhcp_client->xid; - packet.ciaddr = dhcp_client->requested_ip; + packet.ciaddr = htonl(dhcp_client->requested_ip); add_request_options(dhcp_client, &packet); @@ -449,7 +449,7 @@ static int send_release(GDHCPClient *dhcp_client, init_packet(dhcp_client, &packet, DHCPRELEASE); packet.xid = rand(); - packet.ciaddr = ciaddr; + packet.ciaddr = htonl(ciaddr); dhcp_add_simple_option(&packet, DHCP_SERVER_ID, server); @@ -1134,7 +1134,7 @@ static int ipv4ll_recv_arp_packet(GDHCPClient *dhcp_client) arp.arp_op != htons(ARPOP_REQUEST)) return -EINVAL; - ip_requested = ntohl(dhcp_client->requested_ip); + ip_requested = htonl(dhcp_client->requested_ip);so why is this patch correct?
The earlier ntohl() was incorrect. The ip_requested is suppose to be in network byte order.
Regards Marcel
Cheers, Jukka _______________________________________________ connman mailing list [email protected] http://lists.connman.net/listinfo/connman
