134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* 234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> 334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * All rights reserved. 434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Redistribution and use in source and binary forms, with or without 634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * modification, are permitted provided that the following conditions 734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * are met: 834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * notice, this list of conditions and the following disclaimer. 1034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 1134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 1234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * documentation and/or other materials provided with the distribution. 1334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 3. The name of the author may not be used to endorse or promote products 1434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * derived from this software without specific prior written permission. 1534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 27f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * $Id$ 2834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */ 2934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 3034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include "defs.h" 3134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 3234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX 3334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/socket.h> 3434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/sockios.h> 3534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else 3634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/socket.h> 3734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/sockio.h> 3834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 3934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <arpa/inet.h> 4034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 4134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#if defined (ALPHA) || defined(SH) || defined(SH64) 4234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_SYS_IOCTL_H 4334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/ioctl.h> 4434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#elif defined(HAVE_IOCTLS_H) 4534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <ioctls.h> 4634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 4734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 4834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <net/if.h> 4934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 5034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat iffflags[] = { 5134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_UP, "IFF_UP" }, 5234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_BROADCAST, "IFF_BROADCAST" }, 5334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_DEBUG, "IFF_DEBUG" }, 5434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_LOOPBACK, "IFF_LOOPBACK" }, 5534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_POINTOPOINT, "IFF_POINTOPOINT" }, 5634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_NOTRAILERS, "IFF_NOTRAILERS" }, 5734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_RUNNING, "IFF_RUNNING" }, 5834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_NOARP, "IFF_NOARP" }, 5934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_PROMISC, "IFF_PROMISC" }, 6034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_ALLMULTI, "IFF_ALLMULTI" }, 6134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_MASTER, "IFF_MASTER" }, 6234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_SLAVE, "IFF_SLAVE" }, 6334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_MULTICAST, "IFF_MULTICAST" }, 6434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_PORTSEL, "IFF_PORTSEL" }, 6534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { IFF_AUTOMEDIA, "IFF_AUTOMEDIA" }, 6634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL } 6734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 6834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 6934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 7034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void 7134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectprint_addr(tcp, addr, ifr) 7234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp; 7334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectlong addr; 7434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct ifreq *ifr; 7534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 7634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (ifr->ifr_addr.sa_family == AF_INET) { 7734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project struct sockaddr_in *sinp; 7834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project sinp = (struct sockaddr_in *) &ifr->ifr_addr; 7934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("inet_addr(\"%s\")", inet_ntoa(sinp->sin_addr)); 8034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else 8134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printstr(tcp, addr, sizeof(ifr->ifr_addr.sa_data)); 8234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} 8334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 8434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint 85f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsock_ioctl(struct tcb *tcp, long code, long arg) 8634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 8734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project struct ifreq ifr; 8834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project struct ifconf ifc; 8934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project const char *str = NULL; 9034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project unsigned char *bytes; 9134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 9234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (entering(tcp)) { 9334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (code == SIOCGIFCONF) { 94f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (umove(tcp, tcp->u_arg[2], &ifc) >= 0 95f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown && ifc.ifc_buf == NULL) 9634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {%d -> ", ifc.ifc_len); 9734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else 9834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {"); 9934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 10034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 10134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 10234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 10334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project switch (code) { 10434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SIOCSHIWAT 10534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCSHIWAT: 10634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 10734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SIOCGHIWAT 10834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGHIWAT: 10934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 11034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SIOCSLOWAT 11134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCSLOWAT: 11234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 11334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SIOCGLOWAT 11434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGLOWAT: 11534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 11634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FIOSETOWN 11734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case FIOSETOWN: 11834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 11934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FIOGETOWN 12034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case FIOGETOWN: 12134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 12234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SIOCSPGRP 12334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCSPGRP: 12434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 12534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SIOCGPGRP 12634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGPGRP: 12734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 12834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SIOCATMARK 12934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCATMARK: 13034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 13134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printnum(tcp, arg, ", %#d"); 13234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 13334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX 13434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFNAME: 135f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFNAME: 13634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFINDEX: 13734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFADDR: 138f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFADDR: 13934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFDSTADDR: 140f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFDSTADDR: 14134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFBRDADDR: 142f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFBRDADDR: 14334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFNETMASK: 144f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFNETMASK: 14534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFFLAGS: 146f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFFLAGS: 14734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFMETRIC: 148f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFMETRIC: 14934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFMTU: 150f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFMTU: 15134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFSLAVE: 152f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFSLAVE: 15334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFHWADDR: 154f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFHWADDR: 155f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCGIFTXQLEN: 156f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFTXQLEN: 157f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCGIFMAP: 158f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFMAP: 159f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (umove(tcp, tcp->u_arg[2], &ifr) < 0) 160f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf(", %#lx", tcp->u_arg[2]); 161f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown else if (syserror(tcp)) { 162f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (code == SIOCGIFNAME || code == SIOCSIFNAME) 16334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {ifr_index=%d, ifr_name=???}", ifr.ifr_ifindex); 16434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else 16534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {ifr_name=\"%s\", ???}", ifr.ifr_name); 166f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } else if (code == SIOCGIFNAME || code == SIOCSIFNAME) 16734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {ifr_index=%d, ifr_name=\"%s\"}", 16834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project ifr.ifr_ifindex, ifr.ifr_name); 16934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else { 17034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {ifr_name=\"%s\", ", ifr.ifr_name); 17134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project switch (code) { 17234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFINDEX: 17334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("ifr_index=%d", ifr.ifr_ifindex); 17434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 17534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFADDR: 176f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFADDR: 17734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project str = "ifr_addr"; 17834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFDSTADDR: 179f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFDSTADDR: 180f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (!str) 18134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project str = "ifr_dstaddr"; 18234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFBRDADDR: 183f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFBRDADDR: 184f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (!str) 18534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project str = "ifr_broadaddr"; 18634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFNETMASK: 187f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFNETMASK: 188f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (!str) 18934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project str = "ifr_netmask"; 19034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("%s={", str); 19134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printxval(addrfams, 19234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project ifr.ifr_addr.sa_family, 193f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown "AF_???"); 19434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", "); 19534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project print_addr(tcp, ((long) tcp->u_arg[2] 19634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project + offsetof (struct ifreq, 19734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project ifr_addr.sa_data)), 19834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project &ifr); 19934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("}"); 20034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 20134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFHWADDR: 202f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFHWADDR: 20334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project /* XXX Are there other hardware addresses 20434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project than 6-byte MACs? */ 20534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project bytes = (unsigned char *) &ifr.ifr_hwaddr.sa_data; 20634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("ifr_hwaddr=%02x:%02x:%02x:%02x:%02x:%02x", 20734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project bytes[0], bytes[1], bytes[2], 20834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project bytes[3], bytes[4], bytes[5]); 20934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 21034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFFLAGS: 211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFFLAGS: 21234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("ifr_flags="); 21334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(iffflags, ifr.ifr_flags, "IFF_???"); 21434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 21534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFMETRIC: 216f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFMETRIC: 21734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("ifr_metric=%d", ifr.ifr_metric); 21834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 21934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFMTU: 220f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFMTU: 22134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("ifr_mtu=%d", ifr.ifr_mtu); 22234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 22334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFSLAVE: 224f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFSLAVE: 22534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("ifr_slave=\"%s\"", ifr.ifr_slave); 22634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 227f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCGIFTXQLEN: 228f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFTXQLEN: 229f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("ifr_qlen=%d", ifr.ifr_qlen); 230f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown break; 231f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCGIFMAP: 232f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown case SIOCSIFMAP: 233f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("ifr_map={mem_start=%#lx, " 234f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown "mem_end=%#lx, base_addr=%#x, " 235f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown "irq=%u, dma=%u, port=%u}", 236f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown ifr.ifr_map.mem_start, 237f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown ifr.ifr_map.mem_end, 238f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (unsigned) ifr.ifr_map.base_addr, 239f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (unsigned) ifr.ifr_map.irq, 240f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (unsigned) ifr.ifr_map.dma, 241f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown (unsigned) ifr.ifr_map.port); 242f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown break; 24334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 24434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("}"); 24534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 24634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 24734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case SIOCGIFCONF: 248f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (umove(tcp, tcp->u_arg[2], &ifc) < 0) { 249f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("???}"); 250f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown return 1; 251f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } 25234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("%d, ", ifc.ifc_len); 253f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (syserror(tcp)) { 25434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("%lx", (unsigned long) ifc.ifc_buf); 25534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else if (ifc.ifc_buf == NULL) { 25634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("NULL"); 25734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else { 25834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project int i; 25934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project unsigned nifra = ifc.ifc_len / sizeof(struct ifreq); 26034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project struct ifreq ifra[nifra]; 261f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown 262f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (umoven(tcp, (unsigned long) ifc.ifc_buf, 263f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown sizeof(ifra), (char *) ifra) < 0) { 264f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown tprintf("%lx}", (unsigned long) ifc.ifc_buf); 265f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown return 1; 266f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown } 26734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("{"); 26834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project for (i = 0; i < nifra; ++i ) { 26934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (i > 0) 27034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", "); 27134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("{\"%s\", {", 27234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project ifra[i].ifr_name); 27334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (verbose(tcp)) { 27434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printxval(addrfams, 27534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project ifra[i].ifr_addr.sa_family, 27634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project "AF_???"); 27734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", "); 27834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project print_addr(tcp, ((long) tcp->u_arg[2] 27934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project + offsetof (struct ifreq, 28034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project ifr_addr.sa_data) 28134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project + ((char *) &ifra[i] 28234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project - (char *) &ifra[0])), 28334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project &ifra[i]); 28434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } else 28534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("..."); 28634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("}}"); 28734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 28834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("}"); 28934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 29034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("}"); 29134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 29234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 29334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project default: 29434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 29534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 29634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} 297