<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>14837</bug_id>
          
          <creation_ts>2008-03-09 13:21:46 +0300</creation_ts>
          <short_desc>udev неправильно сохраняет информацию о failed events</short_desc>
          <delta_ts>2009-12-05 00:59:33 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>udev</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>11786</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Denis Ovsienko">pilot</reporter>
          <assigned_to name="Sergey Vlasov">vsu</assigned_to>
          <cc>arseny</cc>
    
    <cc>ender</cc>
    
    <cc>mike</cc>
    
    <cc>rider</cc>
    
    <cc>shaba</cc>
    
    <cc>shrek</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65353</commentid>
    <comment_count>0</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-03-09 13:21:46 +0300</bug_when>
    <thetext>При старте системы после первого запуска udev в каталоге /dev/.udev/failed
оказывается набор файлов вида &quot;%2fclass%2fnet%2feth0&quot;. Названия, естественно,
идут, как получилось при загрузке модулей. После этого в какой-то момент
выполняется запуск службы network, которая часть или все из них может
переименовать в совершенно другие имена, а уже после запускается udevd-final. Он
для сгенерированных failed events предпринимает попытку их обработать, для чего
использует закодированное в имени файла старое имя. В результате очень просто
попытаться обработать события не для тех интерфейсов, которые к этому моменту
будут представлены в системе.

Решение этой проблемы то же, которое я когда-то сделал для cardmgr: сохранять
ifindex. Для данного случая можно дописывать его в конец имени файла, чтобы
потом ф-я scan_failed() извлекала именно ifindex, игнорируя имя интерфейса, и
передавала в device_list_insert() имя, восстановленное по ifindex. Для
преобразования ifname в ifindex и назад удобна libnetlink.

После решения этой проблемы станет возможным использование takeover в etcnet,
что в свою очередь разблокирует ликвидацию ещё нескольких накопившихся в системе
костылей.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65390</commentid>
    <comment_count>1</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2008-03-10 13:09:36 +0300</bug_when>
    <thetext>Очень не хочется тащить libnetlink в udev - в частности, из-за использования его
в initramfs.

В новой версии udev можно решить эту проблему другим способом - передавать
окончательное значение devpath через файл в /dev/.udev/queue, создаваемый в
процессе обработки события. Правда, такой вариант будет правильно работать
только при условии переименования интерфейсов средствами udev - например, так,
как это сделано в 19-udev-ifrename.rules в пакете ifrename (точнее, сейчас этот
файл там, похоже, не совсем правильный). В etcnet нужно добавить скрипт, который
только выдаёт в stdout имя, которое должен получить интерфейс, но не пытается
переименовывать его самостоятельно (это также исправит другую проблему - если
переименование интерфейсов выполняется в обход udev, неверные имена интерфейсов
от udev попадают в hal).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65397</commentid>
    <comment_count>2</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2008-03-10 14:25:34 +0300</bug_when>
    <thetext>Имя, которое должно получиться, можно получить вызовом ifrename с опцией -D. 
Но я бы хотел в конечном итоге видеть систему, в которой udev не трогает имена
интерфейсов вообще.

Касательно libnetlink: проитерироваться по интерфейсам можно и без неё, сишный
код в этом отношении не связан ничем. Могу поискать образец, если нужно.
Касательно HAL: предлагаю передавать ему ifindex вместо имени, если это
возможно. Если же он не оперирует индексом вообще, то это плохо.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65400</commentid>
    <comment_count>3</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2008-03-10 15:21:12 +0300</bug_when>
    <thetext>(In reply to comment #2)
&gt; Но я бы хотел в конечном итоге видеть систему, в которой udev не трогает имена
&gt; интерфейсов вообще.

Похоже, в апстриме подход полностью противоположный - никто, кроме udev, не
должен трогать имена интерфейсов.

&gt; Касательно libnetlink: проитерироваться по интерфейсам можно и без неё, сишный
&gt; код в этом отношении не связан ничем. Могу поискать образец, если нужно.

Понятно, что кусок кода можно просто скопировать, просто это лишние зависимости
от SUBSYSTEM==&quot;net&quot; в тех местах, где их раньше не было.

&gt; Касательно HAL: предлагаю передавать ему ifindex вместо имени, если это
&gt; возможно. Если же он не оперирует индексом вообще, то это плохо.

Там есть ещё и дублирование устройств (Bug #14015 - что лично я считаю багом в
hal, а не в udev). В принципе linux.ifindex в hal есть, но в devpath всё равно
входит имя интерфейса.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93982</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2009-06-30 21:03:05 +0400</bug_when>
    <thetext>И что с этим теперь ввиду /etc/udev/rules.d/70-persistent-net.rules и закрытой bug #19313?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103862</commentid>
    <comment_count>5</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2009-12-05 00:59:06 +0300</bug_when>
    <thetext>осталось смириться</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>