Bug 6582

Summary: Time to enable wpa_supplicant support
Product: Sisyphus Reporter: Yurix <yurix>
Component: etcnetAssignee: Mikhail Efremov <sem>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P2 CC: ldv, rider, sem, shaba, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
WPA enable patch
none
WPA patch
none
etcnet-0.7.3-alt1-wpa_supplicant
none
Catch the PID of wpa_supplicant [applied]
none
Fix for shutdown scripts not called due to iface has been downed by dhcpcd [applied] none

Description Yurix 2005-04-20 12:36:24 MSD
It almost there, in config-wireless. Suggested patch included. 
One thing is missing too. config-wireless called for each interface regardless 
to presence of wireless options. I suggest to run wpa_supplicant only when 
WPA_DRIVER is set explictly.
Comment 1 Yurix 2005-04-20 12:37:52 MSD
Created attachment 832 [details]
WPA enable patch
Comment 2 Denis Ovsienko 2005-04-20 13:00:28 MSD
> One thing is missing too. config-wireless called for each interface regardless 
Разве?
ifup-common:92:is_yes "$CONFIG_WIRELESS" && ExecIfExecutable
$SCRIPTDIR/config-wireless $NAME && print_progress
Comment 3 Denis Ovsienko 2005-04-21 17:48:45 MSD
wpa_supplicant вроде бы обновляется. Тестировать будете, если верну поддержку WPA?
Comment 4 Yurix 2005-04-21 20:36:20 MSD
С радостью! 
Comment 5 Yurix 2005-04-21 21:31:45 MSD
(In reply to comment #2)   
> > One thing is missing too. config-wireless called for each interface   
regardless    
> Разве?   
> ifup-common:92:is_yes "$CONFIG_WIRELESS" && ExecIfExecutable   
> $SCRIPTDIR/config-wireless $NAME && print_progress   
   
Я перепроверил -- тут я был не прав. Правда встает другой вопрос --   
wpa_supplicant может использоваться теперь и на простом ethernet интерфейсе.   
Также как и xsupplicant. Возможно, для этих целей завести отдельную опцию, типа   
USE_AUTH=(wpa|xopen|off-[default])  
    wpa - для wpa_supplicant  
    xopen - для xsupplicant 
    off - соответственно... 
 
WPA тестировать могу, xsupplicant в сизифе нет, но он у меня собран -- 
тестировать могу только частично. И всё это могу тестировать пока только на 
WiFi. 
 
Comment 6 Denis Ovsienko 2005-04-26 14:35:26 MSD
/etc/net 0.7.3, начинайте тестирование :)
Comment 7 Yurix 2005-04-26 18:34:59 MSD
Created attachment 840 [details]
WPA patch
Comment 8 Yurix 2005-04-26 18:46:03 MSD
1) Следующая конструкция не работает: 
$WPA_SUPPLICANT -i$NAME ${WPA_DRIVER:?-D$WPA_DRIVER} 
Тут видимо хотелось чтобы для тех случаев, когда указан WPA_DRIVER, добавить 
перед ним '-D' и это верно. Однако сама конструкция работает неправильно: 
Если WPA_DRIVER определен и не нулевой, то используем его, иначе ставим -D. 
 
2) wpa_supplicant требует указывать конфигурационный файл '-c /path/to/cfg' 
Для хранения предлагается использовать переменную WPA_CONFIG, которую в 
глобальном файле задефолтить например на /etc/wpa_supplicant.conf 
 
3) wpa_supplicant должен висеть в фоне, для того, чтобы обновлять ключи EAP и 
т.п. От сюда -- нужно добавить опцию '-B' 
 
Comment 9 Denis Ovsienko 2005-04-27 13:42:06 MSD
(In reply to comment #8)
> 1) Следующая конструкция не работает: 
Перепутано ":?" и ":+", исправлено.

> 2) wpa_supplicant требует указывать конфигурационный файл '-c /path/to/cfg' 
> Для хранения предлагается использовать переменную WPA_CONFIG, которую в 
> глобальном файле задефолтить например на /etc/wpa_supplicant.conf 
if [ -x "${WPA_SUPPLICANT:=$DEFAULT_WPA_SUPPLICANT}" ]; then
	local prof_conf=`profiled_filename $MYIFACEDIR/wpa_supplicant.conf`
	$WPA_SUPPLICANT -B -i$NAME${WPA_DRIVER:+ -D$WPA_DRIVER}${prof_conf:+ -c $prof_conf}
fi


