CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): chunmok (준목)
날 짜 (Date): 2003년 11월 14일 금요일 오전 11시 13분 34초
제 목(Title): Re: [Q] 커널안에서 자기 주소  알기?


장치의 이름(eth0 등)을 이용해서 dev_get_by_name()함수로 net_device 
구조체를 얻으세요.
net_device::ip_ptr를 사용하셔서 in_device::in_ifaddr 구조체를 
따라가시면 될것 같네요.

static int __init ipcheck_init_module(void) 
{
        int re;
        struct net_device *ndp;
        struct in_device *idp;
        struct in_ifaddr *iip;

        printk(KERN_INFO "--> ipcheck_init_module\n" );
        ndp = dev_get_by_name( "eth0" );
        if( ndp )
                printk(KERN_INFO "name=%s\n", ndp->name );
        if( (idp=ndp->ip_ptr) && (iip=idp->ifa_list) )
                printk(KERN_INFO "local=%lX, address=%lX, mask=%lX\n",
                                iip->ifa_local,
                                iip->ifa_address,
                                iip->ifa_mask );
        printk(KERN_INFO "<-- ipcheck_init_module\n" );

        return 0; 
}

위와 같이 하니까 대략 아래와 같이 나오네요.
주소랑 마스크랑 byte ordering이 반대니까, ntohl등으로 변경해서 확인하세요.
name=eth0 
local=4B18939C, address=4B18939C, mask=FFFFFF

[root@paran driver]# ifconfig 
eth0      Link encap:Ethernet HWaddr00:50:56:46:12:89
          inet addr:156.147.24.75 Bcast:156.147.24.255 Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:3187 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1516 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:11 Base address:0x1080
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.