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 из самого ядра.У этого есть тонны примеров.Надеюсь, это поможет вам