From: Dmitry V. Levin Date: Wed, 10 Dec 2008 13:51:40 +0000 (+0000) Subject: 2008-11-11 Dmitry V. Levin X-Git-Tag: v4.5.19~121 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5414bf7ad0f0abfe1bc798bfb0ade2be019af5b1;p=strace 2008-11-11 Dmitry V. Levin * sock.c [LINUX] (sock_ioctl): Parse more SIOCS* ioctls. --- diff --git a/ChangeLog b/ChangeLog index f096911c..1d2cc4af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-11-11 Dmitry V. Levin + + * sock.c [LINUX] (sock_ioctl): Parse more SIOCS* ioctls. + 2008-12-09 Roland McGrath * strace.1 (DIAGNOSTICS): New section, describe exit behavior. diff --git a/sock.c b/sock.c index 187ca5d8..5e2ab57d 100644 --- a/sock.c +++ b/sock.c @@ -134,26 +134,38 @@ sock_ioctl(struct tcb *tcp, long code, long arg) return 1; #ifdef LINUX case SIOCGIFNAME: + case SIOCSIFNAME: case SIOCGIFINDEX: case SIOCGIFADDR: + case SIOCSIFADDR: case SIOCGIFDSTADDR: + case SIOCSIFDSTADDR: case SIOCGIFBRDADDR: + case SIOCSIFBRDADDR: case SIOCGIFNETMASK: + case SIOCSIFNETMASK: case SIOCGIFFLAGS: + case SIOCSIFFLAGS: case SIOCGIFMETRIC: + case SIOCSIFMETRIC: case SIOCGIFMTU: + case SIOCSIFMTU: case SIOCGIFSLAVE: + case SIOCSIFSLAVE: case SIOCGIFHWADDR: + case SIOCSIFHWADDR: case SIOCGIFTXQLEN: + case SIOCSIFTXQLEN: case SIOCGIFMAP: + case SIOCSIFMAP: if (umove(tcp, tcp->u_arg[2], &ifr) < 0) tprintf(", %#lx", tcp->u_arg[2]); else if (syserror(tcp)) { - if (code == SIOCGIFNAME) + if (code == SIOCGIFNAME || code == SIOCSIFNAME) tprintf(", {ifr_index=%d, ifr_name=???}", ifr.ifr_ifindex); else tprintf(", {ifr_name=\"%s\", ???}", ifr.ifr_name); - } else if (code == SIOCGIFNAME) + } else if (code == SIOCGIFNAME || code == SIOCSIFNAME) tprintf(", {ifr_index=%d, ifr_name=\"%s\"}", ifr.ifr_ifindex, ifr.ifr_name); else { @@ -163,15 +175,19 @@ sock_ioctl(struct tcb *tcp, long code, long arg) tprintf("ifr_index=%d", ifr.ifr_ifindex); break; case SIOCGIFADDR: + case SIOCSIFADDR: str = "ifr_addr"; case SIOCGIFDSTADDR: - if (str == NULL) + case SIOCSIFDSTADDR: + if (!str) str = "ifr_dstaddr"; case SIOCGIFBRDADDR: - if (str == NULL) + case SIOCSIFBRDADDR: + if (!str) str = "ifr_broadaddr"; case SIOCGIFNETMASK: - if (str == NULL) + case SIOCSIFNETMASK: + if (!str) str = "ifr_netmask"; tprintf("%s={", str); printxval(addrfams, @@ -185,6 +201,7 @@ sock_ioctl(struct tcb *tcp, long code, long arg) tprintf("}"); break; case SIOCGIFHWADDR: + case SIOCSIFHWADDR: /* XXX Are there other hardware addresses than 6-byte MACs? */ bytes = (unsigned char *) &ifr.ifr_hwaddr.sa_data; @@ -193,22 +210,28 @@ sock_ioctl(struct tcb *tcp, long code, long arg) bytes[3], bytes[4], bytes[5]); break; case SIOCGIFFLAGS: + case SIOCSIFFLAGS: tprintf("ifr_flags="); printflags(iffflags, ifr.ifr_flags, "IFF_???"); break; case SIOCGIFMETRIC: + case SIOCSIFMETRIC: tprintf("ifr_metric=%d", ifr.ifr_metric); break; case SIOCGIFMTU: + case SIOCSIFMTU: tprintf("ifr_mtu=%d", ifr.ifr_mtu); break; case SIOCGIFSLAVE: + case SIOCSIFSLAVE: tprintf("ifr_slave=\"%s\"", ifr.ifr_slave); break; case SIOCGIFTXQLEN: + case SIOCSIFTXQLEN: tprintf("ifr_qlen=%d", ifr.ifr_qlen); break; case SIOCGIFMAP: + case SIOCSIFMAP: tprintf("ifr_map={mem_start=%#lx, " "mem_end=%#lx, base_addr=%#x, " "irq=%u, dma=%u, port=%u}",