This makes it possible to handle carrier lost and detection.
In case of carrier lost, we shutdown layer 3 and flush all sessions.

Signed-off-by: Martin Schiller <m...@dev.tdt.de>
---
 net/x25/af_x25.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
index d98d1145500e..d61a154b94e4 100644
--- a/net/x25/af_x25.c
+++ b/net/x25/af_x25.c
@@ -266,6 +266,17 @@ static int x25_device_event(struct notifier_block *this, 
unsigned long event,
                        pr_debug("X.25: got event NETDEV_UNREGISTER for device: 
%s\n", dev->name);
                        x25_link_device_remove(dev);
                        break;
+               case NETDEV_CHANGE:
+                       pr_debug("X.25: got event NETDEV_CHANGE for device: 
%s\n", dev->name);
+                       if (!netif_carrier_ok(dev)) {
+                               pr_debug("X.25: Carrier lost -> set link state 
down: %s\n", dev->name);
+                               nb = x25_get_neigh(dev);
+                               if (nb) {
+                                       x25_link_terminated(nb);
+                                       x25_neigh_put(nb);
+                               }
+                       }
+                       break;
                }
        }
 
-- 
2.20.1

Reply via email to