[PATCH] info to atm layer about broken connection

Stanislaw Gruszka stf_xl at wp.pl
Mon Oct 31 06:17:23 EST 2005


Hi 
> > simply after disconnect modem, ppp demon still works 
> > and ifconfig command show me connection is ok.
> > Using vcc->push(vcc, NULL) kill pppd with
> > Modem hangup message in logs.
> 
> that sounds like a bug in the pppoatm driver.  I will look into this.
I don't know, however it seems pushing NULL is ok.
I found in net/atm/pppoatm.c :

/* Called when an AAL5 PDU comes in */
static void pppoatm_push(struct atm_vcc *atmvcc, struct sk_buff *skb)
{
	struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc);
	DPRINTK("pppoatm push\n");
	if (skb == NULL) {			/* VCC was closed */
		DPRINTK("removing ATMPPP VCC %p\n", pvcc);
		pppoatm_unassign_vcc(atmvcc);
		atmvcc->push(atmvcc, NULL);	/* Pass along bad news */
		return;
	}


and in net/atm/raw.c :

/*
 * SKB == NULL indicates that the link is being closed
 */

static void atm_push_raw(struct atm_vcc *vcc,struct sk_buff *skb)
{
	if (skb) {
		struct sock *sk = sk_atm(vcc);

		skb_queue_tail(&sk->sk_receive_queue, skb);
		sk->sk_data_ready(sk, skb->len);
	}
}

>
> > > Also, as far as I can see the use of try_module_get is pointless.  Why do
> > > you think it is needed?
> > It depends on approach, someone would like to finish connection when 
> > net driver module is unloaded, other one would like to prevent unloading 
> > module. I preffer second approach as is in (for example) pppoatm .
> >
> > Adding try_module_get and module_put pair in subdriver atm_start() and atm_stop() 
> > propably block unload module anyway.
> 
> It would, which is why I don't want it.  Can you please explain why it is
> useful to have the connection be gone before the module unload completes?
Remain connection when device is gone give some problems (at least on pppoatm): 
- you can read/write to not working interface and there is no indication 
for user the link is broken
- you must reload atm module before you can establish new connection, 
even when old one was disable. 	
     
> I don't really have anything against it, except that this kind of
> synchronous unloading can easily cause rmmod to hang indefinitely (for
> example: the output of rmmod is piped to a socket that goes through the
> ATM device; I don't know if this is really possible, just giving you
> the idea), so better to avoid it if possible.  
I hope higher layers properly handle this race condition possibility.

> For example, the proc 
> filesystem entries /proc/net/atm/speed* can also continue to exist after 
> the speedtch module is unloaded, or the device is removed, because it
> would be much harder to do it differently.

Ok, but if we call read on unloaded procfs entries we get error 
(propably -ENOENT),  with internet connection there is no error,
only sleeping forever.

Summary:
 - Info to atm layer that link is broken when device is removed or module unloaded is necessary. 
 - Prevent subdriver module unloading when there is working connection is nice (lets root 
disable connection (kill pppd or atmarpd) before unload module).

__
Thanks
Staszek Gruszka




More information about the Usbatm mailing list