ifconfig - баг/фича ?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

ifconfig - баг/фича ?

Anton Maksimenkov
Здраствуйте, openbsd.

Прикол поймал в /etc/hostname.X. Во-первых, с ifconfig. Делаю алиас
для интерфейса:
---------------------------------------------------------------------
# ifconfig le1
le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:50:56:fd:46:77
        inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255

# ifconfig le1 alias 192.168.0.1 255.255.255.255

# ifconfig le1
le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:50:56:fd:46:77
        inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255
        inet6 fe80::250:56ff:fefd:4677%le1 prefixlen 64 scopeid 0x1
        inet 192.168.0.1 netmask 0xffffff00 broadcast 255.255.255.255

Опс... Оказывается из 2-х параметров второй, без указания "что это
такое", интепретируется НЕ как netmask, А как broadcast.
Даже если указать 3 параметра будет НЕправильно:
---------------------------------------------------------------------
# ifconfig le1 alias 192.168.0.1 255.255.255.255 192.168.0.1
# ifconfig le1
le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:50:56:fd:46:77
        inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255
        inet6 fe80::250:56ff:fefd:4677%le1 prefixlen 64 scopeid 0x1
        inet 192.168.0.1 netmask 0xffffff00 broadcast 255.255.255.255

Правильный вариант - перед вторым параметром поставить "netmask"
(перед третьим по ifconfig(8) надо "broadcast", но ПОНИМАЕТ и так)
---------------------------------------------------------------------
# ifconfig le1 alias 192.168.0.1 netmask 255.255.255.255 192.168.0.1
# ifconfig le1
le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:50:56:fd:46:77
        inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255
        inet6 fe80::250:56ff:fefd:4677%le1 prefixlen 64 scopeid 0x1
        inet 192.168.0.1 netmask 0xffffffff broadcast 192.168.0.1


Началось исследование после того как в /etc/hostname.X прописал 2
параметра алиасу:

inet 172.16.0.10 255.255.255.0 NONE
inet alias 192.168.0.1 255.255.255.255

Результат - маска /24, broadcast 255.255.255.255. То есть НЕ ТО ЧТО
ОЖИДАЛОСЬ.

В hostname.if(5) сказано
..
     Regular ipv4 network setup:

           addr_family [alias] addr netmask broadcast_addr options
           dest dest_addr
..
 inet 10.0.1.12 255.255.255.0 10.0.1.255 media 100baseTX description Uplink
      inet alias 10.0.1.13 255.255.255.255 10.0.1.13
      inet alias 10.0.1.14 255.255.255.255 NONE
      inet alias 10.0.1.15 255.255.255.255
      inet alias 10.0.1.16 0xffffffff
..
           netmask
                   The optional network mask for the interface, i.e.,
                   255.255.255.0.

           broadcast_addr
                   The optional broadcast address for the interface, i.e.,
                   190.191.192.255
..
Мною это было интерпретировано как "можно указать только IP для
алиаса" (предположил, что маску оно возьмёт с основного, а бродкаст
назначит сам IP), "опционально можно указать маску", "опционально
можно указать broadcast".
 Из примерчиков можно подумать, что можно указать 2 параметра - второй
будет маской. ОДНАКО реально он будет интерпретирован как БРОДКАСТ, А
НЕ МАСКА. То есть те 255.255.255.255 (для 10.0.1.15) и 0xffffff (для
10.0.1.16) будут бродкастами. Проверено на 3.7, на 2-х машинах ;-)

Возникает вопрос - это моё больное воображение неправильно
воспринимает то что написано (написано, кстати, двойственно
получается), либо это "баг" такой в ifconfig'овской интерпретации
аргументов?

--
engineer


Reply | Threaded
Open this post in threaded view
|

Re: ifconfig - баг/=?koi8-r?Q?=C6=C9=DE=C1=20=3F?=

Maxim P.Yutkin

вот для маски 255.255.255.255
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
..................................................................
        inet 10.3.82.3 netmask 0xffffffff broadcast 10.3.82.3
        inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
в hostname.X прописано:
inet 10.3.81.2 255.255.0.0 NONE
inet alias 10.3.82.3 255.255.255.255 NONE

