Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ipfw + ng_ipfw + ng_car + high load = kernel panic

135 views
Skip to first unread message

Max Irgiznov

unread,
Mar 8, 2009, 6:51:40 PM3/8/09
to
Hello All!

Играюсь с связкой ipfw + ng_ipfw + ng_car

всё просто, все удобно но нткнулся на панику. на моем стенде воспроизводится
стабильно под нагрузкой(ping -f с другой машины, закачка по http).

несколько раз выполняем /etc/rc.fw и...
стабильно ловится следущее:

# kgdb kernel.debug /var/crash/vmcore.0
GNU gdb 6.1.1 [FreeBSD]

Unread portion of the kernel message buffer:
ipfw: ouch!, skip past end of rules, denying packet
ipfw: ouch!, skip past end of rules, denying packet


Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address = 0x94
fault code = supervisor read data, page not present
instruction pointer = 0x8:0xffffffff805c7346
stack pointer = 0x10:0xfffffffe80022480
frame pointer = 0x10:0x0
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 13 (swi1: net)
trap number = 12
panic: page fault
cpuid = 0
Uptime: 5m6s
Physical memory: 1011 MB
Dumping 82 MB: 67 51 35 19 3


(kgdb) list *0xffffffff805c7346
0xffffffff805c7346 is in ipfw_chk (/usr/src/sys/netinet/ip_fw2.c:2516).
2511 ipfw_insn *cmd;
2512 uint32_t tablearg = 0;
2513 int l, cmdlen, skip_or; /* skip rest of OR block */
2514
2515 again:
2516 if (set_disable & (1 << f->set) )
2517 continue;
2518
2519 skip_or = 0;
2520 for (l = f->cmd_len, cmd = f->cmd ; l > 0 ;

# uname -a
FreeBSD vm2.local 7.1-STABLE FreeBSD 7.1-STABLE #4: Mon Mar 9 00:52:52 MSK
2009 xe...@vm2.local:/usr/obj/usr/src/sys/VM2 amd64

ядро копия GENERIC, настроект никаких, кроме: net.inet.ip.fw.one_pass=0

скрипт создающий тестовые ноды и правила:

-=cp Fake Clipboard .=-
# cat /etc/rc.fw
#!/bin/sh

fwcmd="/sbin/ipfw -q"
ngctl="/usr/sbin/ngctl"
$fwcmd flush

users=100

$fwcmd table $users flush
$fwcmd table $users add 10.10.0.200/32 3
$fwcmd table $users add 10.10.0.254/32 6

$fwcmd add 700 netgraph tablearg ip from any to "table($users)"
$fwcmd add 700 netgraph tablearg ip from "table($users)" to any

pipes="32 64 128 256 384 512"

number=1
mode=3

for pipe in $pipes; do

lnum=`expr $number + 100`
bw=`expr $pipe \* 1000`
cbs=`expr $bw / 8`
ebs=`expr $bw / 8`

$ngctl shutdown "shape$pipe":

$ngctl mkpeer ipfw: car $number upper
$ngctl name ipfw:$number "shape$pipe"
$ngctl connect "shape$pipe": ipfw: lower $lnum
$ngctl msg "shape$pipe": setconf { upstream={ cbs=$cbs ebs=$ebs cir=$bw
greenAction=1 yellowAction=1 redAction=2 mode=$mode } downstream={ cbs=$cbs
ebs=$ebs cir=$bw greenAction=1 yellowAction=1 redAction=2 mode=$mode } }

number=`expr $number + 1`
done
-=EOF=-


PS send-pr или я где виноват?

--
Yours faithfully Max Irgiznov

Max Irgiznov

unread,
Mar 9, 2009, 2:52:12 AM3/9/09
to
Hello Max!

09 мар 09 01:51, I wrote to All:

MI> всё просто, все удобно но нткнулся на панику. на моем стенде
MI> воспроизводится стабильно под нагрузкой(ping -f с другой машины,
MI> закачка по http).

MI> несколько раз выполняем /etc/rc.fw и...
если код разнести по разным скриптам, то под нагрузкой не дохнет...
а дохнет если исправить номер шейпера и перезагрузить правила. :(

на i386 7.1-PRERELEASE тоже воспроизвелось.

Vadim Goncharov

unread,
Mar 10, 2009, 8:55:11 AM3/10/09
to
Hi Max Irgiznov!

On Mon, 09 Mar 2009 01:51:40 +0300; Max Irgiznov wrote about 'ipfw + ng_ipfw + ng_car + high load = kernel panic':

MI> Играюсь с связкой ipfw + ng_ipfw + ng_car

MI> всё просто, все удобно но нткнулся на панику. на моем стенде воспроизводится
MI> стабильно под нагрузкой(ping -f с другой машины, закачка по http).

MI> несколько раз выполняем /etc/rc.fw и...
MI> стабильно ловится следущее:

...и оно дописывает в конец правил, да? В смысле, пакет большее количество штук
проходит.

MI> # kgdb kernel.debug /var/crash/vmcore.0
MI> GNU gdb 6.1.1 [FreeBSD]

MI> Unread portion of the kernel message buffer:
MI> ipfw: ouch!, skip past end of rules, denying packet
MI> ipfw: ouch!, skip past end of rules, denying packet

MI> Fatal trap 12: page fault while in kernel mode
MI> cpuid = 0; apic id = 00
MI> fault virtual address = 0x94
MI> fault code = supervisor read data, page not present
MI> instruction pointer = 0x8:0xffffffff805c7346
MI> stack pointer = 0x10:0xfffffffe80022480
MI> frame pointer = 0x10:0x0
MI> code segment = base 0x0, limit 0xfffff, type 0x1b
MI> = DPL 0, pres 1, long 1, def32 0, gran 1
MI> processor eflags = interrupt enabled, resume, IOPL = 0
MI> current process = 13 (swi1: net)
MI> trap number = 12

MI> (kgdb) list *0xffffffff805c7346
MI> 0xffffffff805c7346 is in ipfw_chk (/usr/src/sys/netinet/ip_fw2.c:2516).
MI> 2511 ipfw_insn *cmd;
MI> 2512 uint32_t tablearg = 0;
MI> 2513 int l, cmdlen, skip_or; /* skip rest of OR block */
MI> 2514
MI> 2515 again:
MI> 2516 if (set_disable & (1 << f->set) )
MI> 2517 continue;
MI> 2518
MI> 2519 skip_or = 0;
MI> 2520 for (l = f->cmd_len, cmd = f->cmd ; l > 0 ;

bt блин, bt где? trap 12 в сетевых вещах почти всегда - переполнение стека.
Вообще, с последнего адреса толку мало, проблема обычно лежит дальше.

MI> # uname -a
MI> FreeBSD vm2.local 7.1-STABLE FreeBSD 7.1-STABLE #4: Mon Mar 9 00:52:52 MSK
MI> 2009 xe...@vm2.local:/usr/obj/usr/src/sys/VM2 amd64

MI> ядро копия GENERIC, настроект никаких, кроме: net.inet.ip.fw.one_pass=0

Ага, ессно.

MI> скрипт создающий тестовые ноды и правила:

MI> -=cp Fake Clipboard .=-
MI> # cat /etc/rc.fw
MI> #!/bin/sh

MI> fwcmd="/sbin/ipfw -q"
MI> ngctl="/usr/sbin/ngctl"
MI> $fwcmd flush

MI> users=100

MI> $fwcmd table $users flush
MI> $fwcmd table $users add 10.10.0.200/32 3
MI> $fwcmd table $users add 10.10.0.254/32 6

MI> $fwcmd add 700 netgraph tablearg ip from any to "table($users)"
MI> $fwcmd add 700 netgraph tablearg ip from "table($users)" to any

MI> pipes="32 64 128 256 384 512"

MI> number=1
MI> mode=3

MI> for pipe in $pipes; do

MI> lnum=`expr $number + 100`
MI> bw=`expr $pipe \* 1000`
MI> cbs=`expr $bw / 8`
MI> ebs=`expr $bw / 8`

MI> $ngctl shutdown "shape$pipe":

MI> $ngctl mkpeer ipfw: car $number upper
MI> $ngctl name ipfw:$number "shape$pipe"
MI> $ngctl connect "shape$pipe": ipfw: lower $lnum
MI> $ngctl msg "shape$pipe": setconf { upstream={ cbs=$cbs ebs=$ebs cir=$bw
MI> greenAction=1 yellowAction=1 redAction=2 mode=$mode } downstream={ cbs=$cbs
MI> ebs=$ebs cir=$bw greenAction=1 yellowAction=1 redAction=2 mode=$mode } }

MI> number=`expr $number + 1`
MI> done
MI> -=EOF=-

Аа, ну оно создает по несколько одинаковых правил, и пакет по ним по всем идет.

MI> PS send-pr или я где виноват?

Как бы не то что бы ты виноват, но не помогут.

--
WBR, Vadim Goncharov. ICQ#166852181 mailto:vadim_n...@mail.ru
[Moderator of RU.ANTI-ECOLOGY][FreeBSD][http://antigreen.org][LJ:/nuclight]

Max Irgiznov

unread,
Mar 10, 2009, 2:27:06 PM3/10/09
to
Hello Vadim!

10 мар 09 15:55, you wrote to me:

MI>> Играюсь с связкой ipfw + ng_ipfw + ng_car

MI>> всё просто, все удобно но нткнулся на панику. на моем стенде

MI>> воспроизводится стабильно под нагрузкой(ping -f с другой машины,
MI>> закачка по http).

MI>> несколько раз выполняем /etc/rc.fw и...
MI>> стабильно ловится следущее:

VG> ...и оно дописывает в конец правил, да? В смысле, пакет большее
VG> количество штук проходит.
нет, число правил не меняется... письмом ранее я говорил, что можно сменить
номер шейпера или добавить в таблицу сразу много адресов или поправить
правила(порты добавить\убрать)


VG> bt блин, bt где? trap 12 в сетевых вещах почти всегда - переполнение
VG> стека. Вообще, с последнего адреса толку мало, проблема обычно лежит
VG> дальше.
забыл :( не вопрос:

(kgdb) bt
#0 doadump () at pcpu.h:195
#1 0x0000000000000000 in ?? ()
#2 0xffffffff804d8803 in boot (howto=260)
at /usr/src/sys/kern/kern_shutdown.c:418
#3 0xffffffff804d8ab5 in panic (fmt=Variable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:574
#4 0xffffffff807d791e in trap_fatal (frame=0xfffffffe800223d0, eva=0)
at /usr/src/sys/amd64/amd64/trap.c:764
#5 0xffffffff807d8662 in trap (frame=0xfffffffe800223d0)
at /usr/src/sys/amd64/amd64/trap.c:565
#6 0xffffffff807bc3ce in calltrap ()
at /usr/src/sys/amd64/amd64/exception.S:209
#7 0xffffffff805c7346 in ipfw_chk (args=0xfffffffe80022850)
at /usr/src/sys/netinet/ip_fw2.c:2516
#8 0xffffffff805caa92 in ipfw_check_out (arg=Variable "arg" is not available.
)
at /usr/src/sys/netinet/ip_fw_pfil.c:248
#9 0xffffffff8058046c in pfil_run_hooks (ph=Variable "ph" is not available.
) at /usr/src/sys/net/pfil.c:78
#10 0xffffffff805cf51f in ip_output (m=0xffffff0001c44c00, opt=Variable "opt"
is not available.
)
at /usr/src/sys/netinet/ip_output.c:443
#11 0xffffffff805ad840 in ng_apply_item (node=0xffffff00013ab100,
item=0xffffff0004272be0, rw=0) at /usr/src/sys/netgraph/ng_base.c:2331
#12 0xffffffff805aedca in ngintr () at /usr/src/sys/netgraph/ng_base.c:3291
#13 0xffffffff8057ee25 in swi_net (dummy=Variable "dummy" is not available.
) at /usr/src/sys/net/netisr.c:254
#14 0xffffffff804b7a2f in ithread_loop (arg=Variable "arg" is not available.
)
at /usr/src/sys/kern/kern_intr.c:1088
---Type <return> to continue, or q <return> to quit---
#15 0xffffffff804b4800 in fork_exit (
callout=0xffffffff804b7870 <ithread_loop>, arg=0xffffff000118eb40,
frame=0xfffffffe80022c80) at /usr/src/sys/kern/kern_fork.c:810
#16 0xffffffff807bc79e in fork_trampoline ()
at /usr/src/sys/amd64/amd64/exception.S:455

