IPv6-адрес и порт для печати из структуры inet_sock - PullRequest
3 голосов
/ 14 декабря 2011

Знаете ли вы какой-нибудь способ напечатать в читаемом формате адрес ipv6 и его порт из структуры inet_sock? Мой вопрос состоит из двух частей. Один из них - это члены структуры, которые имеют эту информацию, а второй - как распечатать их в читаемом формате.

Спасибо!

1 Ответ

6 голосов
/ 15 декабря 2011

printk имеет новые модификаторы, которые помогают печатать адреса inet (я думаю, начиная с ядра 2.6.24).Например, вы можете попробовать несколько способов:

//destination address
printk("%pI6 %d\n", my_inet_socket->pinet6->daddr, 
                    ntohs(my_inet_socket->inet_dport));
//source address
printk("%pI6 %d\n", my_inet_socket->pinet6->saddr, 
                    ntohs(my_inet_socket->inet_sport));

Вот сколько у вас есть модификаторов и как они печатают адрес IPv6.Вы можете проверить http://www.kernel.org/doc/Documentation/printk-formats.txt для получения дополнительной информации.

%pI6 0001:0002:0003:0004:0005:0006:0007:0008
%pi6 00010002000300040005000600070008
%pI6c 1:2:3:4:5:6:7:8

Для более старых ядер вам необходимо использовать NIP6 следующим образом:

//destination address
printk(NIP6_FMT " %d\n", NIP6(my_inet_socket->pinet6->daddr), 
                         ntohs(my_inet_socket->inet_dport));
//source address
printk(NIP6_FMT " %d\n", NIP6(my_inet_socket->pinet6->saddr), 
                         ntohs(my_inet_socket->inet_sport));

В качестве последнего примечания вы можете проверитьnet / ipv6 / tcp_ipv6.c из самого ядра.У этого есть тонны примеров.Надеюсь, это поможет вам

...