extra grounds are 18,19,20,21,22,23,24
 */
 
+#include <linux/compat.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
                                   struct hh_cache *hh, __be16 type);
 static int plip_open(struct net_device *dev);
 static int plip_close(struct net_device *dev);
-static int plip_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
+static int plip_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
+                              void __user *data, int cmd);
 static int plip_preempt(void *handle);
 static void plip_wakeup(void *handle);
 
        .ndo_open                = plip_open,
        .ndo_stop                = plip_close,
        .ndo_start_xmit          = plip_tx_packet,
-       .ndo_do_ioctl            = plip_ioctl,
+       .ndo_siocdevprivate      = plip_siocdevprivate,
        .ndo_set_mac_address     = eth_mac_addr,
        .ndo_validate_addr       = eth_validate_addr,
 };
 }
 
 static int
-plip_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+plip_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+                   void __user *data, int cmd)
 {
        struct net_local *nl = netdev_priv(dev);
        struct plipconf *pc = (struct plipconf *) &rq->ifr_ifru;
        if (cmd != SIOCDEVPLIP)
                return -EOPNOTSUPP;
 
+       if (in_compat_syscall())
+               return -EOPNOTSUPP;
+
        switch(pc->pcmd) {
        case PLIP_GET_TIMEOUT:
                pc->trigger = nl->trigger;
 
  */
 
 #define SL_CHECK_TRANSMIT
+#include <linux/compat.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 
 #ifdef CONFIG_SLIP_SMART
 static void sl_keepalive(struct timer_list *t);
 static void sl_outfill(struct timer_list *t);
-static int sl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
+static int sl_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd);
 #endif
 
 /********************************
        .ndo_change_mtu         = sl_change_mtu,
        .ndo_tx_timeout         = sl_tx_timeout,
 #ifdef CONFIG_SLIP_SMART
-       .ndo_do_ioctl           = sl_ioctl,
+       .ndo_siocdevprivate     = sl_siocdevprivate,
 #endif
 };
 
 
 /* VSV changes start here */
 #ifdef CONFIG_SLIP_SMART
-/* function do_ioctl called from net/core/dev.c
+/* function sl_siocdevprivate called from net/core/dev.c
    to allow get/set outfill/keepalive parameter
    by ifconfig                                 */
 
-static int sl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+static int sl_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+                            void __user *data, int cmd)
 {
        struct slip *sl = netdev_priv(dev);
        unsigned long *p = (unsigned long *)&rq->ifr_ifru;
        if (sl == NULL)         /* Allocation failed ?? */
                return -ENODEV;
 
+       if (in_compat_syscall())
+               return -EOPNOTSUPP;
+
        spin_lock_bh(&sl->lock);
 
        if (!sl->tty) {