As we are currently unable to fix the problem with carrier and protocol
state signaling in net core I've to disable netif_carrier_off()
calls used by WAN protocol drivers. The attached patch should make
them working again.
The remaining netif_carrier_*() calls in hdlc_fr.c are fine as they
don't touch the physical device.
Signed-off-by: Krzysztof Halasa <khc@pm.waw.pl>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
"uptime %ud%uh%um%us)\n",
dev->name, days, hrs,
min, sec);
"uptime %ud%uh%um%us)\n",
dev->name, days, hrs,
min, sec);
hdlc->state.cisco.up = 1;
}
}
hdlc->state.cisco.up = 1;
}
}
hdlc->state.cisco.settings.timeout * HZ)) {
hdlc->state.cisco.up = 0;
printk(KERN_INFO "%s: Link down\n", dev->name);
hdlc->state.cisco.settings.timeout * HZ)) {
hdlc->state.cisco.up = 0;
printk(KERN_INFO "%s: Link down\n", dev->name);
}
cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ,
}
cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ,
{
hdlc_device *hdlc = dev_to_hdlc(dev);
del_timer_sync(&hdlc->state.cisco.timer);
{
hdlc_device *hdlc = dev_to_hdlc(dev);
del_timer_sync(&hdlc->state.cisco.timer);
if (netif_carrier_ok(dev))
netif_carrier_off(dev);
if (netif_carrier_ok(dev))
netif_carrier_off(dev);
hdlc->state.cisco.up = 0;
hdlc->state.cisco.request_sent = 0;
}
hdlc->state.cisco.up = 0;
hdlc->state.cisco.request_sent = 0;
}
hdlc->state.fr.reliable = reliable;
if (reliable) {
hdlc->state.fr.reliable = reliable;
if (reliable) {
if (!netif_carrier_ok(dev))
netif_carrier_on(dev);
if (!netif_carrier_ok(dev))
netif_carrier_on(dev);
hdlc->state.fr.n391cnt = 0; /* Request full status */
hdlc->state.fr.dce_changed = 1;
hdlc->state.fr.n391cnt = 0; /* Request full status */
hdlc->state.fr.dce_changed = 1;
if (netif_carrier_ok(dev))
netif_carrier_off(dev);
if (netif_carrier_ok(dev))
netif_carrier_off(dev);
while (pvc) { /* Deactivate all PVCs */
pvc_carrier(0, pvc);
while (pvc) { /* Deactivate all PVCs */
pvc_carrier(0, pvc);
hdlc_device *hdlc = dev_to_hdlc(dev);
if (hdlc->proto.start)
return hdlc->proto.start(dev);
hdlc_device *hdlc = dev_to_hdlc(dev);
if (hdlc->proto.start)
return hdlc->proto.start(dev);
#ifdef DEBUG_LINK
if (netif_carrier_ok(dev))
printk(KERN_ERR "hdlc_set_carrier_on(): already on\n");
#endif
netif_carrier_on(dev);
#ifdef DEBUG_LINK
if (netif_carrier_ok(dev))
printk(KERN_ERR "hdlc_set_carrier_on(): already on\n");
#endif
netif_carrier_on(dev);
if (hdlc->proto.stop)
return hdlc->proto.stop(dev);
if (hdlc->proto.stop)
return hdlc->proto.stop(dev);
#ifdef DEBUG_LINK
if (!netif_carrier_ok(dev))
printk(KERN_ERR "hdlc_set_carrier_off(): already off\n");
#endif
netif_carrier_off(dev);
#ifdef DEBUG_LINK
if (!netif_carrier_ok(dev))
printk(KERN_ERR "hdlc_set_carrier_off(): already off\n");
#endif
netif_carrier_off(dev);
if (result != 0)
return -EIO;
if (result != 0)
return -EIO;
if (netif_carrier_ok(dev))
netif_carrier_off(dev); /* no carrier until DCD goes up */
if (netif_carrier_ok(dev))
netif_carrier_off(dev); /* no carrier until DCD goes up */