dnsmasq: fix instances in dhcp_add()
[openwrt/openwrt.git] / package / network / services / dnsmasq / patches / 100-fix-dhcp-no-address-warning.patch
index d108a7d3bc9fc1d0bd287abd94e3466afc2d401d..5fc62ffab36d2a31ea3d5a0088ff2d3753f1007d 100644 (file)
@@ -1,49 +1,47 @@
 --- a/src/dhcp.c
 +++ b/src/dhcp.c
-@@ -134,7 +134,7 @@ void dhcp_packet(time_t now, int pxe_fd)
-   struct iovec iov;
+@@ -147,7 +147,7 @@ void dhcp_packet(time_t now, int pxe_fd)
    ssize_t sz; 
    int iface_index = 0, unicast_dest = 0, is_inform = 0;
+   int rcvd_iface_index;
 -  struct in_addr iface_addr;
 +  struct in_addr iface_addr, *addrp = NULL;
    struct iface_param parm;
  #ifdef HAVE_LINUX_NETWORK
    struct arpreq arp_req;
-@@ -246,11 +246,9 @@ void dhcp_packet(time_t now, int pxe_fd)
-   
-   ifr.ifr_addr.sa_family = AF_INET;
-   if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 )
--    iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
--  else
+@@ -277,11 +277,9 @@ void dhcp_packet(time_t now, int pxe_fd)
      {
--      my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
--      return;
-+      addrp = &iface_addr;
-+      iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
-     }
-   
-   for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
-@@ -272,7 +270,7 @@ void dhcp_packet(time_t now, int pxe_fd)
-   parm.current = NULL;
-   parm.ind = iface_index;
--  if (!iface_check(AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name))
-+  if (!iface_check(AF_INET, (struct all_addr *)addrp, ifr.ifr_name))
-     {
-       /* If we failed to match the primary address of the interface, see if we've got a --listen-address
-        for a secondary */
-@@ -291,7 +289,13 @@ void dhcp_packet(time_t now, int pxe_fd)
-        there is more than one address on the interface in the same subnet */
-       complete_context(match.addr, iface_index, match.netmask, match.broadcast, &parm);
-     }    
--      
+       ifr.ifr_addr.sa_family = AF_INET;
+       if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 )
+-      iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+-      else
+       {
+-        my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
+-        return;
++        addrp = &iface_addr;
++        iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+       }
+       
+       for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
+@@ -300,7 +298,7 @@ void dhcp_packet(time_t now, int pxe_fd)
+       parm.relay_local.s_addr = 0;
+       parm.ind = iface_index;
+       
+-      if (!iface_check(AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name, NULL))
++      if (!iface_check(AF_INET, (struct all_addr *)addrp, ifr.ifr_name, NULL))
+       {
+         /* If we failed to match the primary address of the interface, see if we've got a --listen-address
+            for a secondary */
+@@ -320,6 +318,12 @@ void dhcp_packet(time_t now, int pxe_fd)
+         complete_context(match.addr, iface_index, NULL, match.netmask, match.broadcast, &parm);
+       }    
+       
++      if (!addrp)
++        {
++          my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
++          return;
++        }
 +
-+  if (!addrp)
-+    {
-+      my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
-+      return;
-+    }
-+
-   if (!iface_enumerate(AF_INET, &parm, complete_context))
-     return;
-   
+       if (!iface_enumerate(AF_INET, &parm, complete_context))
+       return;