Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по PPP и lwIP
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
kan35
В общем пытаюсь сделать отработку ситуаций когда связь прерывается. В случае, модем перестает отвечать, PPP просто сакм закрывается, я вижу это в логе, но как запросить у стека что PPP открыт или закрыт? Потому что если PPP закрывается и сделать netconn_connect, то стек остается в ожидании навечно, а потока PPP уже нет в помине.
Подскажите как правильно делать.
gosha
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;
}
kan35
Да, я дошел до этого сам. Использую FreeRTOS-7.0.2
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.