MI>> # uname -a
MI>> FreeBSD vm2.local 7.1-STABLE FreeBSD 7.1-STABLE #4: Mon Mar 9

MI>> 00:52:52 MSK 2009 xe...@vm2.local:/usr/obj/usr/src/sys/VM2
MI>> amd64

MI>> ядро копия GENERIC, настроект никаких, кроме:

MI>> net.inet.ip.fw.one_pass=0
VG> Ага, ессно.


MI>> скрипт создающий тестовые ноды и правила:

[...skipped...]

VG> Аа, ну оно создает по несколько одинаковых правил, и пакет по ним по
VG> всем идет.
создает правила внутри? т.е. ничем не отличается если убрать tablearg и сделать
все правила руками?

у меня в скрипте только ноды создаются, правила в принципе фиксированы.

MI>> PS send-pr или я где виноват?

VG> Как бы не то что бы ты виноват, но не помогут.
на столько печально все?

Vadim Goncharov

unread,
Mar 11, 2009, 6:22:21 AM3/11/09
to
Hi Max Irgiznov!

On Tue, 10 Mar 2009 21:27:06 +0300; Max Irgiznov wrote about 'ipfw + ng_ipfw + ng_car + high load = kernel panic':

MI>>> Играюсь с связкой ipfw + ng_ipfw + ng_car

