У вас есть доступ к ntohl()
и друзьям.Просто #include <linux/byteorder/generic.h>
.Используйте его как обычно:
__le32 le_ipaddr = ntohl(be_ipaddr); /* to flip big-endian IP to little-endian */
Также вы можете без проблем печатать IPv4-адрес через специальный спецификатор формата %pI4
в printk()
, например, таким образом:
__be32 ipaddr /*= gain from somewhere IP in network byte order (__be32 means big endian)*/;
printk(KERN_INFO "Got IP: %pI4\n", &ipaddr); /* in network byte order */
printk(KERN_INFO "Got IP: %pI4h\n", &ipaddr); /* in host byte order */
Читайте также:
IP-адрес от sk_buff
Как правильно получить спецификаторы формата printk (от Kernel.org):
Передано по ссылке.
IPv4-адреса
=============
::
% pI4 1.2.3.4
% pi4 001.002.003.004
...
Дополнительные h
, n
, b
,и l
спецификаторы используются для указания адресов хоста, сети, большого или младшего порядка соответственно.Там, где не указан спецификатор, используется стандартный / порядковый порядковый номер по умолчанию.
...
Передано по ссылке.
IPv6-адреса
==============
::
% pI6 0001: 0002: 0003: 0004: 0005: 0006: 0007: 0008
% pi6 00010002000300040005000600070008
% pI6c 1: 2: 3: 4: 5: 6: 7: 8
PS вы можете искать функции, которые выНужны исходные коды ядра Linux, например, на этом сайте: https://elixir.bootlin.com/linux/latest/ident/