а
вот для маски 255.255.0.0
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...................................................................
        inet6 fe80::200:21ff:fe2b:4b8f%rl0 prefixlen 64 scopeid 0x1
        inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
        inet 10.3.82.3 netmask 0xffff0000 broadcast 10.3.255.255

в hostname.X прописано:
inet 10.3.81.2 255.255.0.0 NONE
inet alias 10.3.82.3 255.255.0.0 NONE

вроде все верно



> Здраствуйте, openbsd.
>
> Прикол поймал в /etc/hostname.X. Во-первых, с ifconfig. Делаю алиас
> для интерфейса:
> ---------------------------------------------------------------------
> # ifconfig le1
> le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         address: 00:50:56:fd:46:77
>         inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255
>
> # ifconfig le1 alias 192.168.0.1 255.255.255.255
>
> # ifconfig le1
> le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         address: 00:50:56:fd:46:77
>         inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255
>         inet6 fe80::250:56ff:fefd:4677%le1 prefixlen 64 scopeid 0x1
>         inet 192.168.0.1 netmask 0xffffff00 broadcast 255.255.255.255
>
> Опс... Оказывается из 2-х параметров второй, без указания "что это
> такое", интепретируется НЕ как netmask, А как broadcast.
> Даже если указать 3 параметра будет НЕправильно:
> ---------------------------------------------------------------------
> # ifconfig le1 alias 192.168.0.1 255.255.255.255 192.168.0.1
> # ifconfig le1
> le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         address: 00:50:56:fd:46:77
>         inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255
>         inet6 fe80::250:56ff:fefd:4677%le1 prefixlen 64 scopeid 0x1
>         inet 192.168.0.1 netmask 0xffffff00 broadcast 255.255.255.255
>
> Правильный вариант - перед вторым параметром поставить "netmask"
> (перед третьим по ifconfig(8) надо "broadcast", но ПОНИМАЕТ и так)
> ---------------------------------------------------------------------
> # ifconfig le1 alias 192.168.0.1 netmask 255.255.255.255 192.168.0.1
> # ifconfig le1
> le1: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         address: 00:50:56:fd:46:77
>         inet 172.16.0.10 netmask 0xffffff00 broadcast 255.255.255.255
>         inet6 fe80::250:56ff:fefd:4677%le1 prefixlen 64 scopeid 0x1
>         inet 192.168.0.1 netmask 0xffffffff broadcast 192.168.0.1
>
>
> Началось исследование после того как в /etc/hostname.X прописал 2
> параметра алиасу:
>
> inet 172.16.0.10 255.255.255.0 NONE
> inet alias 192.168.0.1 255.255.255.255
>
> Результат - маска /24, broadcast 255.255.255.255. То есть НЕ ТО ЧТО
> ОЖИДАЛОСЬ.
>
> В hostname.if(5) сказано
> ...
>      Regular ipv4 network setup:
>
>            addr_family [alias] addr netmask broadcast_addr options
>            dest dest_addr
> ...
>  inet 10.0.1.12 255.255.255.0 10.0.1.255 media 100baseTX description Uplink
>       inet alias 10.0.1.13 255.255.255.255 10.0.1.13
>       inet alias 10.0.1.14 255.255.255.255 NONE
>       inet alias 10.0.1.15 255.255.255.255
>       inet alias 10.0.1.16 0xffffffff
> ...
>            netmask
>                    The optional network mask for the interface, i.e.,
>                    255.255.255.0.
>
>            broadcast_addr
>                    The optional broadcast address for the interface, i.e.,
>                    190.191.192.255
> ...
> Мною это было интерпретировано как "можно указать только IP для
> алиаса" (предположил, что маску оно возьмёт с основного, а бродкаст
> назначит сам IP), "опционально можно указать маску", "опционально
> можно указать broadcast".
>  Из примерчиков можно подумать, что можно указать 2 параметра - второй
> будет маской. ОДНАКО реально он будет интерпретирован как БРОДКАСТ, А
> НЕ МАСКА. То есть те 255.255.255.255 (для 10.0.1.15) и 0xffffff (для
> 10.0.1.16) будут бродкастами. Проверено на 3.7, на 2-х машинах ;-)
>
> Возникает вопрос - это моё больное воображение неправильно
> воспринимает то что написано (написано, кстати, двойственно
> получается), либо это "баг" такой в ifconfig'овской интерпретации
> аргументов?
>
> --
> engineer
>
>

