/* * Title: arm-ifconfig * Brief: Bring up eth0 and assign it the address 192.168.0.2 * Author: Daniel Godas-Lopez */ /* soc_des = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); */ mov %r0, $2 /* AF_INET */ mov %r1, $2 /* SOCK_DGRAM */ mov %r2, $0 /* IPPRTOTO_IP */ push {%r0, %r1, %r2} mov %r0, $1 /* socket */ mov %r1, %sp svc 0x00900066 add %sp, %sp, $12 mov %r6, %r0 /* r6 = soc_des */ /* ioctl(soc_des, SIOCSIFADDR, &req); */ .if 0 /* r0 == r6 already */ mov %r0, %r6 /* soc_des */ .endif sub %r1, %r1, %r1 sub %r2, %r2, %r2 push { %r1, %r2 } mov %r2, $2 /* AF_INET */ mov %r3, $0x2000000 add %r3, %r3, $0xa800 add %r3, $0xc0 /* addr = 192.168.0.2 */ push { %r2, %r3 } sub %r2, %r2, %r2 sub %r3, %r3, %r3 push { %r1, %r2, %r3 } mov %r3, $0x7400 add %r3, $0x0065 mov %r4, $0x3000 add %r4, $0x0068 add %r3, %r4, lsl $16 /* "eth0" */ push { %r3 } mov %r2, %sp /* struct __kernel_ifreq */ add %sp, $32 mov %r1, $0x8900 add %r1, %r1, $0x16 /* SIOCSIFADDR */ svc 0x00900036 /* ioctl(soc_des, SIOCGIFFLAGS, &req); */ mov %r0, %r6 /* soc_des */ mov %r1, $0x8900 add %r1, %r1, $0x13 /* SIOCGIFFLAGS */ svc 0x00900036 ldr %r3, [%r2, $16] orr %r3, %r3, $1 str %r3, [%r2, $16] /* ifr_flags |= IFF_UP */ /* ioctl(soc_des, SIOCSIFFLAGS, &req); */ mov %r0, %r6 /* soc_des */ mov %r1, $0x8900 add %r1, %r1, $0x14 /* SIOCSIFFLAGS */ svc 0x00900036