diff options
Diffstat (limited to 'networking/udhcp/serverpacket.c')
-rw-r--r-- | networking/udhcp/serverpacket.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/networking/udhcp/serverpacket.c b/networking/udhcp/serverpacket.c index d39e6ba..937436a 100644 --- a/networking/udhcp/serverpacket.c +++ b/networking/udhcp/serverpacket.c @@ -45,7 +45,7 @@ static int send_packet_to_client(struct dhcpMessage *payload, int force_broadcas { uint8_t *chaddr; uint32_t ciaddr; - + if (force_broadcast) { DEBUG(LOG_INFO, "broadcasting packet to client (NAK)"); ciaddr = INADDR_BROADCAST; @@ -63,7 +63,7 @@ static int send_packet_to_client(struct dhcpMessage *payload, int force_broadcas ciaddr = payload->yiaddr; chaddr = payload->chaddr; } - return raw_packet(payload, server_config.server, SERVER_PORT, + return raw_packet(payload, server_config.server, SERVER_PORT, ciaddr, CLIENT_PORT, chaddr, server_config.ifindex); } @@ -101,7 +101,7 @@ static void add_bootp_options(struct dhcpMessage *packet) if (server_config.boot_file) strncpy(packet->file, server_config.boot_file, sizeof(packet->file) - 1); } - + /* send a DHCP OFFER to a DHCP DISCOVER */ int sendOffer(struct dhcpMessage *oldpacket) @@ -114,14 +114,14 @@ int sendOffer(struct dhcpMessage *oldpacket) struct in_addr addr; init_packet(&packet, oldpacket, DHCPOFFER); - + /* ADDME: if static, short circuit */ /* the client is in our lease/offered table */ if ((lease = find_lease_by_chaddr(oldpacket->chaddr))) { - if (!lease_expired(lease)) + if (!lease_expired(lease)) lease_time_align = lease->expires - time(0); packet.yiaddr = lease->yiaddr; - + /* Or the client has a requested ip */ } else if ((req = get_option(oldpacket, DHCP_REQUESTED_IP)) && @@ -131,10 +131,10 @@ int sendOffer(struct dhcpMessage *oldpacket) /* and the ip is in the lease range */ ntohl(req_align) >= ntohl(server_config.start) && ntohl(req_align) <= ntohl(server_config.end) && - + /* and its not already taken/offered */ /* ADDME: check that its not a static lease */ ((!(lease = find_lease_by_yiaddr(req_align)) || - + /* or its taken, but expired */ /* ADDME: or maybe in here */ lease_expired(lease)))) { packet.yiaddr = req_align; /* FIXME: oh my, is there a host using this IP? */ @@ -142,32 +142,32 @@ int sendOffer(struct dhcpMessage *oldpacket) /* otherwise, find a free IP */ /*ADDME: is it a static lease? */ } else { packet.yiaddr = find_address(0); - + /* try for an expired lease */ if (!packet.yiaddr) packet.yiaddr = find_address(1); } - + if(!packet.yiaddr) { LOG(LOG_WARNING, "no IP addresses to give -- OFFER abandoned"); return -1; } - + if (!add_lease(packet.chaddr, packet.yiaddr, server_config.offer_time)) { LOG(LOG_WARNING, "lease pool is full -- OFFER abandoned"); return -1; - } + } if ((lease_time = get_option(oldpacket, DHCP_LEASE_TIME))) { memcpy(&lease_time_align, lease_time, 4); lease_time_align = ntohl(lease_time_align); - if (lease_time_align > server_config.lease) + if (lease_time_align > server_config.lease) lease_time_align = server_config.lease; } /* Make sure we aren't just using the lease time from the previous offer */ - if (lease_time_align < server_config.min_lease) + if (lease_time_align < server_config.min_lease) lease_time_align = server_config.lease; - /* ADDME: end of short circuit */ + /* ADDME: end of short circuit */ add_simple_option(packet.options, DHCP_LEASE_TIME, htonl(lease_time_align)); curr = server_config.options; @@ -178,7 +178,7 @@ int sendOffer(struct dhcpMessage *oldpacket) } add_bootp_options(&packet); - + addr.s_addr = packet.yiaddr; LOG(LOG_INFO, "sending OFFER of %s", inet_ntoa(addr)); return send_packet(&packet, 0); @@ -190,7 +190,7 @@ int sendNAK(struct dhcpMessage *oldpacket) struct dhcpMessage packet; init_packet(&packet, oldpacket, DHCPNAK); - + DEBUG(LOG_INFO, "sending NAK"); return send_packet(&packet, 1); } @@ -206,18 +206,18 @@ int sendACK(struct dhcpMessage *oldpacket, uint32_t yiaddr) init_packet(&packet, oldpacket, DHCPACK); packet.yiaddr = yiaddr; - + if ((lease_time = get_option(oldpacket, DHCP_LEASE_TIME))) { memcpy(&lease_time_align, lease_time, 4); lease_time_align = ntohl(lease_time_align); - if (lease_time_align > server_config.lease) + if (lease_time_align > server_config.lease) lease_time_align = server_config.lease; - else if (lease_time_align < server_config.min_lease) + else if (lease_time_align < server_config.min_lease) lease_time_align = server_config.lease; } - + add_simple_option(packet.options, DHCP_LEASE_TIME, htonl(lease_time_align)); - + curr = server_config.options; while (curr) { if (curr->data[OPT_CODE] != DHCP_LEASE_TIME) @@ -230,7 +230,7 @@ int sendACK(struct dhcpMessage *oldpacket, uint32_t yiaddr) addr.s_addr = packet.yiaddr; LOG(LOG_INFO, "sending ACK to %s", inet_ntoa(addr)); - if (send_packet(&packet, 0) < 0) + if (send_packet(&packet, 0) < 0) return -1; add_lease(packet.chaddr, packet.yiaddr, lease_time_align); @@ -245,7 +245,7 @@ int send_inform(struct dhcpMessage *oldpacket) struct option_set *curr; init_packet(&packet, oldpacket, DHCPACK); - + curr = server_config.options; while (curr) { if (curr->data[OPT_CODE] != DHCP_LEASE_TIME) |