----------------------------------
----------------------------------


Reply | Threaded
Open this post in threaded view
|

Re[2]: ifconfig - баг/фича ?

Anton Maksimenkov
Hi, Maxim.

> вот для маски 255.255.255.255
> rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
> ..................................................................
>         inet 10.3.82.3 netmask 0xffffffff broadcast 10.3.82.3
>         inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
> в hostname.X прописано:
> inet 10.3.81.2 255.255.0.0 NONE
> inet alias 10.3.82.3 255.255.255.255 NONE
> вроде все верно

Перечитай фрагменты (ключевые слова - "2 параметра"):

>> Началось исследование после того как в /etc/hostname.X прописал 2
>> параметра алиасу:
>> inet 172.16.0.10 255.255.255.0 NONE
>> inet alias 192.168.0.1 255.255.255.255
>> Результат - маска /24, broadcast 255.255.255.255. То есть НЕ ТО ЧТО
>> ОЖИДАЛОСЬ.
>>
>> В hostname.if(5) сказано
>> ...
>>  inet 10.0.1.12 255.255.255.0 10.0.1.255 media 100baseTX description Uplink
..
>>       inet alias 10.0.1.15 255.255.255.255
>>       inet alias 10.0.1.16 0xffffffff
..
>>  Из примерчиков можно подумать, что можно указать 2 параметра - второй
>> будет маской. ОДНАКО реально он будет интерпретирован как БРОДКАСТ, А
>> НЕ МАСКА. То есть те 255.255.255.255 (для 10.0.1.15) и 0xffffff (для
>> 10.0.1.16) будут бродкастами. Проверено на 3.7, на 2-х машинах ;-)

--
engineer


Reply | Threaded
Open this post in threaded view
|

Re[3]: ifconfig - баг/=?koi8-r?Q?=C6=C9=DE=C1=20=3F?=

Maxim P.Yutkin
аналогично:

rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:00:21:2b:4b:8f
        media: Ethernet autoselect (100baseTX full-duplex)
        status: active
        inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
        inet6 fe80::200:21ff:fe2b:4b8f%rl0 prefixlen 64 scopeid 0x1
        inet 10.3.82.3 netmask 0xffffffff broadcast 10.3.82.3

в хостнаме
inet 10.3.81.2 255.255.0.0 NONE
inet alias 10.3.82.3 255.255.255.255 10.3.82.3

rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:00:21:2b:4b:8f
        media: Ethernet autoselect (100baseTX full-duplex)
        status: active
        inet6 fe80::200:21ff:fe2b:4b8f%rl0 prefixlen 64 scopeid 0x1
        inet 10.3.82.3 netmask 0xffff0000 broadcast 10.3.255.255
        inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255

в хостнаме

inet 10.3.81.2 255.255.0.0 NONE
inet alias 10.3.82.3 255.255.0.0 10.3.255.255


если поднимать ifconfig'ом
то пишется насколько я понимаю вот так
ifconfig IF inet IP netmask mask итп


или я опять чего то не понял?

