* [devel] Особенности Си для x86_64
@ 2008-10-01 8:56 Denis Klimov
2008-10-01 8:59 ` Damir Shayhutdinov
2008-10-01 9:21 ` Хихин Руслан
0 siblings, 2 replies; 8+ messages in thread
From: Denis Klimov @ 2008-10-01 8:56 UTC (permalink / raw)
To: ALT Linux Team development discussions
Добрый день!
В своем пакете katrin нашел багу - неверно разбирает netflow поток,
если скомпилирована для x86_64. Под i586 - все пучком.
Собственно, в процессе дебага вывел функциональный код разбора netflow в один файл, но котором эта бага воспроизводиться.
http://pastebin.ca/1215600
При работе на i586 вывод такой:
Netflow version: 5
bytes: 6528
src_addr: 192.168.0.113
dst_addr: 192.168.0.26
src_port: 1023
src_port: 65535
proto: 6
т.е. все ок.
на x86_64
Netflow version: 5
bytes: -1062731756
src_addr: 0.2.188.4
dst_addr: 0.2.194.15
src_port: 2
src_port: 47078
proto: 190
bytes: 3
src_addr: 0.0.0.0
dst_addr: 0.0.0.0
src_port: 0
src_port: 0
proto: 0
bytes: 67108863
src_addr: 0.0.0.0
dst_addr: 255.255.255.255
src_port: 0
src_port: 0
proto: 255
bytes: 0
src_addr: 0.1.217.107
dst_addr: 0.2.197.249
src_port: 0
src_port: 0
proto: 0
bytes: 0
src_addr: 0.0.0.0
dst_addr: 0.0.0.0
src_port: 57398
src_port: 35850
proto: 0
В общем. Видно, что верно разбирает только версию..
не знаю куда рыть... Буду рад, если подскажете.
--
Климов Денис
zver
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Особенности Си для x86_64
2008-10-01 8:56 [devel] Особенности Си для x86_64 Denis Klimov
@ 2008-10-01 8:59 ` Damir Shayhutdinov
2008-10-01 9:01 ` Damir Shayhutdinov
` (2 more replies)
2008-10-01 9:21 ` Хихин Руслан
1 sibling, 3 replies; 8+ messages in thread
From: Damir Shayhutdinov @ 2008-10-01 8:59 UTC (permalink / raw)
To: ALT Linux Team development discussions
> В своем пакете katrin нашел багу - неверно разбирает netflow поток,
> если скомпилирована для x86_64. Под i586 - все пучком.
>
> Собственно, в процессе дебага вывел функциональный код разбора netflow в один файл, но котором эта бага воспроизводиться.
> http://pastebin.ca/1215600
>
> При работе на i586 вывод такой:
> Netflow version: 5
> bytes: 6528
> src_addr: 192.168.0.113
> dst_addr: 192.168.0.26
> src_port: 1023
> src_port: 65535
> proto: 6
>
> т.е. все ок.
>
> на x86_64
>
> Netflow version: 5
> bytes: -1062731756
> src_addr: 0.2.188.4
> dst_addr: 0.2.194.15
> src_port: 2
> src_port: 47078
> proto: 190
>
> bytes: 3
> src_addr: 0.0.0.0
> dst_addr: 0.0.0.0
> src_port: 0
> src_port: 0
> proto: 0
>
> bytes: 67108863
> src_addr: 0.0.0.0
> dst_addr: 255.255.255.255
> src_port: 0
> src_port: 0
> proto: 255
>
> bytes: 0
> src_addr: 0.1.217.107
> dst_addr: 0.2.197.249
> src_port: 0
> src_port: 0
> proto: 0
>
> bytes: 0
> src_addr: 0.0.0.0
> dst_addr: 0.0.0.0
> src_port: 57398
> src_port: 35850
> proto: 0
>
> В общем. Видно, что верно разбирает только версию..
>
> не знаю куда рыть... Буду рад, если подскажете.
На x86_64 sizeof(long) = sizeof(void*) = 8 байт.
а sizeof(int) = 4 байт.
Хотите писать кроссплатформенный код - освойте введенные в C99
(stdint.h) типы intN_t.
То есть в вашем случае для 4-байтового знакового целого надо было
использовать тип int32_t а не long.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Особенности Си для x86_64
2008-10-01 8:59 ` Damir Shayhutdinov
@ 2008-10-01 9:01 ` Damir Shayhutdinov
2008-10-01 9:14 ` Denis Klimov
2008-10-01 9:36 ` Denis Klimov
2 siblings, 0 replies; 8+ messages in thread
From: Damir Shayhutdinov @ 2008-10-01 9:01 UTC (permalink / raw)
To: ALT Linux Team development discussions
> На x86_64 sizeof(long) = sizeof(void*) = 8 байт.
> а sizeof(int) = 4 байт.
>
> Хотите писать кроссплатформенный код - освойте введенные в C99
> (stdint.h) типы intN_t.
>
> То есть в вашем случае для 4-байтового знакового целого надо было
> использовать тип int32_t а не long.
А для беззнакового - uint32_t.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Особенности Си для x86_64
2008-10-01 8:59 ` Damir Shayhutdinov
2008-10-01 9:01 ` Damir Shayhutdinov
@ 2008-10-01 9:14 ` Denis Klimov
2008-10-01 9:36 ` Denis Klimov
2 siblings, 0 replies; 8+ messages in thread
From: Denis Klimov @ 2008-10-01 9:14 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Wed, 1 Oct 2008 12:59:44 +0400 Damir Shayhutdinov wrote:
> На x86_64 sizeof(long) = sizeof(void*) = 8 байт.
> а sizeof(int) = 4 байт.
>
> Хотите писать кроссплатформенный код - освойте введенные в C99
> (stdint.h) типы intN_t.
>
> То есть в вашем случае для 4-байтового знакового целого надо было
> использовать тип int32_t а не long.
Благодарю. буду осмысливать и пробовать.
--
Denis Klimov
zver
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Особенности Си для x86_64
2008-10-01 8:56 [devel] Особенности Си для x86_64 Denis Klimov
2008-10-01 8:59 ` Damir Shayhutdinov
@ 2008-10-01 9:21 ` Хихин Руслан
2008-10-01 9:29 ` Kirill A. Shutemov
1 sibling, 1 reply; 8+ messages in thread
From: Хихин Руслан @ 2008-10-01 9:21 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 350 bytes --]
Здравствуйте Denis Klimov
В сообщении от 1 октября 2008 Denis Klimov написал(a):
> -1062731756
На примере ntohl ;
В <netinet/in.h> :
extern uint32_t ntohl (uint32_t __netlong) __THROW __attribute__
((__const__));
А не как не u_long =uint64_t для x86_64.....
А вот как правильно определить - сходу не скажу,
--
С уважением Хихин Руслан
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Особенности Си для x86_64
2008-10-01 9:21 ` Хихин Руслан
@ 2008-10-01 9:29 ` Kirill A. Shutemov
0 siblings, 0 replies; 8+ messages in thread
From: Kirill A. Shutemov @ 2008-10-01 9:29 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 620 bytes --]
On Wed, Oct 01, 2008 at 01:21:48PM +0400, =?KOI8-R?Q?=E8=C9=C8=C9=CE_=F2=D5=D3=CC=C1=CE_ wrote:
> Здравствуйте Denis Klimov
> В сообщении от 1 октября 2008 Denis Klimov написал(a):
> > -1062731756
>
> На примере ntohl ;
>
> В <netinet/in.h> :
>
> extern uint32_t ntohl (uint32_t __netlong) __THROW __attribute__
> ((__const__));
>
> А не как не u_long =uint64_t для x86_64.....
Внимательно почитайте man 3 htonl.
--
Regards, Kirill A. Shutemov
+ Belarus, Minsk
+ ALT Linux Team, http://www.altlinux.com/
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Особенности Си для x86_64
2008-10-01 8:59 ` Damir Shayhutdinov
2008-10-01 9:01 ` Damir Shayhutdinov
2008-10-01 9:14 ` Denis Klimov
@ 2008-10-01 9:36 ` Denis Klimov
2008-10-01 12:27 ` Denis Klimov
2 siblings, 1 reply; 8+ messages in thread
From: Denis Klimov @ 2008-10-01 9:36 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Wed, 1 Oct 2008 12:59:44 +0400 Damir Shayhutdinov wrote:
> На x86_64 sizeof(long) = sizeof(void*) = 8 байт.
> а sizeof(int) = 4 байт.
>
> Хотите писать кроссплатформенный код - освойте введенные в C99
> (stdint.h) типы intN_t.
>
> То есть в вашем случае для 4-байтового знакового целого надо было
> использовать тип int32_t а не long.
Поправил. разбираться стало нормально.
Но. возникла проблема одна.
На x86_64 вывод стал таким:
Netflow version: 5
bytes: 17408
src_addr: 113.0.168.192
dst_addr: 26.0.168.192
src_port: 1023
src_port: 65535
proto: 6
Т.е ip перевернутые.
Пробовал добавлять пару строк
((struct flow *)p)->src_addr.s_addr = htonl(((struct flow *)p)->src_addr.s_addr);
((struct flow *)p)->dst_addr.s_addr = htonl(((struct flow *)p)->dst_addr.s_addr);
перед выводом. Ничего не поменялось. Пробовал заменять htonl на ntohl - все равно так же.
Судя по ману на inet_ntoa ему надо network byte order. Так что htonl правильное. Но не помогает.
Так же надо заметить, что в i586 у меня правильно работает только если
нету этих строк. При их добавлении (с htonl или ntohl) - порядок
меняется на неверный.
Небольшая оговорка. i586 - это у меня контейнер. HN которого x86_64. хотя не думаю что это должно на него влиять.
Код стал таким
http://pastebin.ca/1215627
--
Denis Klimov
zver
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Особенности Си для x86_64
2008-10-01 9:36 ` Denis Klimov
@ 2008-10-01 12:27 ` Denis Klimov
0 siblings, 0 replies; 8+ messages in thread
From: Denis Klimov @ 2008-10-01 12:27 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Wed, 1 Oct 2008 15:36:35 +0600 Denis Klimov wrote:
> Но. возникла проблема одна.
Видимо эт я по своей невнимательности. Сейчас все Ок. Всем спасибо.
--
Denis Klimov
zver
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-10-01 12:27 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-10-01 8:56 [devel] Особенности Си для x86_64 Denis Klimov
2008-10-01 8:59 ` Damir Shayhutdinov
2008-10-01 9:01 ` Damir Shayhutdinov
2008-10-01 9:14 ` Denis Klimov
2008-10-01 9:36 ` Denis Klimov
2008-10-01 12:27 ` Denis Klimov
2008-10-01 9:21 ` Хихин Руслан
2008-10-01 9:29 ` Kirill A. Shutemov
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git