Parcourir la source

[991] Check for the IP_PKTINFO support in send/receive functions.

Marcin Siodelski il y a 12 ans
Parent
commit
5dc9b2f5c8
1 fichiers modifiés avec 4 ajouts et 2 suppressions
  1. 4 2
      src/lib/dhcp/pkt_filter_inet.cc

+ 4 - 2
src/lib/dhcp/pkt_filter_inet.cc

@@ -158,13 +158,13 @@ PktFilterInet::receive(const Iface& iface, const SocketInfo& socket_info) {
     pkt->setRemotePort(from_port);
     pkt->setRemotePort(from_port);
     pkt->setLocalPort(socket_info.port_);
     pkt->setLocalPort(socket_info.port_);
 
 
+#ifdef IP_PKTINFO
     struct cmsghdr* cmsg;
     struct cmsghdr* cmsg;
     struct in_pktinfo* pktinfo;
     struct in_pktinfo* pktinfo;
     struct in_addr to_addr;
     struct in_addr to_addr;
 
 
     memset(&to_addr, 0, sizeof(to_addr));
     memset(&to_addr, 0, sizeof(to_addr));
 
 
-#ifdef IP_PKTINFO
     cmsg = CMSG_FIRSTHDR(&m);
     cmsg = CMSG_FIRSTHDR(&m);
     while (cmsg != NULL) {
     while (cmsg != NULL) {
         if ((cmsg->cmsg_level == IPPROTO_IP) &&
         if ((cmsg->cmsg_level == IPPROTO_IP) &&
@@ -219,6 +219,7 @@ PktFilterInet::send(uint16_t sockfd, const Pkt4Ptr& pkt) {
     m.msg_iov = &v;
     m.msg_iov = &v;
     m.msg_iovlen = 1;
     m.msg_iovlen = 1;
 
 
+#ifdef IP_PKTINFO
     // Setting the interface is a bit more involved.
     // Setting the interface is a bit more involved.
     //
     //
     // We have to create a "control message", and set that to
     // We have to create a "control message", and set that to
@@ -235,7 +236,8 @@ PktFilterInet::send(uint16_t sockfd, const Pkt4Ptr& pkt) {
     memset(pktinfo, 0, sizeof(struct in_pktinfo));
     memset(pktinfo, 0, sizeof(struct in_pktinfo));
     pktinfo->ipi_ifindex = pkt->getIndex();
     pktinfo->ipi_ifindex = pkt->getIndex();
     m.msg_controllen = cmsg->cmsg_len;
     m.msg_controllen = cmsg->cmsg_len;
-    
+#endif
+
     pkt->updateTimestamp();
     pkt->updateTimestamp();
 
 
     int result = sendmsg(sockfd, &m, 0);
     int result = sendmsg(sockfd, &m, 0);