>
> Hi, Maxim.
>
> > вот для маски 255.255.255.255
> > rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
> > ..................................................................
> >         inet 10.3.82.3 netmask 0xffffffff broadcast 10.3.82.3
> >         inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
> > в hostname.X прописано:
> > inet 10.3.81.2 255.255.0.0 NONE
> > inet alias 10.3.82.3 255.255.255.255 NONE
> > вроде все верно
>
> Перечитай фрагменты (ключевые слова - "2 параметра"):
>
> >> Началось исследование после того как в /etc/hostname.X прописал 2
> >> параметра алиасу:
> >> inet 172.16.0.10 255.255.255.0 NONE
> >> inet alias 192.168.0.1 255.255.255.255
> >> Результат - маска /24, broadcast 255.255.255.255. То есть НЕ ТО ЧТО
> >> ОЖИДАЛОСЬ.
> >>
> >> В hostname.if(5) сказано
> >> ...
> >>  inet 10.0.1.12 255.255.255.0 10.0.1.255 media 100baseTX description Uplink
> ...
> >>       inet alias 10.0.1.15 255.255.255.255
> >>       inet alias 10.0.1.16 0xffffffff
> ...
> >>  Из примерчиков можно подумать, что можно указать 2 параметра - второй
> >> будет маской. ОДНАКО реально он будет интерпретирован как БРОДКАСТ, А
> >> НЕ МАСКА. То есть те 255.255.255.255 (для 10.0.1.15) и 0xffffff (для
> >> 10.0.1.16) будут бродкастами. Проверено на 3.7, на 2-х машинах ;-)
>
> --
> engineer
>
>

----------------------------------
----------------------------------


Reply | Threaded
Open this post in threaded view
|

Re[4]: ifconfig - баг/фича ?

Anton Maksimenkov
Hi, Maxim.

Опять 25: у тебя указано 3 параметра - ИП, маска, бродкаст (NONE это
"вычислить бродкаст по адресу и маске и подставить сюда"). Это
прокатывает. Попробуй укажи 2 параметра - ИП и маску. Я ж те написал:
"2 параметра". Два. У тебя 3. Три это не два. С тремя работает. С
двумя тоже работает, но не в том смысле, который можно было бы
предположить, сравнивая срочки из hostname.if(5):

inet alias 10.0.1.14 255.255.255.255 NONE
inet alias 10.0.1.15 255.255.255.255

В первом случае 255.255.255.255 напоминает маску и интерпретируется
как маска. Во втором случае 255.255.255.255 тоже напоминает маску _НО_
будет использовано как broadcast, а маска будет взята с основного ИП.
Я хотел уточнить - только я избежал правильного понимания мана в этой
части, а также того что
..
   addr_family [alias] addr netmask broadcast_addr
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   options dest dest_addr

           addr    The optional address that belongs to the interface
                   190.191.192.1 or fe80:2::1.
                   ...
           netmask
                   The optional network mask for the interface, i.e.,
                   255.255.255.0.

           broadcast_addr
                   The optional broadcast address for the interface, i.e.,
                   190.191.192.255
..
Обычно предполагается, что если оба "optional",

prog -x param_1 [[param_2] param3]

в случае вызова только с 2-мя параметрами (1-й и "опциональный" 2-й)

# prog -x p1 p2

программа считает, что param_2 = p2. А param_3 вроде как не задан.

В случае с ifconfig получается, что p2 принимается за param_3, и
считается, что param_2 как бы не задан.



Может я тоже не вполне ясно выразил. Смысл моего рассказа был не в
том, чтобы "покажите мне как надо", а в том, что я поймал такой момент
и подумал, что это ошибка, но, перед тем как писать буржуям, решил
осведомиться у соплеменников не находят ли они, что это "фича".



