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: