mirror of
https://github.com/systemd/systemd.git
synced 2025-03-09 12:58:26 +03:00
Merge pull request #8531 from poettering/dhcp-server-mini-fixes
some minor tweaks to sd-dhcp-server
This commit is contained in:
commit
7f19eb3592
@ -86,6 +86,7 @@ typedef struct DHCPRequest {
|
||||
} DHCPRequest;
|
||||
|
||||
#define log_dhcp_server(client, fmt, ...) log_internal(LOG_DEBUG, 0, __FILE__, __LINE__, __func__, "DHCP SERVER: " fmt, ##__VA_ARGS__)
|
||||
#define log_dhcp_server_errno(client, error, fmt, ...) log_internal(LOG_DEBUG, error, __FILE__, __LINE__, __func__, "DHCP SERVER: " fmt, ##__VA_ARGS__)
|
||||
|
||||
int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
size_t length);
|
||||
|
@ -313,7 +313,6 @@ static int dhcp_server_send_udp(sd_dhcp_server *server, be32_t destination,
|
||||
};
|
||||
struct cmsghdr *cmsg;
|
||||
struct in_pktinfo *pktinfo;
|
||||
int r;
|
||||
|
||||
assert(server);
|
||||
assert(server->fd >= 0);
|
||||
@ -337,8 +336,7 @@ static int dhcp_server_send_udp(sd_dhcp_server *server, be32_t destination,
|
||||
pktinfo->ipi_ifindex = server->ifindex;
|
||||
pktinfo->ipi_spec_dst.s_addr = server->address;
|
||||
|
||||
r = sendmsg(server->fd, &msg, 0);
|
||||
if (r < 0)
|
||||
if (sendmsg(server->fd, &msg, 0) < 0)
|
||||
return -errno;
|
||||
|
||||
return 0;
|
||||
@ -778,8 +776,9 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
if (!server->bound_leases[next_offer]) {
|
||||
address = server->subnet | htobe32(server->pool_offset + next_offer);
|
||||
break;
|
||||
} else
|
||||
next_offer = (next_offer + 1) % server->pool_size;
|
||||
}
|
||||
|
||||
next_offer = (next_offer + 1) % server->pool_size;
|
||||
}
|
||||
}
|
||||
|
||||
@ -788,18 +787,12 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
return 0;
|
||||
|
||||
r = server_send_offer(server, req, address);
|
||||
if (r < 0) {
|
||||
if (r < 0)
|
||||
/* this only fails on critical errors */
|
||||
log_dhcp_server(server, "could not send offer: %s",
|
||||
strerror(-r));
|
||||
return r;
|
||||
} else {
|
||||
log_dhcp_server(server, "OFFER (0x%x)",
|
||||
be32toh(req->message->xid));
|
||||
return DHCP_OFFER;
|
||||
}
|
||||
return log_dhcp_server_errno(server, r, "Could not send offer: %m");
|
||||
|
||||
break;
|
||||
log_dhcp_server(server, "OFFER (0x%x)", be32toh(req->message->xid));
|
||||
return DHCP_OFFER;
|
||||
}
|
||||
case DHCP_DECLINE:
|
||||
log_dhcp_server(server, "DECLINE (0x%x): %s", be32toh(req->message->xid), strna(error_message));
|
||||
@ -899,8 +892,7 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
r = server_send_ack(server, req, address);
|
||||
if (r < 0) {
|
||||
/* this only fails on critical errors */
|
||||
log_dhcp_server(server, "could not send ack: %s",
|
||||
strerror(-r));
|
||||
log_dhcp_server_errno(server, r, "Could not send ack: %m");
|
||||
|
||||
if (!existing_lease)
|
||||
dhcp_lease_free(lease);
|
||||
@ -916,18 +908,15 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
|
||||
return DHCP_ACK;
|
||||
}
|
||||
|
||||
} else if (init_reboot) {
|
||||
r = server_send_nak(server, req);
|
||||
if (r < 0) {
|
||||
if (r < 0)
|
||||
/* this only fails on critical errors */
|
||||
log_dhcp_server(server, "could not send nak: %s",
|
||||
strerror(-r));
|
||||
return r;
|
||||
} else {
|
||||
log_dhcp_server(server, "NAK (0x%x)",
|
||||
be32toh(req->message->xid));
|
||||
return DHCP_NAK;
|
||||
}
|
||||
return log_dhcp_server_errno(server, r, "Could not send nak: %m");
|
||||
|
||||
log_dhcp_server(server, "NAK (0x%x)", be32toh(req->message->xid));
|
||||
return DHCP_NAK;
|
||||
}
|
||||
|
||||
break;
|
||||
@ -953,12 +942,10 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
||||
server->bound_leases[pool_offset] = NULL;
|
||||
hashmap_remove(server->leases_by_client_id, existing_lease);
|
||||
dhcp_lease_free(existing_lease);
|
||||
}
|
||||
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -977,6 +964,7 @@ static int server_receive_message(sd_event_source *s, int fd,
|
||||
};
|
||||
struct cmsghdr *cmsg;
|
||||
ssize_t buflen, len;
|
||||
int r;
|
||||
|
||||
assert(server);
|
||||
|
||||
@ -997,7 +985,8 @@ static int server_receive_message(sd_event_source *s, int fd,
|
||||
return 0;
|
||||
|
||||
return -errno;
|
||||
} else if ((size_t)len < sizeof(DHCPMessage))
|
||||
}
|
||||
if ((size_t)len < sizeof(DHCPMessage))
|
||||
return 0;
|
||||
|
||||
CMSG_FOREACH(cmsg, &msg) {
|
||||
@ -1015,7 +1004,11 @@ static int server_receive_message(sd_event_source *s, int fd,
|
||||
}
|
||||
}
|
||||
|
||||
return dhcp_server_handle_message(server, message, (size_t)len);
|
||||
r = dhcp_server_handle_message(server, message, (size_t) len);
|
||||
if (r < 0)
|
||||
log_dhcp_server_errno(server, r, "Couldn't process incoming message: %m");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_dhcp_server_start(sd_dhcp_server *server) {
|
||||
@ -1024,8 +1017,8 @@ int sd_dhcp_server_start(sd_dhcp_server *server) {
|
||||
assert_return(server, -EINVAL);
|
||||
assert_return(server->event, -EINVAL);
|
||||
assert_return(!server->receive_message, -EBUSY);
|
||||
assert_return(server->fd_raw == -1, -EBUSY);
|
||||
assert_return(server->fd == -1, -EBUSY);
|
||||
assert_return(server->fd_raw < 0, -EBUSY);
|
||||
assert_return(server->fd < 0, -EBUSY);
|
||||
assert_return(server->address != htobe32(INADDR_ANY), -EUNATCH);
|
||||
|
||||
r = socket(AF_PACKET, SOCK_DGRAM | SOCK_NONBLOCK, 0);
|
||||
@ -1081,8 +1074,8 @@ int sd_dhcp_server_forcerenew(sd_dhcp_server *server) {
|
||||
lease->chaddr);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else
|
||||
log_dhcp_server(server, "FORCERENEW");
|
||||
|
||||
log_dhcp_server(server, "FORCERENEW");
|
||||
}
|
||||
|
||||
return r;
|
||||
|
Loading…
x
Reference in New Issue
Block a user