/*
* Title: arm-ifconfig
* Brief: Bring up eth0 and assign it the address 192.168.0.2
* Author: Daniel Godas-Lopez <gmail account dgodas>
*/
/*
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