Squashed 'shared/n-dhcp4/' changes from 03d38e83e558..8c91e9ae8999
8c91e9ae8999 trivial: fix spelling in code comment 433998d2be78 merge branch 'th/fix-lto-compiler-warnings' 6c6e9368989e connection: avoid compiler warning in n_dhcp4_c_connection_connect() about fd_udp uninitialized 142eedcfc332 packet: avoid compiler warning in n_dhcp4_c_socket_packet_recv() git-subtree-dir: shared/n-dhcp4 git-subtree-split: 8c91e9ae8999e69edde642e8e9cac206a54e2c0d
This commit is contained in:
@@ -182,7 +182,8 @@ int n_dhcp4_c_connection_listen(NDhcp4CConnection *connection) {
|
|||||||
int n_dhcp4_c_connection_connect(NDhcp4CConnection *connection,
|
int n_dhcp4_c_connection_connect(NDhcp4CConnection *connection,
|
||||||
const struct in_addr *client,
|
const struct in_addr *client,
|
||||||
const struct in_addr *server) {
|
const struct in_addr *server) {
|
||||||
int r, fd_udp;
|
_c_cleanup_(c_closep) int fd_udp = -1;
|
||||||
|
int r;
|
||||||
|
|
||||||
c_assert(connection->state == N_DHCP4_C_CONNECTION_STATE_PACKET);
|
c_assert(connection->state == N_DHCP4_C_CONNECTION_STATE_PACKET);
|
||||||
|
|
||||||
@@ -200,27 +201,21 @@ int n_dhcp4_c_connection_connect(NDhcp4CConnection *connection,
|
|||||||
.events = EPOLLIN,
|
.events = EPOLLIN,
|
||||||
.data = { .u32 = N_DHCP4_CLIENT_EPOLL_IO },
|
.data = { .u32 = N_DHCP4_CLIENT_EPOLL_IO },
|
||||||
});
|
});
|
||||||
if (r < 0) {
|
if (r < 0)
|
||||||
r = -errno;
|
return -errno;
|
||||||
goto exit_fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = packet_shutdown(connection->fd_packet);
|
r = packet_shutdown(connection->fd_packet);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
goto exit_epoll;
|
epoll_ctl(connection->fd_epoll, EPOLL_CTL_DEL, fd_udp, NULL);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
connection->state = N_DHCP4_C_CONNECTION_STATE_DRAINING;
|
connection->state = N_DHCP4_C_CONNECTION_STATE_DRAINING;
|
||||||
connection->fd_udp = fd_udp;
|
connection->fd_udp = fd_udp;
|
||||||
|
fd_udp = -1;
|
||||||
connection->client_ip = client->s_addr;
|
connection->client_ip = client->s_addr;
|
||||||
connection->server_ip = server->s_addr;
|
connection->server_ip = server->s_addr;
|
||||||
fd_udp = -1;
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
exit_epoll:
|
|
||||||
epoll_ctl(connection->fd_epoll, EPOLL_CTL_DEL, fd_udp, NULL);
|
|
||||||
exit_fd:
|
|
||||||
close(fd_udp);
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void n_dhcp4_c_connection_close(NDhcp4CConnection *connection) {
|
void n_dhcp4_c_connection_close(NDhcp4CConnection *connection) {
|
||||||
|
@@ -549,7 +549,7 @@ void n_dhcp4_log_queue_fmt(NDhcp4LogQueue *log_queue,
|
|||||||
if (level > log_queue->log_level)
|
if (level > log_queue->log_level)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Currently the logging queue is only implemented for
|
/* Currently, the logging queue is only implemented for
|
||||||
* the client. Nobody would enable logging except a
|
* the client. Nobody would enable logging except a
|
||||||
* client instance. */
|
* client instance. */
|
||||||
c_assert(log_queue->is_client);
|
c_assert(log_queue->is_client);
|
||||||
|
@@ -293,6 +293,8 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
ssize_t pktlen;
|
ssize_t pktlen;
|
||||||
size_t hdrlen;
|
size_t hdrlen;
|
||||||
|
|
||||||
|
*n_transmittedp = 0;
|
||||||
|
|
||||||
/* Peek packet to obtain the real IP header length */
|
/* Peek packet to obtain the real IP header length */
|
||||||
pktlen = recv(sockfd, &ip_hdr.hdr, sizeof(ip_hdr.hdr), MSG_PEEK);
|
pktlen = recv(sockfd, &ip_hdr.hdr, sizeof(ip_hdr.hdr), MSG_PEEK);
|
||||||
if (pktlen < 0)
|
if (pktlen < 0)
|
||||||
@@ -304,7 +306,6 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
* discard it.
|
* discard it.
|
||||||
*/
|
*/
|
||||||
recv(sockfd, NULL, 0, 0);
|
recv(sockfd, NULL, 0, 0);
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,7 +314,6 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
* This is not an IPv4 packet, discard it.
|
* This is not an IPv4 packet, discard it.
|
||||||
*/
|
*/
|
||||||
recv(sockfd, NULL, 0, 0);
|
recv(sockfd, NULL, 0, 0);
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,7 +324,6 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
* header length, discard the packet.
|
* header length, discard the packet.
|
||||||
*/
|
*/
|
||||||
recv(sockfd, NULL, 0, 0);
|
recv(sockfd, NULL, 0, 0);
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -354,7 +353,6 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
* provided too small a buffer. In both cases, we simply drop
|
* provided too small a buffer. In both cases, we simply drop
|
||||||
* the packet.
|
* the packet.
|
||||||
*/
|
*/
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,14 +364,12 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
* The packet is too small to even contain an entire UDP
|
* The packet is too small to even contain an entire UDP
|
||||||
* header, so discard it entirely.
|
* header, so discard it entirely.
|
||||||
*/
|
*/
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
} else if ((size_t)pktlen < hdrlen + ntohs(udp_hdr.len)) {
|
} else if ((size_t)pktlen < hdrlen + ntohs(udp_hdr.len)) {
|
||||||
/*
|
/*
|
||||||
* The UDP header specified a longer length than the returned
|
* The UDP header specified a longer length than the returned
|
||||||
* packet, so discard it entirely.
|
* packet, so discard it entirely.
|
||||||
*/
|
*/
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,13 +382,10 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
/* IP */
|
/* IP */
|
||||||
|
|
||||||
if (ip_hdr.hdr.protocol != IPPROTO_UDP) {
|
if (ip_hdr.hdr.protocol != IPPROTO_UDP) {
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0; /* not a UDP packet, discard it */
|
return 0; /* not a UDP packet, discard it */
|
||||||
} else if (ip_hdr.hdr.frag_off & htons(IP_MF | IP_OFFMASK)) {
|
} else if (ip_hdr.hdr.frag_off & htons(IP_MF | IP_OFFMASK)) {
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0; /* fragmented packet, discard it */
|
return 0; /* fragmented packet, discard it */
|
||||||
} else if (checksum && packet_internet_checksum(ip_hdr.data, hdrlen)) {
|
} else if (checksum && packet_internet_checksum(ip_hdr.data, hdrlen)) {
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0; /* invalid checksum, discard it */
|
return 0; /* invalid checksum, discard it */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,7 +404,6 @@ int packet_recvfrom_udp(int sockfd,
|
|||||||
buf,
|
buf,
|
||||||
pktlen,
|
pktlen,
|
||||||
udp_hdr.check)) {
|
udp_hdr.check)) {
|
||||||
*n_transmittedp = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user