#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#include <linux/compat.h>
 #include <linux/capability.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 
 static int eql_open(struct net_device *dev);
 static int eql_close(struct net_device *dev);
-static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
+static int eql_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
+                             void __user *data, int cmd);
 static netdev_tx_t eql_slave_xmit(struct sk_buff *skb, struct net_device *dev);
 
 #define eql_is_slave(dev)      ((dev->flags & IFF_SLAVE) == IFF_SLAVE)
 static const struct net_device_ops eql_netdev_ops = {
        .ndo_open       = eql_open,
        .ndo_stop       = eql_close,
-       .ndo_do_ioctl   = eql_ioctl,
+       .ndo_siocdevprivate = eql_siocdevprivate,
        .ndo_start_xmit = eql_slave_xmit,
 };
 
 static int eql_g_master_cfg(struct net_device *dev, master_config_t __user *mc);
 static int eql_s_master_cfg(struct net_device *dev, master_config_t __user *mc);
 
-static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+static int eql_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
+                             void __user *data, int cmd)
 {
        if (cmd != EQL_GETMASTRCFG && cmd != EQL_GETSLAVECFG &&
            !capable(CAP_NET_ADMIN))
                return -EPERM;
 
+       if (in_compat_syscall()) /* to be implemented */
+               return -EOPNOTSUPP;
+
        switch (cmd) {
                case EQL_ENSLAVE:
-                       return eql_enslave(dev, ifr->ifr_data);
+                       return eql_enslave(dev, data);
                case EQL_EMANCIPATE:
-                       return eql_emancipate(dev, ifr->ifr_data);
+                       return eql_emancipate(dev, data);
                case EQL_GETSLAVECFG:
-                       return eql_g_slave_cfg(dev, ifr->ifr_data);
+                       return eql_g_slave_cfg(dev, data);
                case EQL_SETSLAVECFG:
-                       return eql_s_slave_cfg(dev, ifr->ifr_data);
+                       return eql_s_slave_cfg(dev, data);
                case EQL_GETMASTRCFG:
-                       return eql_g_master_cfg(dev, ifr->ifr_data);
+                       return eql_g_master_cfg(dev, data);
                case EQL_SETMASTRCFG:
-                       return eql_s_master_cfg(dev, ifr->ifr_data);
+                       return eql_s_master_cfg(dev, data);
                default:
                        return -EOPNOTSUPP;
        }