LINUX.ORG.RU

Отслеживание дропов на udp сокете

 , ,


0

1

Есть /proc/net/udp в котором полезная информация в виде количества дропов на UDP сокете.

Хорошая штука, но иногда сокетов на одном мультикасте два и отличить один от другого сложно.

можно ли каким-нибудь GET_SOCKOPT-ом снимать статистику по дропам с самого сокета?

В последний раз когда ковырял сокеты, то в структуре был sk_drops. Вот в ченджлоге пишут:

Up until kernel 2.6.32, getsockopt(fd, SOL_PACKET, PACKET_STATISTICS,
    ...) [skipped] 

drop_n_acct:
            po->stats.tp_drops = atomic_inc_return(&sk->sk_drops);

Вот это должно работать:

	if (!getsockopt(fd,SOL_PACKET,PACKET_STATISTICS,(char *)&st,&len)) {
		fprintf(stderr, "recieved %u packets, dropped %u\n",
			st.tp_packets, st.tp_drops);
	}

http://www.scaramanga.co.uk/code-fu/lincap.c

xpahos ★★★★★ ()
Ответ на: комментарий от max_lapshin

хм, оно работает только с PF_PACKET, т.е. UDP фактически придется слепить самому.

xpahos ★★★★★ ()

Эта инфа есть в /proc/net/udp

inode можно получить через /proc/self/fd/N -> socket:[inode]

Но дропы могут быть раньше ( на уровне сетевого адаптера ).

vel ★★★★★ ()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от max_lapshin

Дык сделать патч по аналогии с af_packet и заслать в kernel.org :)

Если бы в /proc/net/{udp,tcp} были бы еще счетчики и pid-ы процессов, то было бы еще лучше.

vel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.