PDA

View Full Version : Non riescoa trovare nel kernel il codice di questo comando


francowr
29-08-2006, 21:13
Ciao a tutti,
sto cercando nel codice del kernel il codice che implementa questo comando


tc filter add dev eth2 parent ffff: protocol ip prio 1 u32 match ip src 0.0.0.0/0 police rate $1 burst $2 drop flowid :1

ho provato con il codice police.c in net/sched ma sembra non essere quello.
ho bisongo di sapere quel è il codice perchè devo implementarci un proc file.

Grazie anticipatamente

ilsensine
30-08-2006, 08:55
E' probabilmente qualche sorta di ioctl.
Ti do una dritta che mi è stata utile diverse volte: per sapere quali syscall e ioctl utilizza un comando, niente di meglio che uno strace:
strace -f -o strace.out <programma> <argomenti>

ilsensine
30-08-2006, 09:33
Comunque, visto che sei interessato a parti del kernel abbastanza complicate, ti consiglio di chiedere direttamente agli esperti.

Questa è la mailing list netdev del kernel:
http://vger.kernel.org/vger-lists.html#netdev
dove puoi spiegare le tue necessità e chiedere consigli su come procedere.

Per questioni generali su come scrivere codice per il kernel, ti consiglio di chiedere a questa mailing list:
http://www.kernelnewbies.org/MailingList

francowr
30-08-2006, 13:46
ciao,
innanzituto grazie per l'attenzione e le risposte.
purtroppo però facendo lo strace non sono riuscito a capire il codice invocato.
Lo allego:

execve("/sbin/tc", ["tc", "filter", "add", "dev", "eth0", "parent", "ffff:", "protocol", "ip", "prio", "1", "u32", "match", "ip", "src", "0.0.0.0/0", "police", "rate", "3000", "burst", "75", "drop", "flowid", ":1"], [/* 65 vars */]) = 0
uname({sys="Linux", node="localhost", ...}) = 0
brk(0) = 0x806b000
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7feb000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=71532, ...}) = 0
old_mmap(NULL, 71532, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fd9000
close(3) = 0
open("/lib/libresolv.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@$\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=63188, ...}) = 0
old_mmap(NULL, 75944, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7fc6000
old_mmap(0xb7fd5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe000) = 0xb7fd5000
old_mmap(0xb7fd7000, 6312, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fd7000
close(3) = 0
open("/lib/tls/libm.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0203\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=136904, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fc5000
old_mmap(NULL, 139424, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7fa2000
old_mmap(0xb7fc3000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x20000) = 0xb7fc3000
close(3) = 0
open("/lib/libdl.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\v\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=9508, ...}) = 0
old_mmap(NULL, 12392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f9e000
old_mmap(0xb7fa0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0xb7fa0000
close(3) = 0
open("/lib/tls/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000O\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1209384, ...}) = 0
old_mmap(NULL, 1219740, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e74000
mprotect(0xb7f97000, 27804, PROT_NONE) = 0
old_mmap(0xb7f98000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x123000) = 0xb7f98000
old_mmap(0xb7f9c000, 7324, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f9c000
close(3) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e73000
mprotect(0xb7f98000, 4096, PROT_READ) = 0
mprotect(0xb8000000, 4096, PROT_READ) = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e736c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) =0
munmap(0xb7fd9000, 71532) = 0
brk(0) = 0x806b000
brk(0x808c000) = 0x808c000
open("/proc/net/psched", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fea000
read(3, "000fa000 000f4240 000f4240 00000"..., 1024) = 36
close(3) = 0
munmap(0xb7fea000, 4096) = 0
open("/usr/lib/tc/f_u32.so", O_RDONLY) = -1 ENOENT (No such file or directory)
socket(PF_NETLINK, SOCK_RAW, 0) = 3
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [32768], 4) = 0
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=20310, groups=00000000}, [12]) = 0
time(NULL) = 1156935921
sendto(3, "\24\0\0\0\22\0\1\3\362p\365D\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\344\0\0\0\20\0\2\0\362p\365DVO\0\0\0 \4\3\1\0\0\0I\0\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 924
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\362p\365DVO\0\0\0\0\0\0\1\0\0\0I\0\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 20
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\240\4\0\0,\0\5\6\363p\365D\0\0\0\0\0\0\0\0\2\0\0\0\0\0"..., 1184}], msg_controllen=0, msg_flags=0}, 0) = 1184
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$\0\0\0\2\0\0\0\363p\365DVO\0\0\352\377\377\377\240\4\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 36
dup(2) = 5
fcntl64(5, F_GETFL) = 0x2 (flags O_RDWR)
fstat64(5, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fea000
_llseek(5, 0, 0xbfff6a60, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(5, "RTNETLINK answers: Invalid argum"..., 36RTNETLINK answers: Invalid argument
) = 36
close(5) = 0
munmap(0xb7fea000, 4096) = 0
write(2, "We have an error talking to the "..., 39We have an error talking to the kernel
) = 39
close(3) = 0
exit_group(2) = ?

Il codice dovrebbe quasi sicuramente essere contenuto in net/sched e qui non trovo questa directory
Ma magari qualcun ne capisce più di em e uardandolo capisce quale è

Ho provato a iscrivermi al rpimo dei due link consigliati, ma non mi invia la mail di iscrizione.

Grazie ancora!
Ciao

Franco

ilsensine
30-08-2006, 14:32
mmm dialoga tramite netlink con qualcuno. Vai a capire ora con chi...

Ho provato a iscrivermi al rpimo dei due link consigliati, ma non mi invia la mail di iscrizione.
umm cliccando su "subscribe" non ti si apre un messaggio già pronto per essere inviato?

francowr
30-08-2006, 14:46
si ma poi la mail inviata non arriva a destinazione...
ci ho provato due volte e mi miene inviata una mail di delivery statis notification
grazie di nuovo
ciao

ilsensine
30-08-2006, 15:17
Mah strano...non vorrei che il tuo server di posta è bloccato, perché reputato a "rischio spam".
Comunque credo che la lista sia aperta a tutti, puoi ugualmente mandare messaggi a [email protected] (se arrivano :D )
Specifica che non sei iscritto e di tenerti in CC nelle risposte.

francowr
30-08-2006, 20:21
hai ragione, con un altra mail arrivano! ora posto li il problema!

francowr
30-08-2006, 20:26
no mi sono sbagliato, anche con questo indirizzo è stato considerato spam
adesso invio la mail a [email protected]
ciao

francowr
30-08-2006, 20:43
niente non riesco a far passare nessuna mail! mannaggia!!!

ilsensine
31-08-2006, 10:46
Ricorda di inviare mail in plain/text, non in html.

francowr
02-09-2006, 01:19
alla fine sono riuscito a mandare questa fatidica mail, ma ancora nessuna risposta illuminante.

continuando a cerca sul web ricado sempre i police.c

a questo punto sto anche a pensare che sbaglio qualcosa di banale nella creazione del proc file e ho allegato il codice zippato di police.c modificato, se magari qualcuno è esperto di proc file, può notare l'errore al volo
grazie di nuovo!
CIAO!!!

francowr
02-09-2006, 03:26
mi hanno risposto [email protected]
sembra che il problema stia nel make menuconfig.

To build the code you need to alter your kernel options under 'make
menuconfig' Networking, Networking Options, Qos and/or fair queueing,
Actions must be selected and then Traffic Police.

purtroppo Traffic Police è selezionato ma non c'è M che significa "modularized featured", quindi non so adesso ho postato loro anche questo, ma temo che devo cambiare versione di linux...