/* Number of tx datagrams that have been queued but not yet acked */
        int queued_datagrams;
+       int peer_count;
 
        struct list_head peer_list;
        struct fw_card *card;
        return 0;
 }
 
+static const struct ethtool_ops fwnet_ethtool_ops = {
+       .get_link       = ethtool_op_get_link,
+};
+
 static const struct net_device_ops fwnet_netdev_ops = {
        .ndo_open       = fwnet_open,
        .ndo_stop       = fwnet_stop,
        net->hard_header_len    = FWNET_HLEN;
        net->type               = ARPHRD_IEEE1394;
        net->tx_queue_len       = FWNET_TX_QUEUE_LEN;
+       net->ethtool_ops        = &fwnet_ethtool_ops;
+
 }
 
 /* caller must hold fwnet_device_mutex */
 
        spin_lock_irq(&dev->lock);
        list_add_tail(&peer->peer_link, &dev->peer_list);
+       dev->peer_count++;
        spin_unlock_irq(&dev->lock);
 
        return 0;
                unregister_netdev(net);
                list_del(&dev->dev_link);
        }
+
+       if (dev->peer_count > 1)
+               netif_carrier_on(net);
  out:
        if (ret && allocated_netdev)
                free_netdev(net);
 
        spin_lock_irq(&peer->dev->lock);
        list_del(&peer->peer_link);
+       peer->dev->peer_count--;
        spin_unlock_irq(&peer->dev->lock);
 
        list_for_each_entry_safe(pd, pd_next, &peer->pd_list, pd_link)
 
        fwnet_remove_peer(peer);
 
+       /* If we serve just one node, that means we lost link
+               with outer world */
+       if (dev->peer_count == 1)
+               netif_carrier_off(dev->netdev);
+
        if (list_empty(&dev->peer_list)) {
                net = dev->netdev;
                unregister_netdev(net);