* [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