X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=net%2Fnetrom%2Fnr_dev.c;h=c7b5d930e7323b84313acf551939229a40663233;hb=7a13e932281e7042a592f4f14db0b348199e7aac;hp=9b8eb54971ab2ca97d2920c0c913d0271d4b945d;hpb=a8c4c20dfa8b28a3c99e33c639d9c2ea5657741e;p=powerpc.git diff --git a/net/netrom/nr_dev.c b/net/netrom/nr_dev.c index 9b8eb54971..c7b5d930e7 100644 --- a/net/netrom/nr_dev.c +++ b/net/netrom/nr_dev.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -57,8 +56,8 @@ int nr_rx_ip(struct sk_buff *skb, struct net_device *dev) /* Spoof incoming device */ skb->dev = dev; - skb->mac.raw = skb->nh.raw; - skb->nh.raw = skb->data; + skb_reset_mac_header(skb); + skb_reset_network_header(skb); skb->pkt_type = PACKET_HOST; netif_rx(skb); @@ -128,25 +127,37 @@ static int nr_header(struct sk_buff *skb, struct net_device *dev, unsigned short return -37; } -static int nr_set_mac_address(struct net_device *dev, void *addr) +static int __must_check nr_set_mac_address(struct net_device *dev, void *addr) { struct sockaddr *sa = addr; + int err; + + if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len)) + return 0; + + if (dev->flags & IFF_UP) { + err = ax25_listen_register((ax25_address *)sa->sa_data, NULL); + if (err) + return err; - if (dev->flags & IFF_UP) ax25_listen_release((ax25_address *)dev->dev_addr, NULL); + } memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); - if (dev->flags & IFF_UP) - ax25_listen_register((ax25_address *)dev->dev_addr, NULL); - return 0; } static int nr_open(struct net_device *dev) { + int err; + + err = ax25_listen_register((ax25_address *)dev->dev_addr, NULL); + if (err) + return err; + netif_start_queue(dev); - ax25_listen_register((ax25_address *)dev->dev_addr, NULL); + return 0; }