> 3) wpa_supplicant должен висеть в фоне, для того, чтобы обновлять ключи EAP и 
> т.п. От сюда -- нужно добавить опцию '-B' 
Хорошо.
Comment 10 Yurix 2005-04-27 17:05:00 MSD
(In reply to comment #9) 
# ifup air 
..../etc/net/scripts/config-wireless: line 27: local: can only be used in a 
function 
Если убрать local, то работает замечательно! 
 
Правда, в расчете на потенциальную необходимость использовать WPA сразу на 
нескольких интерфейсах, более правильным представляется задействование единого 
для всех сетей и интерфейсов конфигурационного файла, чтобы использовать 
алгоритм выбора сети, встроенный в wpa_supplicant. Однако, на данном этапе я не 
имею возможности протестировать такие конфигурации. По-этому, предлагаю 
зафиксировать текущее, пусть не идеальное, но вполне работоспособное решение ! 
 
И ещё один момент. Вероятно, для тех интерфейсов, которые рождаются с участием 
неких демонов :) типа pppd, wpa_supplicant, и т.д стоит предусмотреть смерь 
оных в результате ifdown интерфейса. Например, ловить PID в файл при старте, 
потом бить по нему при останове соответствующего интерфейса, как это сделано во 
многих sysv initscripts ? 
 
