ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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