[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: (forw) Bug#630523: [INTL:ru] Incorrect translation of "Detecting link on ${interface}"



В Thu, 16 Jun 2011 19:33:02 +0400
Yuri Kozlov <yuray@komyakino.ru> пишет:

> В Thu, 16 Jun 2011 09:39:09 +0400
> Sergey Alyoshin <alyoshin.s@gmail.com> пишет:
> 
> > On Wed, Jun 15, 2011 at 9:29 PM, Yuri Kozlov <yuray@komyakino.ru>
> > wrote:
> > > Проверка подключения кабеля в ${interface} ?
> > 
> > В "detecting link" нет "кабеля", и если это WiFi?
> > 
> > Может "проверка сигнала ${interface}"?
> 
> А это появляется при проверке wifi?
> Мне казалось, что detecting link подразумевает наличие провода (т.е.
> наличие напряжения на контактах). Надо код глянуть.

Вот код.

/* Attempt to find out whether we've got link on an interface.  Don't try to
 * bring the interface up or down, we leave that to the caller.  Use a
 * progress bar so the user knows what's going on.  Return true if we got
 * link, and false otherwise.
 */
int netcfg_detect_link(struct debconfclient *client, const char *if_name)
{
    char arping[256];
    char s_gateway[INET_ADDRSTRLEN];
    int count, rv = 0;
    int link_waits = NETCFG_LINK_WAIT_TIME * 4;
    int gw_tries = NETCFG_GATEWAY_REACHABILITY_TRIES;

    if (gateway.s_addr) {
        inet_ntop(AF_INET, &gateway, s_gateway, sizeof(s_gateway));
        sprintf(arping, "arping -c 1 -w 1 -f -I %s %s", if_name, s_gateway);
    }
    
    debconf_capb(client, "progresscancel");
    debconf_subst(client, "netcfg/link_detect_progress", "interface", if_name);
    debconf_progress_start(client, 0, 100, "netcfg/link_detect_progress");
    for (count = 0; count < link_waits; count++) {
        usleep(250000);
        if (debconf_progress_set(client, 50 * count / link_waits) == 30) {
            /* User cancelled on us... bugger */
            rv = 0;
            break;
        }
        if (ethtool_lite(if_name) == 1) /* ethtool-lite's CONNECTED */ {
            if (gateway.s_addr && !is_wireless_iface(if_name)) {
                for (count = 0; count < gw_tries; count++) {
                    if (di_exec_shell_log(arping) == 0)
                        break;
                    if (debconf_progress_set(client, 50 + 50 * count / gw_tries) == 30)
                        break;
                }
            }
            rv = 1;
            break;
        }
        debconf_progress_set(client, 100);
    }

    debconf_progress_stop(client);
    debconf_capb(client, "");
    
    return rv;
}


Судя по
if (gateway.s_addr && !is_wireless_iface(if_name)) {

показ сообщения актуален только для проводного интерфейса.
Для wifi эта строчка быстро уберётся.
Но проверяется не только наличие физического линка на порту, но и
доступность MAC-адреса шлюза.
То есть больше чем проверка физики.

Я за предложение Максима
"Проверка наличия подключения через ${interface}"


-- 
Best Regards,
Yuri Kozlov


Reply to: