2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-30 13:57:50 +00:00

Tidy up the receive calls and eliminate the need for found_pkt

[ISC-Bugs #25066]
This commit is contained in:
Shawn Routhier
2012-02-10 00:07:06 +00:00
parent 87132514a0
commit 865afd5e44
2 changed files with 27 additions and 27 deletions

View File

@@ -81,6 +81,9 @@ work on other platforms. Please report any problems and suggested fixes to
from the DNS client code.
[ISC-Bugs 26287].
- Tidy up the receive calls and eliminate the need for found_pkt
[ISC-Bugs #25066]
Changes since 4.2.2
- Fix the code that checks for an existing DDNS transaction to cancel

View File

@@ -765,7 +765,7 @@ ssize_t receive_packet (interface, buf, len, from, hfrom)
struct sockaddr_in *from;
struct hardware *hfrom;
{
#if !defined(USE_V4_PKTINFO)
#if !(defined(IP_PKTINFO) && defined(IP_RECVPKTINFO) && defined(USE_V4_PKTINFO))
SOCKLEN_T flen = sizeof *from;
#endif
int result;
@@ -788,7 +788,6 @@ ssize_t receive_packet (interface, buf, len, from, hfrom)
struct cmsghdr *cmsg;
struct in_pktinfo *pktinfo;
unsigned int ifindex;
int found_pktinfo;
/*
* If necessary allocate space for the control message header.
@@ -831,7 +830,7 @@ ssize_t receive_packet (interface, buf, len, from, hfrom)
* We set up some space for a "control message". We have
* previously asked the kernel to give us packet
* information (when we initialized the interface), so we
* should get the destination address from that.
* should get the interface index from that.
*/
m.msg_control = control_buf;
m.msg_controllen = control_buf_len;
@@ -842,12 +841,8 @@ ssize_t receive_packet (interface, buf, len, from, hfrom)
/*
* If we did read successfully, then we need to loop
* through the control messages we received and
* find the one with our destination address.
*
* We also keep a flag to see if we found it. If we
* didn't, then we consider this to be an error.
* find the one with our inteface index.
*/
found_pktinfo = 0;
cmsg = CMSG_FIRSTHDR(&m);
while (cmsg != NULL) {
if ((cmsg->cmsg_level == IPPROTO_IP) &&
@@ -861,18 +856,21 @@ ssize_t receive_packet (interface, buf, len, from, hfrom)
* the discover code.
*/
memcpy(hfrom->hbuf, &ifindex, sizeof(ifindex));
found_pktinfo = 1;
return (result);
}
cmsg = CMSG_NXTHDR(&m, cmsg);
}
if (!found_pktinfo) {
result = -1;
errno = EIO;
}
/*
* We didn't find the necessary control message
* flag it as an error
*/
result = -1;
errno = EIO;
}
#else
result = recvfrom (interface -> rfdesc, (char *)buf, len, 0,
(struct sockaddr *)from, &flen);
result = recvfrom(interface -> rfdesc, (char *)buf, len, 0,
(struct sockaddr *)from, &flen);
#endif /* IP_PKTINFO ... */
#ifdef IGNORE_HOSTUNREACH
} while (result < 0 &&
@@ -880,7 +878,7 @@ ssize_t receive_packet (interface, buf, len, from, hfrom)
errno == ECONNREFUSED) &&
retry++ < 10);
#endif
return result;
return (result);
}
#endif /* USE_SOCKET_RECEIVE */
@@ -897,7 +895,6 @@ receive_packet6(struct interface_info *interface,
int result;
struct cmsghdr *cmsg;
struct in6_pktinfo *pktinfo;
int found_pktinfo;
/*
* If necessary allocate space for the control message header.
@@ -952,11 +949,7 @@ receive_packet6(struct interface_info *interface,
* If we did read successfully, then we need to loop
* through the control messages we received and
* find the one with our destination address.
*
* We also keep a flag to see if we found it. If we
* didn't, then we consider this to be an error.
*/
found_pktinfo = 0;
cmsg = CMSG_FIRSTHDR(&m);
while (cmsg != NULL) {
if ((cmsg->cmsg_level == IPPROTO_IPV6) &&
@@ -964,17 +957,21 @@ receive_packet6(struct interface_info *interface,
pktinfo = (struct in6_pktinfo *)CMSG_DATA(cmsg);
*to_addr = pktinfo->ipi6_addr;
*if_idx = pktinfo->ipi6_ifindex;
found_pktinfo = 1;
return (result);
}
cmsg = CMSG_NXTHDR(&m, cmsg);
}
if (!found_pktinfo) {
result = -1;
errno = EIO;
}
/*
* We didn't find the necessary control message
* flag is as an error
*/
result = -1;
errno = EIO;
}
return result;
return (result);
}
#endif /* DHCPv6 */