MI>>> всё просто, все удобно но нткнулся на панику. на моем стенде
MI>>> воспроизводится стабильно под нагрузкой(ping -f с другой машины,
MI>>> закачка по http).

MI>>> несколько раз выполняем /etc/rc.fw и...
MI>>> стабильно ловится следущее:

VG>> ...и оно дописывает в конец правил, да? В смысле, пакет большее
VG>> количество штук проходит.

MI> нет, число правил не меняется... письмом ранее я говорил, что можно сменить
MI> номер шейпера или добавить в таблицу сразу много адресов или поправить
MI> правила(порты добавить\убрать)

Хмм. То есть можно взять рабочий скрипт и просто сделать много
table add x.x.x.x, не трогая больше вообще ничего?

VG>> bt блин, bt где? trap 12 в сетевых вещах почти всегда - переполнение
VG>> стека. Вообще, с последнего адреса толку мало, проблема обычно лежит
VG>> дальше.

MI> забыл :( не вопрос:

MI> (kgdb) bt
MI> #0 doadump () at pcpu.h:195
MI> #1 0x0000000000000000 in ?? ()
MI> #2 0xffffffff804d8803 in boot (howto=260)
MI> at /usr/src/sys/kern/kern_shutdown.c:418
MI> #3 0xffffffff804d8ab5 in panic (fmt=Variable "fmt" is not available.
MI> ) at /usr/src/sys/kern/kern_shutdown.c:574
MI> #4 0xffffffff807d791e in trap_fatal (frame=0xfffffffe800223d0, eva=0)
MI> at /usr/src/sys/amd64/amd64/trap.c:764
MI> #5 0xffffffff807d8662 in trap (frame=0xfffffffe800223d0)
MI> at /usr/src/sys/amd64/amd64/trap.c:565
MI> #6 0xffffffff807bc3ce in calltrap ()
MI> at /usr/src/sys/amd64/amd64/exception.S:209
MI> #7 0xffffffff805c7346 in ipfw_chk (args=0xfffffffe80022850)
MI> at /usr/src/sys/netinet/ip_fw2.c:2516
MI> #8 0xffffffff805caa92 in ipfw_check_out (arg=Variable "arg" is not available.
MI> )
MI> at /usr/src/sys/netinet/ip_fw_pfil.c:248
MI> #9 0xffffffff8058046c in pfil_run_hooks (ph=Variable "ph" is not available.
MI> ) at /usr/src/sys/net/pfil.c:78
MI> #10 0xffffffff805cf51f in ip_output (m=0xffffff0001c44c00, opt=Variable "opt"
MI> is not available.
MI> )
MI> at /usr/src/sys/netinet/ip_output.c:443
MI> #11 0xffffffff805ad840 in ng_apply_item (node=0xffffff00013ab100,
MI> item=0xffffff0004272be0, rw=0) at /usr/src/sys/netgraph/ng_base.c:2331
MI> #12 0xffffffff805aedca in ngintr () at /usr/src/sys/netgraph/ng_base.c:3291
MI> #13 0xffffffff8057ee25 in swi_net (dummy=Variable "dummy" is not available.
MI> ) at /usr/src/sys/net/netisr.c:254
MI> #14 0xffffffff804b7a2f in ithread_loop (arg=Variable "arg" is not available.
MI> )
MI> at /usr/src/sys/kern/kern_intr.c:1088
MI> ---Type <return> to continue, or q <return> to quit---
MI> #15 0xffffffff804b4800 in fork_exit (
MI> callout=0xffffffff804b7870 <ithread_loop>, arg=0xffffff000118eb40,
MI> frame=0xfffffffe80022c80) at /usr/src/sys/kern/kern_fork.c:810
MI> #16 0xffffffff807bc79e in fork_trampoline ()
MI> at /usr/src/sys/amd64/amd64/exception.S:455

MI>>> # uname -a
MI>>> FreeBSD vm2.local 7.1-STABLE FreeBSD 7.1-STABLE #4: Mon Mar 9
MI>>> 00:52:52 MSK 2009 xe...@vm2.local:/usr/obj/usr/src/sys/VM2
MI>>> amd64

MI>>> ядро копия GENERIC, настроект никаких, кроме:
MI>>> net.inet.ip.fw.one_pass=0
VG>> Ага, ессно.

VG>> Аа, ну оно создает по несколько одинаковых правил, и пакет по ним по
VG>> всем идет.

MI> создает правила внутри? т.е. ничем не отличается если убрать tablearg и сделать
MI> все правила руками?
MI> у меня в скрипте только ноды создаются, правила в принципе фиксированы.


MI>>> PS send-pr или я где виноват?
VG>> Как бы не то что бы ты виноват, но не помогут.

MI> на столько печально все?

Хммм, похоже что нет, что-то другое. Трап 12 при one_pass=0 легко получить
например таким образом: много раз сделать ipfw add pipe 1 или в нетграф или еще
как (кроме диверта), там происходит вот что: из ipfw_chk() будет позвана
функция дамминета или нетграфа, из нее - снова ipfw_chk(), потом опять
дамминет, и так по числу проходимых пакетом пайпов, то есть в bt будет видно
энное количество повторяющихся кусков, и ну и стек естественно в конце концов
переполнится. Такие PRы есть, такую ситуацию я и предположил, не вникая
в остальное.

У тебя, однако, трэйс выглядит иначе. Что могу вспомнить по теме - в последние
месяцы что-то в нетграф коммиттили, уже жаловались на разные проблемы, можно
попробовать откатить версию системы до осени и посмотреть, воспроизводится ли.

Mikolaj Golub

unread,
Mar 11, 2009, 9:09:18 AM3/11/09
to
On Mon, 09 Mar 2009 09:52:12 +0300 Max Irgiznov wrote to All:

