]> granicus.if.org Git - strace/commitdiff
2008-11-11 Dmitry V. Levin <ldv@altlinux.org>
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 10 Dec 2008 13:51:40 +0000 (13:51 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 10 Dec 2008 13:51:40 +0000 (13:51 +0000)
* sock.c [LINUX] (sock_ioctl): Parse more SIOCS* ioctls.

ChangeLog
sock.c

index f096911ca1d8cac5445b7cb2abceed6a69cb5693..1d2cc4aff54c96dda64dad2a2957d005aaedb776 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-11-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+       * sock.c [LINUX] (sock_ioctl): Parse more SIOCS* ioctls.
+
 2008-12-09  Roland McGrath  <roland@redhat.com>
 
        * strace.1 (DIAGNOSTICS): New section, describe exit behavior.
diff --git a/sock.c b/sock.c
index 187ca5d86578e54fe25d7276d193e8204e3bb7c1..5e2ab57d90733279988183cf25f06e6be1c8629f 100644 (file)
--- 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}",