> аналогично:
> rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         address: 00:00:21:2b:4b:8f
>         media: Ethernet autoselect (100baseTX full-duplex)
>         status: active
>         inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
>         inet6 fe80::200:21ff:fe2b:4b8f%rl0 prefixlen 64 scopeid 0x1
>         inet 10.3.82.3 netmask 0xffffffff broadcast 10.3.82.3
> в хостнаме
> inet 10.3.81.2 255.255.0.0 NONE
> inet alias 10.3.82.3 255.255.255.255 10.3.82.3
> rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         address: 00:00:21:2b:4b:8f
>         media: Ethernet autoselect (100baseTX full-duplex)
>         status: active
>         inet6 fe80::200:21ff:fe2b:4b8f%rl0 prefixlen 64 scopeid 0x1
>         inet 10.3.82.3 netmask 0xffff0000 broadcast 10.3.255.255
>         inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
> в хостнаме
> inet 10.3.81.2 255.255.0.0 NONE
> inet alias 10.3.82.3 255.255.0.0 10.3.255.255
> если поднимать ifconfig'ом
> то пишется насколько я понимаю вот так
> ifconfig IF inet IP netmask mask итп
> или я опять чего то не понял?
>>
>> Hi, Maxim.
>>
>> > вот для маски 255.255.255.255
>> > rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>> >
>> ..................................................................
>> >         inet 10.3.82.3 netmask 0xffffffff broadcast 10.3.82.3
>> >         inet 10.3.81.2 netmask 0xffff0000 broadcast 10.3.255.255
>> > в hostname.X прописано:
>> > inet 10.3.81.2 255.255.0.0 NONE
>> > inet alias 10.3.82.3 255.255.255.255 NONE
>> > вроде все верно
>>
>> Перечитай фрагменты (ключевые слова - "2 параметра"):
>>
>> >> Началось исследование после того как в /etc/hostname.X прописал 2
>> >> параметра алиасу:
>> >> inet 172.16.0.10 255.255.255.0 NONE
>> >> inet alias 192.168.0.1 255.255.255.255
>> >> Результат - маска /24, broadcast 255.255.255.255. То есть НЕ ТО ЧТО
>> >> ОЖИДАЛОСЬ.
>> >>
>> >> В hostname.if(5) сказано
>> >> ...
>> >>  inet 10.0.1.12 255.255.255.0 10.0.1.255 media 100baseTX description Uplink
>> ...
>> >>       inet alias 10.0.1.15 255.255.255.255
>> >>       inet alias 10.0.1.16 0xffffffff
>> ...
>> >>  Из примерчиков можно подумать, что можно указать 2 параметра - второй
>> >> будет маской. ОДНАКО реально он будет интерпретирован как БРОДКАСТ, А
>> >> НЕ МАСКА. То есть те 255.255.255.255 (для 10.0.1.15) и 0xffffff (для
>> >> 10.0.1.16) будут бродкастами. Проверено на 3.7, на 2-х машинах ;-)
>>
>> --
>> engineer
>>
>>

> ----------------------------------
> ----------------------------------




--
engineer


Reply | Threaded
Open this post in threaded view
|

Re: ifconfig - баг/фича ?

BSW-2
[hidden email] пишет:
> prog -x param_1 [[param_2] param3]
>
> в случае вызова только с 2-мя параметрами (1-й и "опциональный" 2-й)
>
> # prog -x p1 p2
>
> программа считает, что param_2 = p2. А param_3 вроде как не задан.
Раскрывай скобки медленно:
'prog -x param_1 [[param_2] param3]' означает
или 'prog -x param_1'
или 'prog -x param_1 [param_2] param3' (т.е. 'prog -x param_1 param3')
или 'prog -x param_1 param_2 param3'


Reply | Threaded
Open this post in threaded view
|

Re[2]: ifconfig - баг/фича ?

Anton Maksimenkov
Hi, BSW.

> [hidden email] пишет:
>> prog -x param_1 [[param_2] param3]
>>
>> в случае вызова только с 2-мя параметрами (1-й и "опциональный" 2-й)
>>
>> # prog -x p1 p2
>>
>> программа считает, что param_2 = p2. А param_3 вроде как не задан.
> Раскрывай скобки медленно:
> 'prog -x param_1 [[param_2] param3]' означает
> или 'prog -x param_1'
> или 'prog -x param_1 [param_2] param3' (т.е. 'prog -x param_1 param3')
> или 'prog -x param_1 param_2 param3'

Сорри, проглючил :-)) Это схема, по которой ifconfig раскрывает, я её
в голове держал, вот вышло что всё запуталось.

По идее так  'prog -x param_1 [param_2 [param3[...]]]'. Что находит
отражение в rrdgraph(1) пакета rrdtool:
..
[VRULE:time#rrggbb[:legend]] [LINE{1|2|3}:vname[#rrggbb[:legend]]]
[AREA:vname[#rrggbb[:legend]]] [STACK:vname[#rrggbb[:legend]]]
..

Вобщем смысл в том, что ни одна из этих схем "явно не описана", и из
hostname.if(5) можно представить и так и эдак.

Похоже флейм получается...
--
engineer