return 0;
 
        if (lp->master)
-               nd = ((isdn_net_local *) lp->master->priv)->netdev;
+               nd = ISDN_MASTER_PRIV(lp)->netdev;
        else
                nd = lp->netdev;
        
 {
 #ifdef CONFIG_ISDN_X25
        struct concap_device_ops * dops =
-               ( (isdn_net_local *) dev->priv ) -> dops;
+               ((isdn_net_local *) netdev_priv(dev))->dops;
        struct concap_proto * cprot =
-               ( (isdn_net_local *) dev->priv ) -> netdev -> cprot;
+               ((isdn_net_local *) netdev_priv(dev))->netdev->cprot;
 #endif
 #ifdef CONFIG_ISDN_X25
        if( cprot && cprot -> pops && dops )
        }
 
        /* If this interface has slaves, start them also */
-
-       if ((p = (((isdn_net_local *) dev->priv)->slave))) {
+       p = MASTER_TO_SLAVE(dev);
+       if (p) {
                while (p) {
                        isdn_net_reset(p);
-                       p = (((isdn_net_local *) p->priv)->slave);
+                       p = MASTER_TO_SLAVE(p);
                }
        }
        isdn_lock_drivers();
                                                        isdn_net_ciscohdlck_connected(lp);
                                                if (lp->p_encap != ISDN_NET_ENCAP_SYNCPPP) {
                                                        if (lp->master) { /* is lp a slave? */
-                                                               isdn_net_dev *nd = ((isdn_net_local *)lp->master->priv)->netdev;
+                                                               isdn_net_dev *nd = ISDN_MASTER_PRIV(lp)->netdev;
                                                                isdn_net_add_to_bundle(nd, lp);
                                                        }
                                                }
 void
 isdn_net_hangup(struct net_device *d)
 {
-       isdn_net_local *lp = (isdn_net_local *) d->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(d);
        isdn_ctrl cmd;
 #ifdef CONFIG_ISDN_X25
        struct concap_proto *cprot = lp->netdev->cprot;
 
        if (lp->flags & ISDN_NET_CONNECTED) {
                if (lp->slave != NULL) {
-                       isdn_net_local *slp = (isdn_net_local *)lp->slave->priv;
+                       isdn_net_local *slp = ISDN_SLAVE_PRIV(lp);
                        if (slp->flags & ISDN_NET_CONNECTED) {
                                printk(KERN_INFO
                                        "isdn_net: hang up slave %s before %s\n",
 {
        isdn_net_dev *nd;
        isdn_net_local *slp;
-       isdn_net_local *lp = (isdn_net_local *) ndev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(ndev);
        int retv = 0;
 
-       if (((isdn_net_local *) (ndev->priv))->master) {
+       if (((isdn_net_local *) netdev_priv(ndev))->master) {
                printk("isdn BUG at %s:%d!\n", __FILE__, __LINE__);
                dev_kfree_skb(skb);
                return 0;
                return isdn_ppp_xmit(skb, ndev);
        }
 #endif
-       nd = ((isdn_net_local *) ndev->priv)->netdev;
+       nd = ((isdn_net_local *) netdev_priv(ndev))->netdev;
        lp = isdn_net_get_locked_lp(nd);
        if (!lp) {
                printk(KERN_WARNING "%s: all channels busy - requeuing!\n", ndev->name);
                        } else {
                                /* subsequent overload: if slavedelay exceeded, start dialing */
                                if (time_after(jiffies, lp->sqfull_stamp + lp->slavedelay)) {
-                                       slp = lp->slave->priv;
+                                       slp = ISDN_SLAVE_PRIV(lp);
                                        if (!(slp->flags & ISDN_NET_CONNECTED)) {
-                                               isdn_net_force_dial_lp((isdn_net_local *) lp->slave->priv);
+                                               isdn_net_force_dial_lp(ISDN_SLAVE_PRIV(lp));
                                        }
                                }
                        }
 static void
 isdn_net_adjust_hdr(struct sk_buff *skb, struct net_device *dev)
 {
-       isdn_net_local *lp = (isdn_net_local *) dev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(dev);
        if (!skb)
                return;
        if (lp->p_encap == ISDN_NET_ENCAP_ETHER) {
 
 static void isdn_net_tx_timeout(struct net_device * ndev)
 {
-       isdn_net_local *lp = (isdn_net_local *) ndev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(ndev);
 
        printk(KERN_WARNING "isdn_tx_timeout dev %s dialstate %d\n", ndev->name, lp->dialstate);
        if (!lp->dialstate){
 static int
 isdn_net_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 {
-       isdn_net_local *lp = (isdn_net_local *) ndev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(ndev);
 #ifdef CONFIG_ISDN_X25
        struct concap_proto * cprot = lp -> netdev -> cprot;
 /* At this point hard_start_xmit() passes control to the encapsulation
        struct net_device *p;
 #ifdef CONFIG_ISDN_X25
        struct concap_proto * cprot =
-               ( (isdn_net_local *) dev->priv ) -> netdev -> cprot;
+               ((isdn_net_local *) netdev_priv(dev))->netdev->cprot;
        /* printk(KERN_DEBUG "isdn_net_close %s\n" , dev-> name ); */
 #endif
 
        if( cprot && cprot -> pops ) cprot -> pops -> close( cprot );
 #endif
        netif_stop_queue(dev);
-       if ((p = (((isdn_net_local *) dev->priv)->slave))) {
+       p = MASTER_TO_SLAVE(dev);
+       if (p) {
                /* If this interface has slaves, stop them also */
                while (p) {
 #ifdef CONFIG_ISDN_X25
-                       cprot = ( (isdn_net_local *) p->priv )
+                       cprot = ((isdn_net_local *) netdev_priv(p))
                                -> netdev -> cprot;
                        if( cprot && cprot -> pops )
                                cprot -> pops -> close( cprot );
 #endif
                        isdn_net_hangup(p);
-                       p = (((isdn_net_local *) p->priv)->slave);
+                       p = MASTER_TO_SLAVE(p);
                }
        }
        isdn_net_hangup(dev);
 static struct net_device_stats *
 isdn_net_get_stats(struct net_device *dev)
 {
-       isdn_net_local *lp = (isdn_net_local *) dev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(dev);
        return &lp->stats;
 }
 
 static int
 isdn_ciscohdlck_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 {
-       isdn_net_local *lp = (isdn_net_local *) dev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(dev);
        unsigned long len = 0;
        unsigned long expires = 0;
        int tmp = 0;
 static void
 isdn_net_receive(struct net_device *ndev, struct sk_buff *skb)
 {
-       isdn_net_local *lp = (isdn_net_local *) ndev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(ndev);
        isdn_net_local *olp = lp;       /* original 'lp' */
 #ifdef CONFIG_ISDN_X25
        struct concap_proto *cprot = lp -> netdev -> cprot;
                 * handle master's statistics and hangup-timeout
                 */
                ndev = lp->master;
-               lp = (isdn_net_local *) ndev->priv;
+               lp = (isdn_net_local *) netdev_priv(ndev);
                lp->stats.rx_packets++;
                lp->stats.rx_bytes += skb->len;
        }
                           unsigned short type,
                           const void *daddr, const void *saddr, unsigned plen)
 {
-       isdn_net_local *lp = dev->priv;
+       isdn_net_local *lp = netdev_priv(dev);
        unsigned char *p;
        ushort len = 0;
 
 isdn_net_rebuild_header(struct sk_buff *skb)
 {
        struct net_device *dev = skb->dev;
-       isdn_net_local *lp = dev->priv;
+       isdn_net_local *lp = netdev_priv(dev);
        int ret = 0;
 
        if (lp->p_encap == ISDN_NET_ENCAP_ETHER) {
 static int isdn_header_cache(const struct neighbour *neigh, struct hh_cache *hh)
 {
        const struct net_device *dev = neigh->dev;
-       isdn_net_local *lp = dev->priv;
+       isdn_net_local *lp = netdev_priv(dev);
 
        if (lp->p_encap == ISDN_NET_ENCAP_ETHER)
                return eth_header_cache(neigh, hh);
                                     const struct net_device *dev,
                                     const unsigned char *haddr)
 {
-       isdn_net_local *lp = dev->priv;
+       isdn_net_local *lp = netdev_priv(dev);
        if (lp->p_encap == ISDN_NET_ENCAP_ETHER)
                eth_header_cache_update(hh, dev, haddr);
 }
                                 * it's master and parent slave is online. If not, reject the call.
                                 */
                                if (lp->master) {
-                                       isdn_net_local *mlp = (isdn_net_local *) lp->master->priv;
+                                       isdn_net_local *mlp = ISDN_MASTER_PRIV(lp);
                                        printk(KERN_DEBUG "ICALLslv: %s\n", p->dev->name);
                                        printk(KERN_DEBUG "master=%s\n", lp->master->name);
                                        if (mlp->flags & ISDN_NET_CONNECTED) {
                                                printk(KERN_DEBUG "master online\n");
                                                /* Master is online, find parent-slave (master if first slave) */
                                                while (mlp->slave) {
-                                                       if ((isdn_net_local *) mlp->slave->priv == lp)
+                                                       if (ISDN_SLAVE_PRIV(mlp) == lp)
                                                                break;
-                                                       mlp = (isdn_net_local *) mlp->slave->priv;
+                                                       mlp = ISDN_SLAVE_PRIV(mlp);
                                                }
                                        } else
                                                printk(KERN_DEBUG "master offline\n");
  */
 static void _isdn_setup(struct net_device *dev)
 {
-       isdn_net_local *lp = dev->priv;
+       isdn_net_local *lp = netdev_priv(dev);
 
        dev->flags = IFF_NOARP | IFF_POINTOPOINT;
        lp->p_encap = ISDN_NET_ENCAP_RAWIP;
                kfree(netdev);
                return NULL;
        }
-       netdev->local = netdev->dev->priv;
+       netdev->local = netdev_priv(netdev->dev);
        netdev->dev->init = isdn_net_init;
        if (master) {
                /* Device shall be a slave */
-               struct net_device *p = (((isdn_net_local *) master->priv)->slave);
+               struct net_device *p = MASTER_TO_SLAVE(master);
                struct net_device *q = master;
 
                netdev->local->master = master;
                /* Put device at end of slave-chain */
                while (p) {
                        q = p;
-                       p = (((isdn_net_local *) p->priv)->slave);
+                       p = MASTER_TO_SLAVE(p);
                }
-               ((isdn_net_local *) q->priv)->slave = netdev->dev;
+               MASTER_TO_SLAVE(q) = netdev->dev;
        } else {
                /* Device shall be a master */
                /*
                /* If this interface has slaves, do a hangup for them also. */
                while (q) {
                        isdn_net_hangup(q);
-                       q = (((isdn_net_local *) q->priv)->slave);
+                       q = MASTER_TO_SLAVE(q);
                }
                isdn_net_hangup(p->dev);
                return 0;
                isdn_unexclusive_channel(p->local->pre_device, p->local->pre_channel);
        if (p->local->master) {
                /* It's a slave-device, so update master's slave-pointer if necessary */
-               if (((isdn_net_local *) (p->local->master->priv))->slave == p->dev)
-                       ((isdn_net_local *) (p->local->master->priv))->slave = p->local->slave;
+               if (((isdn_net_local *) ISDN_MASTER_PRIV(p->local))->slave ==
+                   p->dev)
+                       ((isdn_net_local *)ISDN_MASTER_PRIV(p->local))->slave =
+                               p->local->slave;
        } else {
                /* Unregister only if it's a master-device */
                unregister_netdev(p->dev);
 
        is = ippp_table[slot];
        
        if (lp->master) { // FIXME?
-               mlp = (isdn_net_local *) lp->master->priv;
+               mlp = ISDN_MASTER_PRIV(lp);
                slot = mlp->ppp_slot;
                if (slot < 0 || slot >= ISDN_MAX_CHANNELS) {
                        printk(KERN_ERR "isdn_ppp_push_higher: master->ppp_slot(%d)\n",
        struct ippp_struct *ipt,*ipts;
        int slot, retval = 0;
 
-       mlp = (isdn_net_local *) (netdev->priv);
+       mlp = (isdn_net_local *) netdev_priv(netdev);
        nd = mlp->netdev;       /* get master lp */
 
        slot = mlp->ppp_slot;
 {
        struct ppp_stats __user *res = ifr->ifr_data;
        struct ppp_stats t;
-       isdn_net_local *lp = (isdn_net_local *) dev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(dev);
 
        if (!access_ok(VERIFY_WRITE, res, sizeof(struct ppp_stats)))
                return -EFAULT;
 {
        int error=0;
        int len;
-       isdn_net_local *lp = (isdn_net_local *) dev->priv;
+       isdn_net_local *lp = (isdn_net_local *) netdev_priv(dev);
 
 
        if (lp->p_encap != ISDN_NET_ENCAP_SYNCPPP)
 
        sdev = lp->slave;
        while (sdev) {
-               isdn_net_local *mlp = (isdn_net_local *) sdev->priv;
+               isdn_net_local *mlp = (isdn_net_local *) netdev_priv(sdev);
                if (!(mlp->flags & ISDN_NET_CONNECTED))
                        break;
                sdev = mlp->slave;
        if (!sdev)
                return 2;
 
-       isdn_net_dial_req((isdn_net_local *) sdev->priv);
+       isdn_net_dial_req((isdn_net_local *) netdev_priv(sdev));
        return 0;
 #else
        return -1;
 
        sdev = lp->slave;
        while (sdev) {
-               isdn_net_local *mlp = (isdn_net_local *) sdev->priv;
+               isdn_net_local *mlp = (isdn_net_local *) netdev_priv(sdev);
 
                if (mlp->slave) { /* find last connected link in chain */
-                       isdn_net_local *nlp = (isdn_net_local *) mlp->slave->priv;
+                       isdn_net_local *nlp = ISDN_SLAVE_PRIV(mlp);
 
                        if (!(nlp->flags & ISDN_NET_CONNECTED))
                                break;
        isdn_ppp_frame_log("ccp-rcv", skb->data, skb->len, 32, is->unit,lp->ppp_slot);
 
        if(lp->master) {
-               int slot = ((isdn_net_local *) (lp->master->priv))->ppp_slot;
+               int slot = ISDN_MASTER_PRIV(lp)->ppp_slot;
                if (slot < 0 || slot >= ISDN_MAX_CHANNELS) {
                        printk(KERN_ERR "%s: slot(%d) out of range\n",
                                __func__, slot);
        isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit,lp->ppp_slot);
 
        if (lp->master) {
-               slot = ((isdn_net_local *) (lp->master->priv))->ppp_slot;
+               slot = ISDN_MASTER_PRIV(lp)->ppp_slot;
                if (slot < 0 || slot >= ISDN_MAX_CHANNELS) {
                        printk(KERN_ERR "%s: slot(%d) out of range\n",
                                __func__, slot);