Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74a14504 authored by Maxim Levitsky's avatar Maxim Levitsky Committed by Stefan Richter
Browse files

firewire: net: invalidate ARP entries of removed nodes



This makes it possible to resume communication with a node that dropped
off the bus for a brief period.  Otherwise communication will only be
possible after ARP cache entry timeouts.

Signed-off-by: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (rebased)
parent c56eb8fb
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -191,6 +191,7 @@ struct fwnet_peer {
	struct fwnet_device *dev;
	u64 guid;
	u64 fifo;
	__be32 ip;

	/* guarded by dev->lock */
	struct list_head pd_list; /* received partial datagrams */
@@ -570,6 +571,8 @@ static int fwnet_finish_incoming_packet(struct net_device *net,
				peer->speed = sspd;
			if (peer->max_payload > max_payload)
				peer->max_payload = max_payload;

			peer->ip = arp1394->sip;
		}
		spin_unlock_irqrestore(&dev->lock, flags);

@@ -1470,6 +1473,7 @@ static int fwnet_add_peer(struct fwnet_device *dev,
	peer->dev = dev;
	peer->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4];
	peer->fifo = FWNET_NO_FIFO_ADDR;
	peer->ip = 0;
	INIT_LIST_HEAD(&peer->pd_list);
	peer->pdg_size = 0;
	peer->datagram_label = 0;
@@ -1589,10 +1593,13 @@ static int fwnet_remove(struct device *_dev)

	mutex_lock(&fwnet_device_mutex);

	net = dev->netdev;
	if (net && peer->ip)
		arp_invalidate(net, peer->ip);

	fwnet_remove_peer(peer, dev);

	if (list_empty(&dev->peer_list)) {
		net = dev->netdev;
		unregister_netdev(net);

		if (dev->local_fifo != FWNET_NO_FIFO_ADDR)