Comment 11 Denis Ovsienko 2005-04-27 17:19:28 MSD
Фиксируем.
Для ppp наоборот --- смерть демона инициирует ifdown. wpa_supplicant ближе к
zcip/dhcpcd, его наличие влияет только на наличие пакетов, а интерфейс может
быть UP.
Comment 12 Yurix 2005-04-27 20:31:27 MSD
(In reply to comment #11) 
 В реальности при ifdown интерфейса ppp смерти соответствующего pppd почему-то 
не происходит. По крайней мере у меня дома ifdown ppp0 не убивает pppd, 
соответственно каждый новый service network restart приводит к появлению ppp1 
ppp2 и т.д (я использую pptp tunnel). 
  
> Для ppp наоборот --- смерть демона инициирует ifdown. wpa_supplicant ближе к 
> zcip/dhcpcd, его наличие влияет только на наличие пакетов, а интерфейс может 
> быть UP. 
Согласен, однако это также означает, что как максимум (как минимум не знаю --- 
у нас ведь нет промежуточного состояния между up и down, типа unconf), после 
свершения ifdown эти демоны должны быть сняты с выполнения. 
 
Т.е общее между pppd,wpa_supplicant здесь то, что факт продолжения действия 
после опускания интерфейса является ошибкой, так как при последующем вызове 
ifup в случае ppp рождается новый интерфейс, а для wpa_supplicant появляется 
лишний процесс (точно не знаю -- возможно старый процесс мешает работе вновь 
поднятого). 
Предлагаю всёже убивать wpa_supplicant (и pppd) при ifdown 
Или есть причины, которых я не знаю, но по которым им следует жить после 
ifdown, хотелось бы их услышать. 
 
 
Comment 13 Denis Ovsienko 2005-04-28 10:01:47 MSD
>  В реальности при ifdown интерфейса ppp смерти соответствующего pppd почему-то 
> не происходит. По крайней мере у меня дома ifdown ppp0 не убивает pppd, 
У меня происходит, что интересно.

> Согласен, однако это также означает, что как максимум (как минимум не знаю --- 
> у нас ведь нет промежуточного состояния между up и down, типа unconf), после 
> свершения ifdown эти демоны должны быть сняты с выполнения. 
Кто оставляет pid-файл --- снимается. wpa_supplicant, к сожалению, не умеет.
Comment 14 Denis Ovsienko 2005-05-14 11:24:51 MSD
Какое у нас текущее состояние дел? Хоть что-то работает?
Comment 15 Yurix 2005-05-14 14:55:15 MSD
(In reply to comment #14)     
> Какое у нас текущее состояние дел? Хоть что-то работает?     
etcnet-0.7.3-alt1     
Пока нет изменений описанных в коментарии &#8470;9    
(https://bugzilla.altlinux.org/show_bug.cgi?id=6582#c9)    
Без этого wpa_supplicant не работает.  
 
Простенький патч, с которым wpa работает на моем ноуте прикладиваю  
(etcnet-0.7.3-alt1-wpa_supplicant.patch)  
 
По сравнению с тем, что в коментарии &#8470;9 здесь убрано local и добавлена проверка 
сществования конффайла, без которого запуск также бесмысленен, как и без 
присутствия бинарника wpa_supplicant. 
 
Comment 16 Yurix 2005-05-14 14:56:08 MSD
Created attachment 880 [details]
etcnet-0.7.3-alt1-wpa_supplicant
Comment 17 Yurix 2005-05-14 15:14:32 MSD
Created attachment 881 [details]
Catch the PID of wpa_supplicant [applied]

Конечно, хотелось бы, чтобы во время опускания интерфейса, опускался также и
процесс wpa_supplicant. Этот патчик создает PID файл. Остается предусматреть
где-нибудь вызов kill `cat /var/run/wpa_supplicant-$NAME.pid` . Попробовал
создать  destroy-wireless -- не действует...
Comment 18 Denis Ovsienko 2005-05-14 15:50:53 MSD
> Пока нет изменений описанных в коментарии #8470
Да-да. Забыл.

> По сравнению с тем, что в коментарии &#8470;9 здесь убрано local и добавлена
проверка 
> сществования конффайла, без которого запуск также бесмысленен, как и без 
> присутствия бинарника wpa_supplicant. 
Файл может называться немного по-другому.

destroy-wireless должен быть исполняемым. Но правильнее использовать
shutdown-wireless, чтобы supplicant уничтожался до расформирования интерфейса.
Сделано, смотрите.
http://pilot.org.ua/etcnet/files/etcnet-0.7.4-alt0.2.src.rpm
http://pilot.org.ua/etcnet/files/etcnet-0.7.4-alt0.2.noarch.rpm
Comment 19 Yurix 2005-05-14 16:47:30 MSD
(In reply to comment #18) 
 
> destroy-wireless должен быть исполняемым. Но правильнее использовать 
> shutdown-wireless, чтобы supplicant уничтожался до расформирования 
интерфейса. 
 
> http://pilot.org.ua/etcnet/files/etcnet-0.7.4-alt0.2.noarch.rpm 
 
Спасибо! 
 
Проверил -- теперь интерфейс стартует, однако по какой-то причине не убивает 
wpa_supplicant после ifdown. Кроме этого, при старте появилась ругань, которой 
раньше не было (invalid LINKDETECT value). Плюс, я бы всё-же убрал бы сообщения 
от wpa_supplicant в /dev/null, хотя вероятно они будут видны только при ручном 
запуске (в смысле при загрузки системы их не будет видно?). 
 
Я проверял так: 
 
# ifup air 
......ERROR: /etc/net/scripts/config-ipv4: invalid LINKDETECT value 
Trying to associate with 00:0f:a4:8b:ad:81 (SSID='SOME' freq=0 MHz) 
Associated with 00:0f:a4:8b:ad:81 
 
# ip addr show dev air 
5: air: <BROADCAST,MULTICAST,NOTRAILERS,UP> mtu 1500 qdisc pfifo_fast qlen 1000 
    link/ether 00:0e:d5:75:f2:0a brd ff:ff:ff:ff:ff:ff 
    inet 10.2.11.64/24 brd 10.2.11.255 scope global air 
 
# pgrep wpa 
11050 
 
# ifdown air 
# pgrep wpa 
11050 
# ip addr show dev air 
Device "air" does not exist. 
 
# NAME=air /etc/net/scripts/shutdown-wireless 
# pgrep wpa 
 
Только теперь умер. 
 
Comment 20 Denis Ovsienko 2005-05-14 17:37:02 MSD
> # NAME=air /etc/net/scripts/shutdown-wireless 
Скрипт должен называться shutdown-eth, я правлю. Вывод wpa_supplicant тоже подавлен.
Comment 21 Yurix 2005-05-14 17:44:56 MSD
(In reply to comment #20) 
> > # NAME=air /etc/net/scripts/shutdown-wireless  
> Скрипт должен называться shutdown-eth, я правлю. Вывод wpa_supplicant тоже 
подавлен. 
 
OK 
 
Тоже смотрю: 
 
Просмотр ifdown показал, что должен вызываться shutdown-eth, потом destroy-eth  
Первый не вызывается из-за того, что чуть выше stop_dhcp_client убивает клиента  
dhcp, который похоже сам делает интевейсу DOWN, а далее в ifdown идет проверка  
if iface_is_up $NAME; then и естественно пролетает. Так что убивать либо в  
destroy-eth, либо что-то придумывать. 
Comment 22 Yurix 2005-05-14 18:09:03 MSD
Created attachment 885 [details]
Fix for shutdown scripts not called due to iface has been downed by dhcpcd [applied]

dhcpcd will bring down the interface when stopping. To keep etcnet logics
to work (running shutdown scripts for example) we should bring it up again as
it is for static IPs.
Comment 23 Denis Ovsienko 2005-05-14 18:35:15 MSD
Дело в том, что dhcpcd при выходе снимает IFF_UP с интерфейса. По совести это
нужно контролировать флагом командной строки.
Comment 24 Yurix 2005-05-14 18:44:31 MSD
(In reply to comment #23) 
> Дело в том, что dhcpcd при выходе снимает IFF_UP с интерфейса. По совести это 
> нужно контролировать флагом командной строки. 
Полностью согласен. 
 
Порылся в руководстве на dhcpcd -- таких флагов на данный момент нет. 
Видимо, на данный момент меньшее зло делать UP самим. 
 
 
Comment 25 Denis Ovsienko 2005-05-18 19:35:06 MSD
С wpa_supplicant разобрались?
Comment 26 Yurix 2005-05-19 16:43:59 MSD
(In reply to comment #25)  
> С wpa_supplicant разобрались?  
 
Похоже что да. К самому функционалу wpa в etcnet вопросов теперь нет. Ну кроме 
того, что он не снимается из-за dhcpcd... :) 
  
Comment 27 Denis Ovsienko 2005-06-24 12:47:03 MSD
Пока закроем...