IP4ループバックアドレス値


IP4のループバックアドレスは、先頭が0x7f=127という事です。
static inline bool ipv4_is_loopback(__be32 addr)
{
       return (addr & htonl(0xff000000)) == htonl(0x7f000000);
}

#define htonl(x) ___htonl(x)
#define ___htonl(x) __cpu_to_be32(x)

include/linux/byteorder/big_endian.h
#define __cpu_to_be32(x) ((__force __be32)(__u32)(x))

include/linux/byteorder/little_endian.h
#define __cpu_to_be32(x) ((__force __be32)__swab32((x)))
サンプル(CPUはlittle_endian)
[root@localhost lkm]# cat htonl.c
#include <linux/module.h>

static int __init babakaka_init(void)
{

       printk("%lx:%lx\n",
               (unsigned long)0x11223344, (unsigned long)htonl(0x11223344));
     return -1;
}
module_init(babakaka_init)

[root@localhost lkm]# insmod htonl.ko
insmod: error inserting 'htonl.ko': -1 Operation not permitted

[root@localhost lkm]# dmesg
  :
[ 4854.584807] 11223344:44332211

[root@localhost c]# cat ipaddr.c
#include <stdio.h>

void    main(int argc, char **argv)
{
       int     ip1, ip2, ip3, ip4;

       sscanf(argv[1],"%d.%d.%d.%d",&ip4,&ip3,&ip2,&ip1);
       printf("%08lx:%08lx\n", (long)inet_addr(argv[1]),
                       (long)ip1*0x100*0x100*0x100 + (long)ip2*0x100*0x100 + (long)ip3*0x100 + (long)ip4);
}

[root@localhost c]# ./a.out 127.0.0.0
0000007f:0000007f
[root@localhost c]# ./a.out 127.1.0.0
0000017f:0000017f
[root@localhost c]# ./a.out 127.0.1.0
0001007f:0001007f
[root@localhost c]# ./a.out 127.0.0.1
0100007f:0100007f

最終更新 2016/09/14 17:58:55 - north
(2016/09/14 17:58:55 作成)


検索

アクセス数
3586187
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。