QUOTE (kan35 @ Oct 13 2011, 13:57)

В общем пытаюсь сделать отработку ситуаций когда связь прерывается. В случае, модем перестает отвечать, PPP просто сакм закрывается, я вижу это в логе, но как запросить у стека что PPP открыт или закрыт? Потому что если PPP закрывается и сделать netconn_connect, то стек остается в ожидании навечно, а потока PPP уже нет в помине.
Подскажите как правильно делать.
Какая ОС?
#ifconfig | grep ppp0
Программно - я бы попробовал с помощью ioctl(SIOCGPPPSTATS)
Фрагмент исходного текста драйвера ppp:
CODE
static int ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
struct ppp *ppp = dev->priv;
int err = -EFAULT;
void *addr = (void *) ifr->ifr_ifru.ifru_data;
struct ppp_stats stats;
struct ppp_comp_stats cstats;
char *vers;
switch (cmd) {
case SIOCGPPPSTATS:
ppp_get_stats(ppp, &stats);
if (copy_to_user(addr, &stats, sizeof(stats)))
break;
err = 0;
break;
case SIOCGPPPCSTATS:
memset(&cstats, 0, sizeof(cstats));
if (ppp->xc_state != 0)
ppp->xcomp->comp_stat(ppp->xc_state, &cstats.c);
if (ppp->rc_state != 0)
ppp->rcomp->decomp_stat(ppp->rc_state, &cstats.d);
if (copy_to_user(addr, &cstats, sizeof(cstats)))
break;
err = 0;
break;
case SIOCGPPPVER:
vers = PPP_VERSION;
if (copy_to_user(addr, vers, strlen(vers) + 1))
break;
err = 0;
break;
default:
err = -EINVAL;
}
return err;
}