hdlc_ppp: carrier detect ok, don't turn off negotiation
authorDenis Du <dudenis2000@yahoo.ca>
Sat, 24 Feb 2018 21:51:42 +0000 (16:51 -0500)
committerSasha Levin <alexander.levin@microsoft.com>
Wed, 21 Mar 2018 03:49:47 +0000 (23:49 -0400)
[ Upstream commit b6c3bad1ba83af1062a7ff6986d9edc4f3d7fc8e ]

Sometimes when physical lines have a just good noise to make the protocol
handshaking fail, but the carrier detect still good. Then after remove of
the noise, nobody will trigger this protocol to be start again to cause
the link to never come back. The fix is when the carrier is still on, not
terminate the protocol handshaking.

Signed-off-by: Denis Du <dudenis2000@yahoo.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
drivers/net/wan/hdlc_ppp.c

index 0d7645581f912d04b79e4374fa46c2ed451b7617..4842344a96f1d3a38f6e7a50af0255915f21fe28 100644 (file)
@@ -574,7 +574,10 @@ static void ppp_timer(unsigned long arg)
                        ppp_cp_event(proto->dev, proto->pid, TO_GOOD, 0, 0,
                                     0, NULL);
                        proto->restart_counter--;
-               } else
+               } else if (netif_carrier_ok(proto->dev))
+                       ppp_cp_event(proto->dev, proto->pid, TO_GOOD, 0, 0,
+                                    0, NULL);
+               else
                        ppp_cp_event(proto->dev, proto->pid, TO_BAD, 0, 0,
                                     0, NULL);
                break;