From: Joan Lledó <[email protected]>

Required by dhcpcd
---
 pfinet/iioctl-ops.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/pfinet/iioctl-ops.c b/pfinet/iioctl-ops.c
index 09f30d56..dea9a443 100644
--- a/pfinet/iioctl-ops.c
+++ b/pfinet/iioctl-ops.c
@@ -503,7 +503,23 @@ S_iioctl_siocdifaddr (struct sock_user *user,
                      const ifname_t ifnam,
                      sockaddr_t addr)
 {
-  return EOPNOTSUPP;
+  kern_return_t err;
+  struct sockaddr_in sin;
+  sin.sin_family = AF_INET;
+
+  /*
+   * To delete an address, we set it to the values we use to initialize
+   * an iface when no address is provided: 0.0.0.0/8
+   */
+  sin.sin_addr.s_addr = INADDR_ANY;
+  err = siocsifXaddr (user, ifnam, (struct sockaddr *) &sin, ADDR);
+  if (err)
+    return err;
+
+  sin.sin_addr.s_addr = 0xFF;
+  err = siocsifXaddr (user, ifnam, (struct sockaddr *) &sin, NETMASK);
+
+  return err;
 }
 
 /* 33 SIOCGIFADDR -- Get address of a network interface.  */
-- 
2.50.1


Reply via email to