> Hello Max!
>
> 09 мар 09 01:51, I wrote to All:
>
> MI> всё просто, все удобно но нткнулся на панику. на моем стенде
> MI> воспроизводится стабильно под нагрузкой(ping -f с другой машины,
> MI> закачка по http).
>
> MI> несколько раз выполняем /etc/rc.fw и...
> если код разнести по разным скриптам, то под нагрузкой не дохнет...
> а дохнет если исправить номер шейпера и перезагрузить правила. :(

Hе совсем понятно, что значит исправить номер шейпера? Можно более детально
описать всю процедуру?

> на i386 7.1-PRERELEASE тоже воспроизвелось.

Попробовал на i386 7.1-STABLE воспроизвести, многорактно перегружая скрипт при
ping -f, не получилось. Вот хочу попробовать второй способ...

--
Mikolaj Golub

Max Irgiznov

unread,
Mar 11, 2009, 10:51:22 AM3/11/09
to
Hello Vadim!

11 мар 09 13:22, you wrote to me:


VG> On Tue, 10 Mar 2009 21:27:06 +0300; Max Irgiznov wrote about 'ipfw +
VG> ng_ipfw + ng_car + high load = kernel panic':

MI>>>> Играюсь с связкой ipfw + ng_ipfw + ng_car

MI>>>> всё просто, все удобно но нткнулся на панику. на моем стенде
MI>>>> воспроизводится стабильно под нагрузкой(ping -f с другой

MI>>>> машины, закачка по http).

MI>>>> несколько раз выполняем /etc/rc.fw и...
MI>>>> стабильно ловится следущее:

VG>>> ...и оно дописывает в конец правил, да? В смысле, пакет большее
VG>>> количество штук проходит.
MI>> нет, число правил не меняется... письмом ранее я говорил, что

MI>> можно сменить номер шейпера или добавить в таблицу сразу много
MI>> адресов или поправить правила(порты добавить\убрать)

VG> Хмм. То есть можно взять рабочий скрипт и просто сделать много
VG> table add x.x.x.x, не трогая больше вообще ничего?
да, можно так. я просто снимал коментарии с кучки table add в теле письма

VG>>> bt блин, bt где? trap 12 в сетевых вещах почти всегда -

VG>>> переполнение стека. Вообще, с последнего адреса толку мало,
VG>>> проблема обычно лежит дальше.


MI>> забыл :( не вопрос:

[...skipped...]

MI>>>> # uname -a
MI>>>> FreeBSD vm2.local 7.1-STABLE FreeBSD 7.1-STABLE #4: Mon Mar 9
MI>>>> 00:52:52 MSK 2009 xe...@vm2.local:/usr/obj/usr/src/sys/VM2
MI>>>> amd64

MI>>>> ядро копия GENERIC, настроект никаких, кроме:
MI>>>> net.inet.ip.fw.one_pass=0
VG>>> Ага, ессно.
VG>>> Аа, ну оно создает по несколько одинаковых правил, и пакет по

VG>>> ним по всем идет.


MI>> создает правила внутри? т.е. ничем не отличается если убрать

MI>> tablearg и сделать все правила руками? у меня в скрипте только
MI>> ноды создаются, правила в принципе фиксированы.


MI>>>> PS send-pr или я где виноват?
VG>>> Как бы не то что бы ты виноват, но не помогут.
MI>> на столько печально все?

VG> Хммм, похоже что нет, что-то другое. Трап 12 при one_pass=0 легко
VG> получить например таким образом: много раз сделать ipfw add pipe 1 или
VG> в нетграф или еще как (кроме диверта), там происходит вот что: из
VG> ipfw_chk() будет позвана функция дамминета или нетграфа, из нее -
VG> снова ipfw_chk(), потом опять дамминет, и так по числу проходимых
VG> пакетом пайпов, то есть в bt будет видно энное количество
VG> повторяющихся кусков, и ну и стек естественно в конце
VG> концов переполнится. Такие PRы есть, такую ситуацию я и предположил,
VG> не вникая в остальное.

VG> У тебя, однако, трэйс выглядит иначе. Что могу вспомнить по теме - в
VG> последние месяцы что-то в нетграф коммиттили, уже жаловались на разные
VG> проблемы, можно попробовать откатить версию системы до осени и
VG> посмотреть, воспроизводится ли.

Понятно, буду дома попытаюсь проверить. есть 7.0-REL или даже 7.0-BETA2

Max Irgiznov

unread,
Mar 11, 2009, 11:00:08 AM3/11/09
to
Hello Mikolaj!

11 мар 09 16:09, you wrote to me:

>> MI> всё просто, все удобно но нткнулся на панику. на моем стенде
>> MI> воспроизводится стабильно под нагрузкой(ping -f с другой
>> машины,
>> MI> закачка по http).
>>
>> MI> несколько раз выполняем /etc/rc.fw и...
>> если код разнести по разным скриптам, то под нагрузкой не дохнет...
>> а дохнет если исправить номер шейпера и перезагрузить правила. :(

MG> Hе совсем понятно, что значит исправить номер шейпера? Можно более
MG> детально описать всю процедуру?
в теле скрипта


$fwcmd table $users add 10.10.0.200/32 3

$fwcmd table $users add 10.10.0.254/32 6

меняем 3 - 6 местами, перезапускаем и вот она паника.

>> на i386 7.1-PRERELEASE тоже воспроизвелось.

MG> Попробовал на i386 7.1-STABLE воспроизвести, многорактно перегружая
MG> скрипт при ping -f, не получилось. Вот хочу попробовать второй
MG> способ...
оно не сразу так себя ведет, а по прошествии 30-90 секунд с начала флуда.

Sergey Bondarev

unread,
Mar 11, 2009, 4:31:18 PM3/11/09
to
Привет, Max!

Среда Март 11 2009 16:09, Mikolaj Golub настрочил Max Irgiznov:


>>
>> MI> несколько раз выполняем /etc/rc.fw и...
>> если код разнести по разным скриптам, то под нагрузкой не дохнет...
>> а дохнет если исправить номер шейпера и перезагрузить правила. :(

MG> Hе совсем понятно, что значит исправить номер шейпера? Можно более
MG> детально описать всю процедуру?

>> на i386 7.1-PRERELEASE тоже воспроизвелось.

MG> Попробовал на i386 7.1-STABLE воспроизвести, многорактно перегружая
MG> скрипт при ping -f, не получилось. Вот хочу попробовать второй
MG> способ...
i386 6.4-p3 SMP
Стабильная паника. ip адpес, с котоpого идет ping -i 0.0001 в таблице для
шейпинга. Пpосто запускаю rc.fw твой во втоpой-тpетий pаз
Добавление в rc.fw
ipfw add 1 allow ip from any to any после ipfw flush не помогло.
Завтpа попpобую еще sleep 10 добавить. Чтобы все буфеpа пpочистились.

Hиже два bt
В пеpвый pаз panic: -- unknown opcode 244
(kgdb) bt
#0 doadump () at pcpu.h:165
#1 0x8067c1dd in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:410
#2 0x8067c505 in panic (fmt=0x80948234 "-- unknown opcode %d\n") at
/usr/src/sys/kern/kern_shutdown.c:566
#3 0x8076fb39 in ipfw_chk (args=0xad364ad0) at
/usr/src/sys/netinet/ip_fw2.c:3326
#4 0x80771be0 in ipfw_check_out (arg=0x0, m0=0xad364bdc, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/netinet/ip_fw_pfil.c:249
#5 0x80703453 in pfil_run_hooks (ph=0x80a13e00, mp=0xad364c54, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/net/pfil.c:139
#6 0x8077a3e6 in ip_output (m=0x8694c800, opt=0x8647c800, ro=0xad364c20,
flags=1, imo=0x0, inp=0x0)
at /usr/src/sys/netinet/ip_output.c:679
#7 0x80b65b06 in ng_ipfw_rcvdata () from /boot/kernel/ng_ipfw.ko
#8 0x80742c78 in ng_apply_item (node=0x8661f200, item=0x89ffdb10, rw=0)
at /usr/src/sys/netgraph/ng_base.c:2398
#9 0x8074404c in ngintr () at /usr/src/sys/netgraph/ng_base.c:3350
#10 0x8070216a in swi_net (dummy=0x0) at /usr/src/sys/net/netisr.c:341
#11 0x806632dd in ithread_execute_handlers (p=0x86362430, ie=0x863b5000) at
/usr/src/sys/kern/kern_intr.c:682
#12 0x806633fd in ithread_loop (arg=0x8633a900) at
/usr/src/sys/kern/kern_intr.c:766
#13 0x80662091 in fork_exit (callout=0x806633a8 <ithread_loop>, arg=0x8633a900,
frame=0xad364d38)
at /usr/src/sys/kern/kern_fork.c:788
#14 0x808afc5c in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:208
(kgdb) bt full
#0 doadump () at pcpu.h:165
No locals.
#1 0x8067c1dd in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:410
first_buf_printf = 1
#2 0x8067c505 in panic (fmt=0x80948234 "-- unknown opcode %d\n") at
/usr/src/sys/kern/kern_shutdown.c:566
td = (struct thread *) 0x86363c00
bootopt = 260
newpanic = 0
ap = 0x86363c00 "0$6\206@n6\206"
buf = "-- unknown opcode 244\n", '\0' <repeats 233 times>
#3 0x8076fb39 in ipfw_chk (args=0xad364ad0) at
/usr/src/sys/netinet/ip_fw2.c:3326
dt = (struct divert_tag *) 0x0
match = 0
tablearg = 0
skip_or = 0
cmd = (ipfw_insn *) 0x8048058
l = 2052
cmdlen = 0
m = (struct mbuf *) 0x8694c800
ip = (struct ip *) 0x86960010
fw_ugid_cache = {fw_groups = {0, 2906016392, 2156233591, 28,
2164738560, 32, 2293262432, 2906016396,
2154231260, 2906016420, 2154231649, 2157588736, 32, 2906016732, 0,
2906016436},
fw_ngroups = -2140443740, fw_uid = 2293262432, fw_prid = -2137378560}
ugid_lookup = 0
divinput_flags = 0
oif = (struct ifnet *) 0x8647c800
f = (struct ip_fw *) 0x8048034
retval = 0
hlen = 20
offset = 0
proto = 1 '\001'
src_port = 0
dst_port = 0
src_ip = {s_addr = 3408907611}
dst_ip = {s_addr = 3274689883}
ip_len = 84
pktlen = 84
etype = 0
dyn_dir = 3
q = (ipfw_dyn_rule *) 0x0
mtag = (struct m_tag *) 0x0
ulp = (void *) 0x86960024


---Type <return> to continue, or q <return> to quit---

is_ipv6 = 0
ext_hd = 0
is_ipv4 = 1
#4 0x80771be0 in ipfw_check_out (arg=0x0, m0=0xad364bdc, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/netinet/ip_fw_pfil.c:249
args = {m = 0x8694c800, oif = 0x8647c800, next_hop = 0x0, rule =
0x88d69840, eh = 0x0, f_id = {
dst_ip = 1540173763, src_ip = 1540173771, dst_port = 0, src_port = 0, proto
= 1 '\001', flags = 0 '\0',
addr_type = 4 '\004', dst_ip6 = {__u6_addr = {__u6_addr8 = '\0' <repeats 15
times>, __u6_addr16 = {0, 0,
0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, src_ip6 = {__u6_addr
= {
__u6_addr8 = '\0' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0,
0, 0}, __u6_addr32 = {0, 0,
0, 0}}}, flow_id6 = 0, frag_id6 = 0}, cookie = 0, inp = 0x0, dummypar
= {opt_or = 0x0, ro_or = {
ro_rt = 0x0, ro_dst = {sin6_len = 0 '\0', sin6_family = 0 '\0', sin6_port
= 0, sin6_flowinfo = 0,
sin6_addr = {__u6_addr = {__u6_addr8 = '\0' <repeats 15 times>,
__u6_addr16 = {0, 0, 0, 0, 0, 0, 0,
0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id = 0}}, flags_or =
0, im6o_or = 0x0,
origifp_or = 0x0, ifp_or = 0x0, dst_or = {sin6_len = 0 '\0', sin6_family =
0 '\0', sin6_port = 0,
sin6_flowinfo = 0, sin6_addr = {__u6_addr = {__u6_addr8 = '\0' <repeats
15 times>, __u6_addr16 = {0,
0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id =
0}, mtu_or = 0,
ro_pmtu_or = {ro_rt = 0x0, ro_dst = {sin6_len = 0 '\0', sin6_family = 0
'\0', sin6_port = 0,
sin6_flowinfo = 0, sin6_addr = {__u6_addr = {__u6_addr8 = '\0' <repeats
15 times>, __u6_addr16 = {0,
0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id
= 0}}}, hopstore = {
sin_len = 0 '\0', sin_family = 0 '\0', sin_port = 0, sin_addr = {s_addr =
0},
sin_zero = "\000\000\000\000\000\000\000"}}
ng_tag = (struct ng_ipfw_tag *) 0x0
ipfw = 0
divert = 0
tee = 0
fwd_tag = (struct m_tag *) 0x0
#5 0x80703453 in pfil_run_hooks (ph=0x80a13e00, mp=0xad364c54, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/net/pfil.c:139
pfh = (struct packet_filter_hook *) 0x864ea7e0
m = (struct mbuf *) 0x8694c800
rv = 0
#6 0x8077a3e6 in ip_output (m=0x8694c800, opt=0x8647c800, ro=0xad364c20,
flags=1, imo=0x0, inp=0x0)
at /usr/src/sys/netinet/ip_output.c:679
ip = (struct ip *) 0x86960010
ifp = (struct ifnet *) 0x8647c800
m0 = (struct mbuf *) 0xc32fcd5b
hlen = 20
len = 0
error = 0
dst = (struct sockaddr_in *) 0xad364c24
ia = (struct in_ifaddr *) 0x867ff200
isbroadcast = 0
sw_csum = -1020277413
iproute = {ro_rt = 0x86899948, ro_dst = {sa_len = 16 '\020', sa_family
= 2 '\002',
sa_data = "\000\000[/\000\000\000\000\000\000\000"}}
odst = {s_addr = 3274689883}
fwd_tag = (struct m_tag *) 0x0
#7 0x80b65b06 in ng_ipfw_rcvdata () from /boot/kernel/ng_ipfw.ko
No symbol table info available.
#8 0x80742c78 in ng_apply_item (node=0x8661f200, item=0x89ffdb10, rw=0)
at /usr/src/sys/netgraph/ng_base.c:2398
hook = 0x86662500
rcvdata = (ng_rcvdata_t *) 0
rcvmsg = (ng_rcvmsg_t *) 0
apply = (struct ng_apply_info *) 0x0
error = 0
depth = 1
#9 0x8074404c in ngintr () at /usr/src/sys/netgraph/ng_base.c:3350
rw = 0
item = 0x89ffdb10
node = 0x8661f200
#10 0x8070216a in swi_net (dummy=0x0) at /usr/src/sys/net/netisr.c:341
ni = (struct netisr *) 0x80a125a8
bits = 0
i = 0
#11 0x806632dd in ithread_execute_handlers (p=0x86362430, ie=0x863b5000) at
/usr/src/sys/kern/kern_intr.c:682
ih = (struct intr_handler *) 0x863b23c0
ihn = (struct intr_handler *) 0x0
#12 0x806633fd in ithread_loop (arg=0x8633a900) at
/usr/src/sys/kern/kern_intr.c:766
intr_event = (struct intr_thread *) 0x8633a900
ie = (struct intr_event *) 0x863b5000
td = (struct thread *) 0x86363c00
p = (struct proc *) 0x86362430
#13 0x80662091 in fork_exit (callout=0x806633a8 <ithread_loop>, arg=0x8633a900,
frame=0xad364d38)
at /usr/src/sys/kern/kern_fork.c:788
p = (struct proc *) 0x86362430
td = (struct thread *) 0x0
#14 0x808afc5c in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:208
No locals.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Во втоpой:


>>>>>>>>>>>>>>>>>>>
Fatal trap 12: page fault while in kernel mode

cpuid = 0; apic id = 00

fault virtual address = 0x11
fault code = supervisor read, page not present
instruction pointer = 0x20:0x8076e5a3
stack pointer = 0x28:0xad3649e0
frame pointer = 0x28:0xad364ac4


code segment = base 0x0, limit 0xfffff, type 0x1b

= DPL 0, pres 1, def32 1, gran 1


processor eflags = interrupt enabled, resume, IOPL = 0

current process = 14 (swi1: net)


trap number = 12panic:
page faultcpuid = 0

Dumping 2020 MB (6 chunks)
chunk 0: 1MB (159 pages) ... ok
chunk 1: 2020MB (516896 pages) 2004 1988 1972 1956 1940 1924 1908 1892 1876
1860 1844 1828 1812 1796 1780 1764 1748 1732 1716 1700 1684 1668 1652 1636 1620
1604 1588 1572 1556 1540 1524 1508 1492 (CTRL-C to abort) (CTRL-C to abort)
(CTRL-C to abort) 1476 1460 (CTRL-C to abort) (CTRL-C to abort) (CTRL-C to
abort) 1444 1428 1412 1396 1380 1364 1348 1332 1316 1300 1284 1268 1252 1236
1220 1204 1188 1172 1156 1140 1124 1108 1092 1076 1060 1044 1028 1012 996 980
964 948 932 916 900 884 868 852 836 820 804 788 772 756 740 724 708 692 676 660
644 628 612 596 580 564 548 532 516 500 484 468 452 436 420 404 388 372 356 340
324 308 292 276 260 244 228 212 196 180 164 148 132 116 100 84 68 52 36 20 4
... ok
chunk 2: 1MB (240 pages)

Reading symbols from /boot/kernel/geom_label.ko...done.
Loaded symbols for /boot/kernel/geom_label.ko
Reading symbols from /boot/kernel/ichwd.ko...done.
Loaded symbols for /boot/kernel/ichwd.ko
Reading symbols from /boot/kernel/ng_ipfw.ko...done.
Loaded symbols for /boot/kernel/ng_ipfw.ko
Reading symbols from /boot/kernel/acpi.ko...done.
Loaded symbols for /boot/kernel/acpi.ko
Reading symbols from /boot/kernel/if_vlan.ko...done.
Loaded symbols for /boot/kernel/if_vlan.ko
Reading symbols from /boot/kernel/blank_saver.ko...done.
Loaded symbols for /boot/kernel/blank_saver.ko
Reading symbols from /boot/modules/ng_car.ko...done.
Loaded symbols for /boot/modules/ng_car.ko
#0 doadump () at pcpu.h:165
165 __asm __volatile("movl %%fs:0,%0" : "=r" (td));
(kgdb) bt
#0 doadump () at pcpu.h:165
#1 0x8067c1dd in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:410
#2 0x8067c505 in panic (fmt=0x80917835 "%s") at
/usr/src/sys/kern/kern_shutdown.c:566
#3 0x808c4a3c in trap_fatal (frame=0xad3649a0, eva=17) at
/usr/src/sys/i386/i386/trap.c:838
#4 0x808c477b in trap_pfault (frame=0xad3649a0, usermode=0, eva=17) at
/usr/src/sys/i386/i386/trap.c:745
#5 0x808c43dd in trap (frame=
{tf_fs = 8, tf_es = -2043281368, tf_ds = -2031353816, tf_edi =
-2042116096, tf_esi = 0, tf_ebp = -1388950844, tf_isp = -1388951092, tf_ebx =
-2136918048, tf_edx = -1388950832, tf_ecx = 3, tf_eax = 3, tf_trapno = 12,
tf_err = 0, tf_eip = -2139691613, tf_cs = 32, tf_eflags = 66054, tf_esp = 0,
tf_ss = -1388951060})
at /usr/src/sys/i386/i386/trap.c:435
#6 0x808afbfa in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#7 0x8076e5a3 in ipfw_chk (args=0xad364ad0) at
/usr/src/sys/netinet/ip_fw2.c:2541
#8 0x80771be0 in ipfw_check_out (arg=0x0, m0=0xad364bdc, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/netinet/ip_fw_pfil.c:249
#9 0x80703453 in pfil_run_hooks (ph=0x80a13e00, mp=0xad364c54, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/net/pfil.c:139
#10 0x8077a3e6 in ip_output (m=0x86e90a00, opt=0x8647c800, ro=0xad364c20,
flags=1, imo=0x0, inp=0x0)
at /usr/src/sys/netinet/ip_output.c:679
#11 0x80b65b06 in ng_ipfw_rcvdata () from /boot/kernel/ng_ipfw.ko
#12 0x80742c78 in ng_apply_item (node=0x8661f200, item=0x86f16000, rw=0)
at /usr/src/sys/netgraph/ng_base.c:2398
#13 0x8074404c in ngintr () at /usr/src/sys/netgraph/ng_base.c:3350
#14 0x8070216a in swi_net (dummy=0x0) at /usr/src/sys/net/netisr.c:341
#15 0x806632dd in ithread_execute_handlers (p=0x86362430, ie=0x863b5000) at
/usr/src/sys/kern/kern_intr.c:682
#16 0x806633fd in ithread_loop (arg=0x8633a900) at
/usr/src/sys/kern/kern_intr.c:766
#17 0x80662091 in fork_exit (callout=0x806633a8 <ithread_loop>, arg=0x8633a900,
frame=0xad364d38)
at /usr/src/sys/kern/kern_fork.c:788
#18 0x808afc5c in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:208
(kgdb) bt full
#0 doadump () at pcpu.h:165
No locals.
#1 0x8067c1dd in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:410
first_buf_printf = 1
#2 0x8067c505 in panic (fmt=0x80917835 "%s") at
/usr/src/sys/kern/kern_shutdown.c:566
td = (struct thread *) 0x86363c00
bootopt = 260
newpanic = 0
ap = 0x86363c00 "0$6\206@n6\206"
buf = "page fault", '\0' <repeats 245 times>
#3 0x808c4a3c in trap_fatal (frame=0xad3649a0, eva=17) at
/usr/src/sys/i386/i386/trap.c:838
code = 40
ss = 40
esp = 0
type = 12
softseg = {ssd_base = 0, ssd_limit = 1048575, ssd_type = 27, ssd_dpl =
0, ssd_p = 1, ssd_xx = 4,
ssd_xx1 = 2, ssd_def32 = 1, ssd_gran = 1}
msg = 0x0
#4 0x808c477b in trap_pfault (frame=0xad3649a0, usermode=0, eva=17) at
/usr/src/sys/i386/i386/trap.c:745
va = 0
vm = (struct vmspace *) 0x0
map = 0x80a04d80
rv = 1
ftype = 1 '\001'
td = (struct thread *) 0x86363c00
p = (struct proc *) 0x86362430
#5 0x808c43dd in trap (frame=
{tf_fs = 8, tf_es = -2043281368, tf_ds = -2031353816, tf_edi =
-2042116096, tf_esi = 0, tf_ebp = -1388950844, tf_isp = -1388951092, tf_ebx =
-2136918048, tf_edx = -1388950832, tf_ecx = 3, tf_eax = 3, tf_trapno = 12,
tf_err = 0, tf_eip = -2139691613, tf_cs = 32, tf_eflags = 66054, tf_esp = 0,
tf_ss = -1388951060})
at /usr/src/sys/i386/i386/trap.c:435
td = (struct thread *) 0x86363c00
p = (struct proc *) 0x86362430
sticks = 2263605504
type = 12
i = 0
ucode = 0
code = 0
eva = 17
#6 0x808afbfa in calltrap () at /usr/src/sys/i386/i386/exception.s:139
No locals.
#7 0x8076e5a3 in ipfw_chk (args=0xad364ad0) at
/usr/src/sys/netinet/ip_fw2.c:2541


---Type <return> to continue, or q <return> to quit---

tablearg = 0
skip_or = -1388950988
cmd = (ipfw_insn *) 0x80a137e0
l = 0
cmdlen = -2042116096
m = (struct mbuf *) 0x86e90a00
ip = (struct ip *) 0x86c25010
fw_ugid_cache = {fw_groups = {0, 2906016392, 2156233591, 29,
2164738560, 32, 2257251392, 2906016396,
2154231260, 2906016420, 2154231649, 2157588736, 32, 2906016732, 0,
2906016436},
fw_ngroups = -2140443740, fw_uid = 2257251392, fw_prid = -2137378560}
ugid_lookup = 0
divinput_flags = 0
oif = (struct ifnet *) 0x8647c800
f = (struct ip_fw *) 0x3
retval = 0
hlen = 20
offset = 0
proto = 1 '\001'
src_port = 0
dst_port = 0
src_ip = {s_addr = 3408907611}
dst_ip = {s_addr = 3274689883}
ip_len = 84
pktlen = 84
etype = 0
dyn_dir = 3
q = (ipfw_dyn_rule *) 0x0
mtag = (struct m_tag *) 0x0
ulp = (void *) 0x86c25024
is_ipv6 = 0
ext_hd = 0
is_ipv4 = 1
#8 0x80771be0 in ipfw_check_out (arg=0x0, m0=0xad364bdc, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/netinet/ip_fw_pfil.c:249
args = {m = 0x86e90a00, oif = 0x8647c800, next_hop = 0x0, rule =
0x86a541c0, eh = 0x0, f_id = {
dst_ip = 1540173763, src_ip = 1540173771, dst_port = 0, src_port = 0, proto
= 1 '\001', flags = 0 '\0',
addr_type = 4 '\004', dst_ip6 = {__u6_addr = {__u6_addr8 = '\0' <repeats 15
times>, __u6_addr16 = {0, 0,
0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, src_ip6 = {__u6_addr
= {
__u6_addr8 = '\0' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0,
0, 0}, __u6_addr32 = {0, 0,
0, 0}}}, flow_id6 = 0, frag_id6 = 0}, cookie = 0, inp = 0x0, dummypar
= {opt_or = 0x0, ro_or = {
ro_rt = 0x0, ro_dst = {sin6_len = 0 '\0', sin6_family = 0 '\0', sin6_port
= 0, sin6_flowinfo = 0,
sin6_addr = {__u6_addr = {__u6_addr8 = '\0' <repeats 15 times>,
__u6_addr16 = {0, 0, 0, 0, 0, 0, 0,


---Type <return> to continue, or q <return> to quit---

0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id = 0}}, flags_or =
0, im6o_or = 0x0,
origifp_or = 0x0, ifp_or = 0x0, dst_or = {sin6_len = 0 '\0', sin6_family =
0 '\0', sin6_port = 0,
sin6_flowinfo = 0, sin6_addr = {__u6_addr = {__u6_addr8 = '\0' <repeats
15 times>, __u6_addr16 = {0,
0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id =
0}, mtu_or = 0,
ro_pmtu_or = {ro_rt = 0x0, ro_dst = {sin6_len = 0 '\0', sin6_family = 0
'\0', sin6_port = 0,
sin6_flowinfo = 0, sin6_addr = {__u6_addr = {__u6_addr8 = '\0' <repeats
15 times>, __u6_addr16 = {0,
0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, sin6_scope_id
= 0}}}, hopstore = {
sin_len = 0 '\0', sin_family = 0 '\0', sin_port = 0, sin_addr = {s_addr =
0},
sin_zero = "\000\000\000\000\000\000\000"}}
ng_tag = (struct ng_ipfw_tag *) 0xad364ad0
ipfw = -1388950832
divert = 3
tee = 3
fwd_tag = (struct m_tag *) 0x0
#9 0x80703453 in pfil_run_hooks (ph=0x80a13e00, mp=0xad364c54, ifp=0x8647c800,
dir=2, inp=0x0)
at /usr/src/sys/net/pfil.c:139
pfh = (struct packet_filter_hook *) 0x864ea7e0
m = (struct mbuf *) 0x86e90a00
rv = 0
#10 0x8077a3e6 in ip_output (m=0x86e90a00, opt=0x8647c800, ro=0xad364c20,
flags=1, imo=0x0, inp=0x0)
at /usr/src/sys/netinet/ip_output.c:679
ip = (struct ip *) 0x86c25010
ifp = (struct ifnet *) 0x8647c800
m0 = (struct mbuf *) 0xc32fcd5b
hlen = 20
len = 0
error = 0
dst = (struct sockaddr_in *) 0xad364c24
ia = (struct in_ifaddr *) 0x8680f100
isbroadcast = 3
sw_csum = -1020277413
iproute = {ro_rt = 0x868adb58, ro_dst = {sa_len = 16 '\020', sa_family
= 2 '\002',
sa_data = "\000\000[/\000\000\000\000\000\000\000"}}
odst = {s_addr = 3274689883}
fwd_tag = (struct m_tag *) 0x0
#11 0x80b65b06 in ng_ipfw_rcvdata () from /boot/kernel/ng_ipfw.ko
No symbol table info available.
#12 0x80742c78 in ng_apply_item (node=0x8661f200, item=0x86f16000, rw=0)
at /usr/src/sys/netgraph/ng_base.c:2398
hook = 0x86f18700
rcvdata = (ng_rcvdata_t *) 0x3
rcvmsg = (ng_rcvmsg_t *) 0x3


---Type <return> to continue, or q <return> to quit---

apply = (struct ng_apply_info *) 0x0
error = 0
depth = 1
#13 0x8074404c in ngintr () at /usr/src/sys/netgraph/ng_base.c:3350
rw = 0
item = 0x86f16000
node = 0x8661f200
#14 0x8070216a in swi_net (dummy=0x0) at /usr/src/sys/net/netisr.c:341
ni = (struct netisr *) 0x80a125a8
bits = 0
i = 3
#15 0x806632dd in ithread_execute_handlers (p=0x86362430, ie=0x863b5000) at
/usr/src/sys/kern/kern_intr.c:682
ih = (struct intr_handler *) 0x863b23c0
ihn = (struct intr_handler *) 0x0
#16 0x806633fd in ithread_loop (arg=0x8633a900) at
/usr/src/sys/kern/kern_intr.c:766
intr_event = (struct intr_thread *) 0x8633a900
ie = (struct intr_event *) 0x863b5000
td = (struct thread *) 0x86363c00
p = (struct proc *) 0x86362430
#17 0x80662091 in fork_exit (callout=0x806633a8 <ithread_loop>, arg=0x8633a900,
frame=0xad364d38)
at /usr/src/sys/kern/kern_fork.c:788
p = (struct proc *) 0x86362430
td = (struct thread *) 0xad364ad0
#18 0x808afc5c in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:208
No locals.


Счастливо !
Sergey

Mikolaj Golub

unread,
Mar 12, 2009, 4:34:14 AM3/12/09
to
On Wed, 11 Mar 2009 23:31:18 +0300 Sergey Bondarev wrote to Max Irgiznov:

> Привет, Max!
>
> Среда Март 11 2009 16:09, Mikolaj Golub настрочил Max Irgiznov:
> >>
> >> MI> несколько раз выполняем /etc/rc.fw и...
> >> если код разнести по разным скриптам, то под нагрузкой не дохнет...
> >> а дохнет если исправить номер шейпера и перезагрузить правила. :(
>
> MG> Hе совсем понятно, что значит исправить номер шейпера? Можно более
> MG> детально описать всю процедуру?
>
> >> на i386 7.1-PRERELEASE тоже воспроизвелось.
>
> MG> Попробовал на i386 7.1-STABLE воспроизвести, многорактно перегружая
> MG> скрипт при ping -f, не получилось. Вот хочу попробовать второй
> MG> способ...
> i386 6.4-p3 SMP
> Стабильная паника. ip адpес, с котоpого идет ping -i 0.0001 в таблице для
> шейпинга. Пpосто запускаю rc.fw твой во втоpой-тpетий pаз
> Добавление в rc.fw
> ipfw add 1 allow ip from any to any после ipfw flush не помогло.
> Завтpа попpобую еще sleep 10 добавить. Чтобы все буфеpа пpочистились.

Да, у меня тоже паникует. Это я первый раз просто забыл выключить
net.inet.ip.fw.one_pass :-).

В общем, мне ситуация представляется так. ipfw передает пакет шейперу, который
ставит его в очередь. В этот момент правила перегружаются. Когда пакет
возращается шейпером в ipfw_chk и one_pass выключен, то он пытается вызвать
следующее правило (args->rule->next_rule). Hо правила уже были перегружены и
указатели невалидны, поэтому можно наблюдать самые разные эффекты:

"ipfw: ouch!, skip past end of rules, denying packet" в dmesg
(если args->rule == NULL)

"panic: -- unknown opcode" или сегфолт, когда args->rule->next_rule указывает
на неизвестно что.

Если мои рассуждения верны, то даже и не знаю как тут лучше фиксить... Проще
всего one_pass отключить ;-).

NG_IPFW(4) FreeBSD Kernel Interfaces Manual NG_IPFW(4)

AUTHORS
The ipfw node was written by Gleb Smirnoff <gle...@FreeBSD.org>.

Глеб (насколько я помню его из этой рассылки, пока он здесь обитал и не был
заплюсован за ненормативную лексику) хороший (правда, немного обидчивый)
человек и всегда готов помочь :-). Думаю стоит ему написать.

--
Mikolaj Golub

0 new messages