12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright: (c) 2000 United States Government as represented by the 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Secretary of the Navy. All rights reserved. 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that the following conditions 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the documentation and/or other materials provided with the 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distribution. 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. The names of the authors may not be used to endorse or promote 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * products derived from this software without specific prior 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * written permission. 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This code unmangles RX packets. RX is the mutant form of RPC that AFS 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * uses to communicate between clients and servers. 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * In this code, I mainly concern myself with decoding the AFS calls, not 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * with the guts of RX, per se. 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Bah. If I never look at rx_packet.h again, it will be too soon. 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Ken Hornstein <kenh@cmf.nrl.navy.mil> 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "@(#) $Header: /tcpdump/master/tcpdump/print-rx.c,v 1.42 2008-07-01 07:44:50 guy Exp $"; 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdlib.h> 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h" 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "rx.h" 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ip.h" 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rx_types[] = { 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_DATA, "data" }, 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_ACK, "ack" }, 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_BUSY, "busy" }, 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_ABORT, "abort" }, 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_ACKALL, "ackall" }, 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_CHALLENGE, "challenge" }, 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_RESPONSE, "response" }, 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_DEBUG, "debug" }, 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_PARAMS, "params" }, 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_PACKET_TYPE_VERSION, "version" }, 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct double_tok { 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int flag; /* Rx flag */ 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int packetType; /* Packet type */ 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *s; /* Flag string */ 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} rx_flags[] = { 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_CLIENT_INITIATED, 0, "client-init" }, 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_REQUEST_ACK, 0, "req-ack" }, 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_LAST_PACKET, 0, "last-pckt" }, 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_MORE_PACKETS, 0, "more-pckts" }, 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_FREE_PACKET, 0, "free-pckt" }, 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_SLOW_START_OK, RX_PACKET_TYPE_ACK, "slow-start" }, 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RX_JUMBO_PACKET, RX_PACKET_TYPE_DATA, "jumbogram" } 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok fs_req[] = { 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 130, "fetch-data" }, 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 131, "fetch-acl" }, 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 132, "fetch-status" }, 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 133, "store-data" }, 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 134, "store-acl" }, 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 135, "store-status" }, 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 136, "remove-file" }, 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 137, "create-file" }, 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 138, "rename" }, 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 139, "symlink" }, 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 140, "link" }, 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 141, "makedir" }, 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 142, "rmdir" }, 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 143, "oldsetlock" }, 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 144, "oldextlock" }, 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 145, "oldrellock" }, 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 146, "get-stats" }, 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 147, "give-cbs" }, 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 148, "get-vlinfo" }, 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 149, "get-vlstats" }, 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 150, "set-vlstats" }, 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 151, "get-rootvl" }, 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 152, "check-token" }, 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 153, "get-time" }, 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 154, "nget-vlinfo" }, 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 155, "bulk-stat" }, 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 156, "setlock" }, 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 157, "extlock" }, 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 158, "rellock" }, 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 159, "xstat-ver" }, 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 160, "get-xstat" }, 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 161, "dfs-lookup" }, 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 162, "dfs-flushcps" }, 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 163, "dfs-symlink" }, 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 220, "residency" }, 12153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65536, "inline-bulk-status" }, 12253f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65537, "fetch-data-64" }, 12353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65538, "store-data-64" }, 12453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65539, "give-up-all-cbs" }, 12553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65540, "get-caps" }, 12653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65541, "cb-rx-conn-addr" }, 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13053f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok cb_req[] = { 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 204, "callback" }, 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 205, "initcb" }, 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 206, "probe" }, 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 207, "getlock" }, 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 208, "getce" }, 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 209, "xstatver" }, 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 210, "getxstat" }, 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 211, "initcb2" }, 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 212, "whoareyou" }, 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 213, "initcb3" }, 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 214, "probeuuid" }, 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 215, "getsrvprefs" }, 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 216, "getcellservdb" }, 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 217, "getlocalcell" }, 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 218, "getcacheconf" }, 14653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65536, "getce64" }, 14753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65537, "getcellbynum" }, 14853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65538, "tellmeaboutyourself" }, 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok pt_req[] = { 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 500, "new-user" }, 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 501, "where-is-it" }, 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 502, "dump-entry" }, 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 503, "add-to-group" }, 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 504, "name-to-id" }, 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 505, "id-to-name" }, 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 506, "delete" }, 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 507, "remove-from-group" }, 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 508, "get-cps" }, 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 509, "new-entry" }, 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 510, "list-max" }, 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 511, "set-max" }, 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 512, "list-entry" }, 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 513, "change-entry" }, 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 514, "list-elements" }, 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 515, "same-mbr-of" }, 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 516, "set-fld-sentry" }, 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 517, "list-owned" }, 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 518, "get-cps2" }, 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 519, "get-host-cps" }, 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 520, "update-entry" }, 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 521, "list-entries" }, 17553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 530, "list-super-groups" }, 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 17953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok vldb_req[] = { 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 501, "create-entry" }, 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 502, "delete-entry" }, 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 503, "get-entry-by-id" }, 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 504, "get-entry-by-name" }, 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 505, "get-new-volume-id" }, 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 506, "replace-entry" }, 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 507, "update-entry" }, 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 508, "setlock" }, 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 509, "releaselock" }, 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 510, "list-entry" }, 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 511, "list-attrib" }, 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 512, "linked-list" }, 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 513, "get-stats" }, 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 514, "probe" }, 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 515, "get-addrs" }, 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 516, "change-addr" }, 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 517, "create-entry-n" }, 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 518, "get-entry-by-id-n" }, 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 519, "get-entry-by-name-n" }, 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 520, "replace-entry-n" }, 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 521, "list-entry-n" }, 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 522, "list-attrib-n" }, 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 523, "linked-list-n" }, 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 524, "update-entry-by-name" }, 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 525, "create-entry-u" }, 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 526, "get-entry-by-id-u" }, 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 527, "get-entry-by-name-u" }, 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 528, "replace-entry-u" }, 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 529, "list-entry-u" }, 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 530, "list-attrib-u" }, 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 531, "linked-list-u" }, 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 532, "regaddr" }, 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 533, "get-addrs-u" }, 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 534, "list-attrib-n2" }, 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok kauth_req[] = { 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1, "auth-old" }, 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 21, "authenticate" }, 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 22, "authenticate-v2" }, 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2, "change-pw" }, 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 3, "get-ticket-old" }, 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 23, "get-ticket" }, 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 4, "set-pw" }, 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 5, "set-fields" }, 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 6, "create-user" }, 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 7, "delete-user" }, 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 8, "get-entry" }, 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9, "list-entry" }, 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10, "get-stats" }, 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 11, "debug" }, 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 12, "get-pw" }, 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 13, "get-random-key" }, 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 14, "unlock" }, 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 15, "lock-status" }, 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok vol_req[] = { 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 100, "create-volume" }, 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 101, "delete-volume" }, 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 102, "restore" }, 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 103, "forward" }, 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 104, "end-trans" }, 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 105, "clone" }, 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 106, "set-flags" }, 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 107, "get-flags" }, 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 108, "trans-create" }, 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 109, "dump" }, 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 110, "get-nth-volume" }, 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 111, "set-forwarding" }, 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 112, "get-name" }, 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 113, "get-status" }, 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 114, "sig-restore" }, 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 115, "list-partitions" }, 2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 116, "list-volumes" }, 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 117, "set-id-types" }, 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 118, "monitor" }, 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 119, "partition-info" }, 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 120, "reclone" }, 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 121, "list-one-volume" }, 2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 122, "nuke" }, 2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 123, "set-date" }, 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 124, "x-list-volumes" }, 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 125, "x-list-one-volume" }, 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 126, "set-info" }, 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 127, "x-list-partitions" }, 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 128, "forward-multiple" }, 26953f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65536, "convert-ro" }, 27053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65537, "get-size" }, 27153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 65538, "dump-v2" }, 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok bos_req[] = { 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 80, "create-bnode" }, 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 81, "delete-bnode" }, 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 82, "set-status" }, 2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 83, "get-status" }, 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 84, "enumerate-instance" }, 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 85, "get-instance-info" }, 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 86, "get-instance-parm" }, 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 87, "add-superuser" }, 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 88, "delete-superuser" }, 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 89, "list-superusers" }, 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 90, "list-keys" }, 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 91, "add-key" }, 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 92, "delete-key" }, 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 93, "set-cell-name" }, 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 94, "get-cell-name" }, 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 95, "get-cell-host" }, 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 96, "add-cell-host" }, 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 97, "delete-cell-host" }, 2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 98, "set-t-status" }, 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 99, "shutdown-all" }, 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 100, "restart-all" }, 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 101, "startup-all" }, 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 102, "set-noauth-flag" }, 2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 103, "re-bozo" }, 3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 104, "restart" }, 3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 105, "start-bozo-install" }, 3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 106, "uninstall" }, 3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 107, "get-dates" }, 3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 108, "exec" }, 3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 109, "prune" }, 3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 110, "set-restart-time" }, 3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 111, "get-restart-time" }, 3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 112, "start-bozo-log" }, 3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 113, "wait-all" }, 3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 114, "get-instance-strings" }, 3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 115, "get-restricted" }, 3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 116, "set-restricted" }, 3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 31653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok ubik_req[] = { 3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10000, "vote-beacon" }, 3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10001, "vote-debug-old" }, 3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10002, "vote-sdebug-old" }, 3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10003, "vote-getsyncsite" }, 3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10004, "vote-debug" }, 3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10005, "vote-sdebug" }, 32353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 10006, "vote-xdebug" }, 32453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 10007, "vote-xsdebug" }, 3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20000, "disk-begin" }, 3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20001, "disk-commit" }, 3272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20002, "disk-lock" }, 3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20003, "disk-write" }, 3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20004, "disk-getversion" }, 3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20005, "disk-getfile" }, 3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20006, "disk-sendfile" }, 3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20007, "disk-abort" }, 3332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20008, "disk-releaselocks" }, 3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20009, "disk-truncate" }, 3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20010, "disk-probe" }, 3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20011, "disk-writev" }, 3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20012, "disk-interfaceaddr" }, 3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 20013, "disk-setversion" }, 3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 3412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define VOTE_LOW 10000 34353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define VOTE_HIGH 10007 3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DISK_LOW 20000 3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DISK_HIGH 20013 3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 34753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok cb_types[] = { 3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1, "exclusive" }, 3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2, "shared" }, 3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 3, "dropped" }, 3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 35453f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok ubik_lock_types[] = { 3552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1, "read" }, 3562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2, "write" }, 3572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 3, "wait" }, 3582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 3592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 3602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char *voltype[] = { "read-write", "read-only", "backup" }; 3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 36353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok afs_fs_errors[] = { 3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 101, "salvage volume" }, 3652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 102, "no such vnode" }, 3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 103, "no such volume" }, 3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 104, "volume exist" }, 3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 105, "no service" }, 3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 106, "volume offline" }, 3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 107, "voline online" }, 3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 108, "diskfull" }, 3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 109, "diskquota exceeded" }, 3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 110, "volume busy" }, 3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 111, "volume moved" }, 3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 112, "AFS IO error" }, 3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { -100, "restarting fileserver" }, 3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL } 3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Reasons for acknowledging a packet 3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 38453f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok rx_ack_reasons[] = { 3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1, "ack requested" }, 3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2, "duplicate packet" }, 3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 3, "out of sequence" }, 3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 4, "exceeds window" }, 3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 5, "no buffer space" }, 3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 6, "ping" }, 3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 7, "ping response" }, 3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 8, "delay" }, 3932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9, "idle" }, 3942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL }, 3952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 3962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 3982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Cache entries we keep around so we can figure out the RX opcode 3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * numbers for replies. This allows us to make sense of RX reply packets. 4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rx_cache_entry { 4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t callnum; /* Call number (net order) */ 4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct in_addr client; /* client IP address (net order) */ 4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct in_addr server; /* server IP address (net order) */ 4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int dport; /* server port (host order) */ 4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short serviceId; /* Service identifier (net order) */ 4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t opcode; /* RX opcode (host order) */ 4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RX_CACHE_SIZE 64 4122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct rx_cache_entry rx_cache[RX_CACHE_SIZE]; 4142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int rx_cache_next = 0; 4162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int rx_cache_hint = 0; 4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void rx_cache_insert(const u_char *, const struct ip *, int); 4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int rx_cache_find(const struct rx_header *, const struct ip *, 4192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int, int32_t *); 4202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void fs_print(const u_char *, int); 4222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void fs_reply_print(const u_char *, int, int32_t); 4232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void acl_print(u_char *, int, u_char *); 4242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void cb_print(const u_char *, int); 4252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void cb_reply_print(const u_char *, int, int32_t); 4262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void prot_print(const u_char *, int); 4272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void prot_reply_print(const u_char *, int, int32_t); 4282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void vldb_print(const u_char *, int); 4292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void vldb_reply_print(const u_char *, int, int32_t); 4302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void kauth_print(const u_char *, int); 4312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void kauth_reply_print(const u_char *, int, int32_t); 4322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void vol_print(const u_char *, int); 4332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void vol_reply_print(const u_char *, int, int32_t); 4342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void bos_print(const u_char *, int); 4352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void bos_reply_print(const u_char *, int, int32_t); 4362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void ubik_print(const u_char *); 4372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void ubik_reply_print(const u_char *, int, int32_t); 4382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void rx_ack_print(const u_char *, int); 4402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int is_ubik(u_int32_t); 4422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 4442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle the rx-level packet. See if we know what port it's going to so 4452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * we can peek at the afs call inside 4462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 4472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 4492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrx_print(register const u_char *bp, int length, int sport, int dport, 4502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_char *bp2) 4512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 4522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct rx_header *rxh; 4532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 4542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int32_t opcode; 4552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp < (int)sizeof (struct rx_header)) { 4572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rx] (%d)", length); 4582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 4622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rx %s", tok2str(rx_types, "type %d", rxh->type)); 4642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag) { 4662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int firstflag = 0; 4672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 1) 4692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" cid %08x call# %d", 4702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int) EXTRACT_32BITS(&rxh->cid), 4712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int) EXTRACT_32BITS(&rxh->callNumber)); 4722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" seq %d ser %d", 4742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int) EXTRACT_32BITS(&rxh->seq), 4752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int) EXTRACT_32BITS(&rxh->serial)); 4762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 2) 4782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" secindex %d serviceid %hu", 4792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int) rxh->securityIndex, 4802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(&rxh->serviceId)); 4812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 1) 4832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < NUM_RX_FLAGS; i++) { 4842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->flags & rx_flags[i].flag && 4852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (!rx_flags[i].packetType || 4862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh->type == rx_flags[i].packetType)) { 4872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!firstflag) { 4882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstflag = 1; 4892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" "); 4902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 4912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(","); 4922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("<%s>", rx_flags[i].s); 4942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 4992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Try to handle AFS calls that we know about. Check the destination 5002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * port and make sure it's a data packet. Also, make sure the 5012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * seq number is 1 (because otherwise it's a continuation packet, 5022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * and we can't interpret that). Also, seems that reply packets 5032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * do not have the client-init flag set, so we check for that 5042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * as well. 5052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 5062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA && 5082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(&rxh->seq) == 1 && 5092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh->flags & RX_CLIENT_INITIATED) { 5102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 5122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Insert this call into the call cache table, so we 5132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * have a chance to print out replies 5142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 5152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rx_cache_insert(bp, (const struct ip *) bp2, dport); 5172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (dport) { 5192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case FS_RX_PORT: /* AFS file service */ 5202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fs_print(bp, length); 5212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case CB_RX_PORT: /* AFS callback service */ 5232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cb_print(bp, length); 5242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case PROT_RX_PORT: /* AFS protection service */ 5262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project prot_print(bp, length); 5272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case VLDB_RX_PORT: /* AFS VLDB service */ 5292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vldb_print(bp, length); 5302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case KAUTH_RX_PORT: /* AFS Kerberos auth service */ 5322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project kauth_print(bp, length); 5332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case VOL_RX_PORT: /* AFS Volume service */ 5352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vol_print(bp, length); 5362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case BOS_RX_PORT: /* AFS BOS service */ 5382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bos_print(bp, length); 5392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 5412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 5422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 5452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it's a reply (client-init is _not_ set, but seq is one) 5462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * then look it up in the cache. If we find it, call the reply 5472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * printing functions Note that we handle abort packets here, 5482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * because printing out the return code can be useful at times. 5492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 5502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (((rxh->type == RX_PACKET_TYPE_DATA && 5522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(&rxh->seq) == 1) || 5532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh->type == RX_PACKET_TYPE_ABORT) && 5542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (rxh->flags & RX_CLIENT_INITIATED) == 0 && 5552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rx_cache_find(rxh, (const struct ip *) bp2, 5562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sport, &opcode)) { 5572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (sport) { 5592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case FS_RX_PORT: /* AFS file service */ 5602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fs_reply_print(bp, length, opcode); 5612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case CB_RX_PORT: /* AFS callback service */ 5632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cb_reply_print(bp, length, opcode); 5642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case PROT_RX_PORT: /* AFS PT service */ 5662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project prot_reply_print(bp, length, opcode); 5672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case VLDB_RX_PORT: /* AFS VLDB service */ 5692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vldb_reply_print(bp, length, opcode); 5702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case KAUTH_RX_PORT: /* AFS Kerberos auth service */ 5722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project kauth_reply_print(bp, length, opcode); 5732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case VOL_RX_PORT: /* AFS Volume service */ 5752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vol_reply_print(bp, length, opcode); 5762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case BOS_RX_PORT: /* AFS BOS service */ 5782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bos_reply_print(bp, length, opcode); 5792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 5802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 5812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 5822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 5852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it's an RX ack packet, then use the appropriate ack decoding 5862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * function (there isn't any service-specific information in the 5872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ack packet, so we can use one for all AFS services) 5882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 5892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (rxh->type == RX_PACKET_TYPE_ACK) 5912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rx_ack_print(bp, length); 5922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" (%d)", length); 5952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 5982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Insert an entry into the cache. Taken from print-nfs.c 5992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 6002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 6022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrx_cache_insert(const u_char *bp, const struct ip *ip, int dport) 6032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 6042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_cache_entry *rxent; 6052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct rx_header *rxh = (const struct rx_header *) bp; 6062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) 6082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 6092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent = &rx_cache[rx_cache_next]; 6112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (++rx_cache_next >= RX_CACHE_SIZE) 6132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rx_cache_next = 0; 6142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->callnum = rxh->callNumber; 6162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->client = ip->ip_src; 6172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->server = ip->ip_dst; 6182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->dport = dport; 6192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->serviceId = rxh->serviceId; 6202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->opcode = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 6212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 6242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Lookup an entry in the cache. Also taken from print-nfs.c 6252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 6262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Note that because this is a reply, we're looking at the _source_ 6272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * port. 6282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 6292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int 6312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrx_cache_find(const struct rx_header *rxh, const struct ip *ip, int sport, 6322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int32_t *opcode) 6332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 6342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 6352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_cache_entry *rxent; 6362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t clip = ip->ip_dst.s_addr; 6372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t sip = ip->ip_src.s_addr; 6382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Start the search where we last left off */ 6402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = rx_cache_hint; 6422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project do { 6432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent = &rx_cache[i]; 6442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxent->callnum == rxh->callNumber && 6452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->client.s_addr == clip && 6462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->server.s_addr == sip && 6472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->serviceId == rxh->serviceId && 6482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxent->dport == sport) { 6492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* We got a match! */ 6512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rx_cache_hint = i; 6532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *opcode = rxent->opcode; 6542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(1); 6552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 65653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (++i >= RX_CACHE_SIZE) 6572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = 0; 6582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } while (i != rx_cache_hint); 6592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Our search failed */ 6612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(0); 6622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 6652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * These extrememly grody macros handle the printing of various AFS stuff. 6662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 6672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define FIDOUT() { unsigned long n1, n2, n3; \ 6692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t) * 3); \ 6702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n1 = EXTRACT_32BITS(bp); \ 6712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 6722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n2 = EXTRACT_32BITS(bp); \ 6732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 6742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n3 = EXTRACT_32BITS(bp); \ 6752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 6762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" fid %d/%d/%d", (int) n1, (int) n2, (int) n3); \ 6772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define STROUT(MAX) { unsigned int i; \ 6802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); \ 6812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); \ 6822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i > (MAX)) \ 6832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; \ 6842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 6852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" \""); \ 6862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (fn_printn(bp, i, snapend)) \ 6872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; \ 6882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\""); \ 6892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += ((i + sizeof(int32_t) - 1) / sizeof(int32_t)) * sizeof(int32_t); \ 6902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define INTOUT() { int i; \ 6932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); \ 6942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = (int) EXTRACT_32BITS(bp); \ 6952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 6962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %d", i); \ 6972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define UINTOUT() { unsigned long i; \ 7002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); \ 7012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); \ 7022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 7032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %lu", i); \ 7042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 70653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define UINT64OUT() { u_int64_t i; \ 70753f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK2(bp[0], sizeof(u_int64_t)); \ 70853f17a9db278d33517d9888dd77848f554522a38JP Abgrall i = EXTRACT_64BITS(bp); \ 70953f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(u_int64_t); \ 71053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" %" PRIu64, i); \ 71153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 71253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DATEOUT() { time_t t; struct tm *tm; char str[256]; \ 7142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); \ 7152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project t = (time_t) EXTRACT_32BITS(bp); \ 7162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 7172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tm = localtime(&t); \ 7182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strftime(str, 256, "%Y/%m/%d %T", tm); \ 7192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", str); \ 7202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define STOREATTROUT() { unsigned long mask, i; \ 7232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], (sizeof(int32_t)*6)); \ 7242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project mask = EXTRACT_32BITS(bp); bp += sizeof(int32_t); \ 7252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (mask) printf (" StoreStatus"); \ 7262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (mask & 1) { printf(" date"); DATEOUT(); } \ 7272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else bp += sizeof(int32_t); \ 7282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); bp += sizeof(int32_t); \ 7292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (mask & 2) printf(" owner %lu", i); \ 7302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); bp += sizeof(int32_t); \ 7312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (mask & 4) printf(" group %lu", i); \ 7322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); bp += sizeof(int32_t); \ 7332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (mask & 8) printf(" mode %lo", i & 07777); \ 7342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); bp += sizeof(int32_t); \ 7352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (mask & 16) printf(" segsize %lu", i); \ 7362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* undocumented in 3.3 docu */ \ 7372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (mask & 1024) printf(" fsync"); \ 7382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define UBIK_VERSIONOUT() {int32_t epoch; int32_t counter; \ 7412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t) * 2); \ 7422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project epoch = EXTRACT_32BITS(bp); \ 7432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 7442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project counter = EXTRACT_32BITS(bp); \ 7452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 7462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %d.%d", epoch, counter); \ 7472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define AFSUUIDOUT() {u_int32_t temp; int i; \ 7502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 11*sizeof(u_int32_t)); \ 7512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project temp = EXTRACT_32BITS(bp); \ 7522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(u_int32_t); \ 7532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %08x", temp); \ 7542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project temp = EXTRACT_32BITS(bp); \ 7552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(u_int32_t); \ 7562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%04x", temp); \ 7572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project temp = EXTRACT_32BITS(bp); \ 7582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(u_int32_t); \ 7592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%04x", temp); \ 7602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 8; i++) { \ 7612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project temp = EXTRACT_32BITS(bp); \ 7622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(u_int32_t); \ 7632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%02x", (unsigned char) temp); \ 7642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } \ 7652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 7682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This is the sickest one of all 7692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 7702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define VECOUT(MAX) { u_char *sp; \ 7722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_char s[AFSNAMEMAX]; \ 7732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int k; \ 7742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((MAX) + 1 > sizeof(s)) \ 7752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; \ 7762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], (MAX) * sizeof(int32_t)); \ 7772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sp = s; \ 7782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (k = 0; k < (MAX); k++) { \ 7792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *sp++ = (u_char) EXTRACT_32BITS(bp); \ 7802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); \ 7812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } \ 7822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s[(MAX)] = '\0'; \ 7832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" \""); \ 7842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fn_print(s, NULL); \ 7852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\""); \ 7862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 78853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DESTSERVEROUT() { unsigned long n1, n2, n3; \ 78953f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK2(bp[0], sizeof(int32_t) * 3); \ 79053f17a9db278d33517d9888dd77848f554522a38JP Abgrall n1 = EXTRACT_32BITS(bp); \ 79153f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(int32_t); \ 79253f17a9db278d33517d9888dd77848f554522a38JP Abgrall n2 = EXTRACT_32BITS(bp); \ 79353f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(int32_t); \ 79453f17a9db278d33517d9888dd77848f554522a38JP Abgrall n3 = EXTRACT_32BITS(bp); \ 79553f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(int32_t); \ 79653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" server %d:%d:%d", (int) n1, (int) n2, (int) n3); \ 79753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 79853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 8002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle calls to the AFS file service (fs) 8012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 8022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 8042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfs_print(register const u_char *bp, int length) 8052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 8062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int fs_op; 8072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long i; 8082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 8102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 8112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) { 8132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 8142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 8172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 8182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from fsint/afsint.xg 8192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 8202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fs_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 8222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" fs call %s", tok2str(fs_req, "op#%d", fs_op)); 8242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 8262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out arguments to some of the AFS calls. This stuff is 8272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * all from afsint.xg 8282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 8292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header) + 4; 8312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 8332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Sigh. This is gross. Ritchie forgive me. 8342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 8352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (fs_op) { 8372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 130: /* Fetch data */ 8382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" offset"); 8402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 8412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" length"); 8422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 8432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 131: /* Fetch ACL */ 8452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 132: /* Fetch Status */ 8462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 143: /* Old set lock */ 8472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 144: /* Old extend lock */ 8482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 145: /* Old release lock */ 8492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 156: /* Set lock */ 8502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 157: /* Extend lock */ 8512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 158: /* Release lock */ 8522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 135: /* Store status */ 8552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STOREATTROUT(); 8572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 133: /* Store data */ 8592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STOREATTROUT(); 8612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" offset"); 8622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 8632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" length"); 8642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 8652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" flen"); 8662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 8672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 134: /* Store ACL */ 8692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 8702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char a[AFSOPAQUEMAX+1]; 8712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 8732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); 8742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 8752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], i); 8762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(AFSOPAQUEMAX, i); 8772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strncpy(a, (char *) bp, i); 8782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project a[i] = '\0'; 8792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project acl_print((u_char *) a, sizeof(a), (u_char *) a + i); 8802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 137: /* Create file */ 8832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 141: /* MakeDir */ 8842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 8862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STOREATTROUT(); 8872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 136: /* Remove file */ 8892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 142: /* Remove directory */ 8902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 8922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 138: /* Rename file */ 8942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" old"); 8952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 8972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" new"); 8982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 8992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 9002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 139: /* Symlink */ 9022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 9032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 9042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" link to"); 9052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 9062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 140: /* Link */ 9082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 9092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 9102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" link to"); 9112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 9122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 148: /* Get volume info */ 9142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 9152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 149: /* Get volume stats */ 9172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 150: /* Set volume stats */ 9182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" volid"); 9192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 9202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 154: /* New get volume info */ 9222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" volname"); 9232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 9242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 155: /* Bulk stat */ 92653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 65536: /* Inline bulk stat */ 9272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long j; 9292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 9302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 9312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 9322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < j; i++) { 9342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 9352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i != j - 1) 9362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(","); 9372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j == 0) 9392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" <none!>"); 9402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 94153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 65537: /* Fetch data 64 */ 94253f17a9db278d33517d9888dd77848f554522a38JP Abgrall FIDOUT(); 94353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" offset"); 94453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINT64OUT(); 94553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" length"); 94653f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINT64OUT(); 94753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 94853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 65538: /* Store data 64 */ 94953f17a9db278d33517d9888dd77848f554522a38JP Abgrall FIDOUT(); 95053f17a9db278d33517d9888dd77848f554522a38JP Abgrall STOREATTROUT(); 95153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" offset"); 95253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINT64OUT(); 95353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" length"); 95453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINT64OUT(); 95553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" flen"); 95653f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINT64OUT(); 95753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 95853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 65541: /* CallBack rx conn address */ 95953f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" addr"); 96053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 9612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 9622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 9632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 9662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 9682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|fs]"); 9692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 9702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 9722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle replies to the AFS file service 9732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 9742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 9762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfs_reply_print(register const u_char *bp, int length, int32_t opcode) 9772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 9782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long i; 9792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 9802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 9822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 9832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 9852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 9872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 9882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from fsint/afsint.xg 9892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 9902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" fs reply %s", tok2str(fs_req, "op#%d", opcode)); 9922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 9942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 9962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, interpret the response 9972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 9982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA) { 10002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (opcode) { 10012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 131: /* Fetch ACL */ 10022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char a[AFSOPAQUEMAX+1]; 10042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 10052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); 10062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 10072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], i); 10082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(AFSOPAQUEMAX, i); 10092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strncpy(a, (char *) bp, i); 10102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project a[i] = '\0'; 10112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project acl_print((u_char *) a, sizeof(a), (u_char *) a + i); 10122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 137: /* Create file */ 10152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 141: /* MakeDir */ 10162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" new"); 10172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 10182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 151: /* Get root volume */ 10202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" root volume"); 10212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(AFSNAMEMAX); 10222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 153: /* Get time */ 10242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DATEOUT(); 10252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 10272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 10282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (rxh->type == RX_PACKET_TYPE_ABORT) { 10302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 10312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 10332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, just print out the return code 10342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 10352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 10362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = (int) EXTRACT_32BITS(bp); 10372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 10382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" error %s", tok2str(afs_fs_errors, "#%d", i)); 10402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 10412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" strange fs reply of type %d", rxh->type); 10422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 10452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 10472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|fs]"); 10482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 10492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 10512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out an AFS ACL string. An AFS ACL is a string that has the 10522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * following format: 10532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 10542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * <positive> <negative> 10552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * <uid1> <aclbits1> 10562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * .... 10572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 10582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * "positive" and "negative" are integers which contain the number of 10592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * positive and negative ACL's in the string. The uid/aclbits pair are 10602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ASCII strings containing the UID/PTS record and and a ascii number 10612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * representing a logical OR of all the ACL permission bits 10622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 10632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 10652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectacl_print(u_char *s, int maxsize, u_char *end) 10662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 10672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int pos, neg, acl; 10682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int n, i; 10692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *user; 10702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char fmt[1024]; 10712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((user = (char *)malloc(maxsize)) == NULL) 10732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 10742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sscanf((char *) s, "%d %d\n%n", &pos, &neg, &n) != 2) 10762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto finish; 10772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s += n; 10792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (s > end) 10812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto finish; 10822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 10842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This wacky order preserves the order used by the "fs" command 10852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 10862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define ACLOUT(acl) \ 10882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (acl & PRSFS_READ) \ 10892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("r"); \ 10902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (acl & PRSFS_LOOKUP) \ 10912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("l"); \ 10922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (acl & PRSFS_INSERT) \ 10932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("i"); \ 10942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (acl & PRSFS_DELETE) \ 10952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("d"); \ 10962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (acl & PRSFS_WRITE) \ 10972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("w"); \ 10982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (acl & PRSFS_LOCK) \ 10992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("k"); \ 11002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (acl & PRSFS_ADMINISTER) \ 11012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("a"); 11022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < pos; i++) { 11042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project snprintf(fmt, sizeof(fmt), "%%%ds %%d\n%%n", maxsize - 1); 11052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sscanf((char *) s, fmt, user, &acl, &n) != 2) 11062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto finish; 11072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s += n; 11082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" +{"); 11092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fn_print((u_char *)user, NULL); 11102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" "); 11112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ACLOUT(acl); 11122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("}"); 11132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (s > end) 11142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto finish; 11152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < neg; i++) { 11182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project snprintf(fmt, sizeof(fmt), "%%%ds %%d\n%%n", maxsize - 1); 11192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sscanf((char *) s, fmt, user, &acl, &n) != 2) 11202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto finish; 11212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s += n; 11222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" -{"); 11232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fn_print((u_char *)user, NULL); 11242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" "); 11252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ACLOUT(acl); 11262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("}"); 11272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (s > end) 11282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto finish; 11292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfinish: 11322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project free(user); 11332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 11342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#undef ACLOUT 11372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 11392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle calls to the AFS callback service 11402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 11412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 11432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectcb_print(register const u_char *bp, int length) 11442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int cb_op; 11462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long i; 11472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 11492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 11502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) { 11522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 11532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 11562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 11572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from fsint/afscbint.xg 11582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 11592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cb_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 11612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" cb call %s", tok2str(cb_req, "op#%d", cb_op)); 11632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header) + 4; 11652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 11672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 11682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from fsint/afscbint.xg 11692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 11702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (cb_op) { 11722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 204: /* Callback */ 11732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 11742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long j, t; 11752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 11762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 11772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 11782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < j; i++) { 11802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project FIDOUT(); 11812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i != j - 1) 11822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(","); 11832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j == 0) 11862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" <none!>"); 11872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 11892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 11902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j != 0) 11922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(";"); 11932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < j; i++) { 11952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" ver"); 11962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 11972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" expires"); 11982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DATEOUT(); 11992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 12002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project t = EXTRACT_32BITS(bp); 12012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 12022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(cb_types, "type %d", t); 12032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 214: { 12062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" afsuuid"); 12072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project AFSUUIDOUT(); 12082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 12092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 12112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 12122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 12172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|cb]"); 12182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 12192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 12212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle replies to the AFS Callback Service 12222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 12232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 12252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectcb_reply_print(register const u_char *bp, int length, int32_t opcode) 12262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 12272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 12282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 12302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 12332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 12352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 12362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from fsint/afscbint.xg 12372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 12382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" cb reply %s", tok2str(cb_req, "op#%d", opcode)); 12402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 12422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 12442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, interpret the response. 12452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 12462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA) 12482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (opcode) { 12492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 213: /* InitCallBackState3 */ 12502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project AFSUUIDOUT(); 12512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 12522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 12532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 12542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 12562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 12572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, just print out the return code 12582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 12592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" errcode"); 12602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 12612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 12662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|cb]"); 12672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 12682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 12702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle calls to the AFS protection database server 12712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 12722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 12742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprot_print(register const u_char *bp, int length) 12752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 12762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long i; 12772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int pt_op; 12782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 12802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) { 12832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 12842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 12872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 12882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from ptserver/ptint.xg 12892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 12902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pt_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 12922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" pt"); 12942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ubik(pt_op)) { 12962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ubik_print(bp); 12972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" call %s", tok2str(pt_req, "op#%d", pt_op)); 13012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 13032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Decode some of the arguments to the PT calls 13042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 13052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header) + 4; 13072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (pt_op) { 13092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 500: /* I New User */ 13102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(PRNAMEMAX); 13112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" id"); 13122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" oldid"); 13142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 501: /* Where is it */ 13172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 506: /* Delete */ 13182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 508: /* Get CPS */ 13192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 512: /* List entry */ 13202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 514: /* List elements */ 13212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 517: /* List owned */ 13222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 518: /* Get CPS2 */ 13232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 519: /* Get host CPS */ 132453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 530: /* List super groups */ 13252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" id"); 13262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 502: /* Dump entry */ 13292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" pos"); 13302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 503: /* Add to group */ 13332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 507: /* Remove from group */ 13342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 515: /* Is a member of? */ 13352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" uid"); 13362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" gid"); 13382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 504: /* Name to ID */ 13412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 13422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long j; 13432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 13442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 13452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 13462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 13482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Who designed this chicken-shit protocol? 13492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 13502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Each character is stored as a 32-bit 13512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * integer! 13522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 13532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < j; i++) { 13552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project VECOUT(PRNAMEMAX); 13562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j == 0) 13582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" <none!>"); 13592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 505: /* Id to name */ 13622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 13632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long j; 13642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" ids:"); 13652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 13662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); 13672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 13682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (j = 0; j < i; j++) 13692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j == 0) 13712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" <none!>"); 13722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 509: /* New entry */ 13752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(PRNAMEMAX); 13762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" flag"); 13772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" oid"); 13792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 511: /* Set max */ 13822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" id"); 13832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" gflag"); 13852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 513: /* Change entry */ 13882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" id"); 13892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(PRNAMEMAX); 13912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" oldid"); 13922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" newid"); 13942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 520: /* Update entry */ 13972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" id"); 13982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 13992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(PRNAMEMAX); 14002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 14012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 14022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 14032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 14072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 14092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|pt]"); 14102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 14112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 14132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle replies to the AFS protection service 14142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 14152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 14172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprot_reply_print(register const u_char *bp, int length, int32_t opcode) 14182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 14192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 14202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long i; 14212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length < (int)sizeof(struct rx_header)) 14232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 14242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 14262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 14282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 14292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from ptserver/ptint.xg. Check to see if it's a 14302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Ubik call, however. 14312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 14322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" pt"); 14342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ubik(opcode)) { 14362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ubik_reply_print(bp, length, opcode); 14372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 14382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" reply %s", tok2str(pt_req, "op#%d", opcode)); 14412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 14432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 14452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, interpret the response 14462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 14472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA) 14492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (opcode) { 14502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 504: /* Name to ID */ 14512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 14522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long j; 14532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" ids:"); 14542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 14552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); 14562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 14572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (j = 0; j < i; j++) 14582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 14592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j == 0) 14602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" <none!>"); 14612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 14632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 505: /* ID to name */ 14642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 14652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long j; 14662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 14672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 14682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 14692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 14712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Who designed this chicken-shit protocol? 14722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 14732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Each character is stored as a 32-bit 14742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * integer! 14752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 14762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < j; i++) { 14782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project VECOUT(PRNAMEMAX); 14792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j == 0) 14812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" <none!>"); 14822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 14842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 508: /* Get CPS */ 14852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 514: /* List elements */ 14862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 517: /* List owned */ 14872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 518: /* Get CPS2 */ 14882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 519: /* Get host CPS */ 14892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 14902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long j; 14912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 14922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 14932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 14942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < j; i++) { 14952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 14962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (j == 0) 14982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" <none!>"); 14992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 15002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 15012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 510: /* List max */ 15022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" maxuid"); 15032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 15042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" maxgid"); 15052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 15062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 15072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 15082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 15092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 15102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 15112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 15122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, just print out the return code 15132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 15142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" errcode"); 15152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 15162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 15172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 15192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 15212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|pt]"); 15222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 15232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 15252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle calls to the AFS volume location database service 15262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 15272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 15292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvldb_print(register const u_char *bp, int length) 15302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 15312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int vldb_op; 15322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long i; 15332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 15352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 15362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) { 15382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 15392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 15402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 15422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 15432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from vlserver/vldbint.xg 15442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 15452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vldb_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 15472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" vldb"); 15492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ubik(vldb_op)) { 15512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ubik_print(bp); 15522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 15532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 15542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" call %s", tok2str(vldb_req, "op#%d", vldb_op)); 15552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 15572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Decode some of the arguments to the VLDB calls 15582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 15592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header) + 4; 15612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (vldb_op) { 15632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 501: /* Create new volume */ 15642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 517: /* Create entry N */ 15652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project VECOUT(VLNAMEMAX); 15662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 15672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 502: /* Delete entry */ 15682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 503: /* Get entry by ID */ 15692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 507: /* Update entry */ 15702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 508: /* Set lock */ 15712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 509: /* Release lock */ 15722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 518: /* Get entry by ID N */ 15732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" volid"); 15742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 15752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 15762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); 15772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 15782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i <= 2) 15792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" type %s", voltype[i]); 15802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 15812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 504: /* Get entry by name */ 15822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 519: /* Get entry by name N */ 15832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 524: /* Update entry by name */ 15842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 527: /* Get entry by name U */ 15852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(VLNAMEMAX); 15862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 15872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 505: /* Get new vol id */ 15882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" bump"); 15892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 15902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 15912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 506: /* Replace entry */ 15922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 520: /* Replace entry N */ 15932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" volid"); 15942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 15952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 15962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = EXTRACT_32BITS(bp); 15972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 15982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i <= 2) 15992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" type %s", voltype[i]); 16002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project VECOUT(VLNAMEMAX); 16012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 16022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 510: /* List entry */ 16032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 521: /* List entry N */ 16042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" index"); 16052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 16062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 16072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 16082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 16092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 16102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 16122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 16142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|vldb]"); 16152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 16162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 16182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle replies to the AFS volume location database service 16192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 16202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 16222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvldb_reply_print(register const u_char *bp, int length, int32_t opcode) 16232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 16242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 16252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned long i; 16262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length < (int)sizeof(struct rx_header)) 16282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 16292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 16312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 16332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 16342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from vlserver/vldbint.xg. Check to see if it's a 16352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Ubik call, however. 16362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 16372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" vldb"); 16392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ubik(opcode)) { 16412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ubik_reply_print(bp, length, opcode); 16422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 16432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 16442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" reply %s", tok2str(vldb_req, "op#%d", opcode)); 16462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 16482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 16502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, interpret the response 16512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 16522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 16532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA) 16542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (opcode) { 16552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 510: /* List entry */ 16562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" count"); 16572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 16582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" nextindex"); 16592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 16602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 503: /* Get entry by id */ 16612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 504: /* Get entry by name */ 16622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { unsigned long nservers, j; 16632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project VECOUT(VLNAMEMAX); 16642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 16652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 16662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" numservers"); 16672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 16682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nservers = EXTRACT_32BITS(bp); 16692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 16702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %lu", nservers); 16712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" servers"); 16722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 8; i++) { 16732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 16742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < nservers) 16752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", 16762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project intoa(((struct in_addr *) bp)->s_addr)); 16772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 16782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 16792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" partitions"); 16802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 8; i++) { 16812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 16822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 16832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < nservers && j <= 26) 16842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %c", 'a' + (int)j); 16852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (i < nservers) 16862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %lu", j); 16872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 16882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 16892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 8 * sizeof(int32_t)); 16902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += 8 * sizeof(int32_t); 16912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rwvol"); 16922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 16932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rovol"); 16942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 16952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" backup"); 16962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 16972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 16982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 16992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 505: /* Get new volume ID */ 17002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" newvol"); 17012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 17022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 17032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 521: /* List entry */ 17042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 529: /* List entry U */ 17052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" count"); 17062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 17072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" nextindex"); 17082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 17092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 518: /* Get entry by ID N */ 17102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 519: /* Get entry by name N */ 17112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { unsigned long nservers, j; 17122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project VECOUT(VLNAMEMAX); 17132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" numservers"); 17142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 17152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nservers = EXTRACT_32BITS(bp); 17162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 17172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %lu", nservers); 17182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" servers"); 17192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 13; i++) { 17202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 17212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < nservers) 17222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %s", 17232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project intoa(((struct in_addr *) bp)->s_addr)); 17242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 17252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" partitions"); 17272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 13; i++) { 17282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 17292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 17302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < nservers && j <= 26) 17312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %c", 'a' + (int)j); 17322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (i < nservers) 17332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %lu", j); 17342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 17352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 13 * sizeof(int32_t)); 17372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += 13 * sizeof(int32_t); 17382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rwvol"); 17392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 17402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rovol"); 17412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 17422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" backup"); 17432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 17442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 17462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 526: /* Get entry by ID U */ 17472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 527: /* Get entry by name U */ 17482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { unsigned long nservers, j; 17492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project VECOUT(VLNAMEMAX); 17502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" numservers"); 17512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 17522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nservers = EXTRACT_32BITS(bp); 17532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 17542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %lu", nservers); 17552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" servers"); 17562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 13; i++) { 17572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < nservers) { 17582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" afsuuid"); 17592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project AFSUUIDOUT(); 17602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 17612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 44); 17622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += 44; 17632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4 * 13); 17662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += 4 * 13; 17672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" partitions"); 17682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 13; i++) { 17692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 17702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = EXTRACT_32BITS(bp); 17712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < nservers && j <= 26) 17722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %c", 'a' + (int)j); 17732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (i < nservers) 17742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %lu", j); 17752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 17762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 13 * sizeof(int32_t)); 17782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += 13 * sizeof(int32_t); 17792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rwvol"); 17802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 17812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rovol"); 17822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 17832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" backup"); 17842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 17852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 17872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 17882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 17902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 17912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 17922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, just print out the return code 17932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 17942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" errcode"); 17952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 17962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 17972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 17982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 17992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 18012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|vldb]"); 18022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 18032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 18052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle calls to the AFS Kerberos Authentication service 18062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 18072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 18092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectkauth_print(register const u_char *bp, int length) 18102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 18112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int kauth_op; 18122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 18142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 18152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) { 18172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 18182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 18192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 18212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 18222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from kauth/kauth.rg 18232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 18242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project kauth_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 18262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" kauth"); 18282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ubik(kauth_op)) { 18302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ubik_print(bp); 18312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 18322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 18332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" call %s", tok2str(kauth_req, "op#%d", kauth_op)); 18362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 18382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Decode some of the arguments to the KA calls 18392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 18402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header) + 4; 18422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (kauth_op) { 18442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 1: /* Authenticate old */; 18452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 21: /* Authenticate */ 18462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 22: /* Authenticate-V2 */ 18472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 2: /* Change PW */ 18482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 5: /* Set fields */ 18492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 6: /* Create user */ 18502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 7: /* Delete user */ 18512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 8: /* Get entry */ 18522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 14: /* Unlock */ 18532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 15: /* Lock status */ 18542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" principal"); 18552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 18582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 3: /* GetTicket-old */ 18592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 23: /* GetTicket */ 18602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 18612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 18622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" kvno"); 18632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 18642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" domain"); 18652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(int32_t)); 18672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = (int) EXTRACT_32BITS(bp); 18682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 18692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], i); 18702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += i; 18712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" principal"); 18722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 18752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 18762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 4: /* Set Password */ 18772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" principal"); 18782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" kvno"); 18812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 18822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 18832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 12: /* Get password */ 18842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" name"); 18852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(KANAMEMAX); 18862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 18872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 18882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 18892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 18902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 18922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 18942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|kauth]"); 18952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 18962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 18972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 18982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle replies to the AFS Kerberos Authentication Service 18992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 19002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 19022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectkauth_reply_print(register const u_char *bp, int length, int32_t opcode) 19032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 19042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 19052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 19072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 19082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 19102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 19122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 19132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from kauth/kauth.rg 19142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 19152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" kauth"); 19172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ubik(opcode)) { 19192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ubik_reply_print(bp, length, opcode); 19202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 19212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 19222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" reply %s", tok2str(kauth_req, "op#%d", opcode)); 19242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 19262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 19282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, interpret the response. 19292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 19302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA) 19322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Well, no, not really. Leave this for later */ 19332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 19342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 19352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 19362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, just print out the return code 19372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 19382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" errcode"); 19392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 19402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 19412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 19432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 19452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|kauth]"); 19462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 19472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 19492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle calls to the AFS Volume location service 19502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 19512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 19532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvol_print(register const u_char *bp, int length) 19542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 19552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int vol_op; 19562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 19582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 19592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) { 19612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 19622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 19632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 19652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 19662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from volser/volint.xg 19672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 19682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project vol_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 19702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" vol call %s", tok2str(vol_req, "op#%d", vol_op)); 19722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 197353f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(struct rx_header) + 4; 19742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 197553f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch (vol_op) { 197653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 100: /* Create volume */ 197753f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" partition"); 197853f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 197953f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" name"); 198053f17a9db278d33517d9888dd77848f554522a38JP Abgrall STROUT(AFSNAMEMAX); 198153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" type"); 198253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 198353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" parent"); 198453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 198553f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 198653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 101: /* Delete volume */ 198753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 107: /* Get flags */ 198853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" trans"); 198953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 199053f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 199153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 102: /* Restore */ 199253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" totrans"); 199353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 199453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" flags"); 199553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 199653f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 199753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 103: /* Forward */ 199853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromtrans"); 199953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 200053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromdate"); 200153f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 200253f17a9db278d33517d9888dd77848f554522a38JP Abgrall DESTSERVEROUT(); 200353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" desttrans"); 200453f17a9db278d33517d9888dd77848f554522a38JP Abgrall INTOUT(); 200553f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 200653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 104: /* End trans */ 200753f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" trans"); 200853f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 200953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 201053f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 105: /* Clone */ 201153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" trans"); 201253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 201353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" purgevol"); 201453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 201553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" newtype"); 201653f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 201753f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" newname"); 201853f17a9db278d33517d9888dd77848f554522a38JP Abgrall STROUT(AFSNAMEMAX); 201953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 202053f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 106: /* Set flags */ 202153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" trans"); 202253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 202353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" flags"); 202453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 202553f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 202653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 108: /* Trans create */ 202753f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" vol"); 202853f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 202953f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" partition"); 203053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 203153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" flags"); 203253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 203353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 203453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 109: /* Dump */ 203553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 655537: /* Get size */ 203653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromtrans"); 203753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 203853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromdate"); 203953f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 204053f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 204153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 110: /* Get n-th volume */ 204253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" index"); 204353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 204453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 204553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 111: /* Set forwarding */ 204653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" tid"); 204753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 204853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" newsite"); 204953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 205053f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 205153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 112: /* Get name */ 205253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 113: /* Get status */ 205353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" tid"); 205453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 205553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 114: /* Signal restore */ 205653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" name"); 205753f17a9db278d33517d9888dd77848f554522a38JP Abgrall STROUT(AFSNAMEMAX); 205853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" type"); 205953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 206053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" pid"); 206153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 206253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" cloneid"); 206353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 206453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 206553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 116: /* List volumes */ 206653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" partition"); 206753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 206853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" flags"); 206953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 207053f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 207153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 117: /* Set id types */ 207253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" tid"); 207353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 207453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" name"); 207553f17a9db278d33517d9888dd77848f554522a38JP Abgrall STROUT(AFSNAMEMAX); 207653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" type"); 207753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 207853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" pid"); 207953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 208053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" clone"); 208153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 208253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" backup"); 208353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 208453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 208553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 119: /* Partition info */ 208653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" name"); 208753f17a9db278d33517d9888dd77848f554522a38JP Abgrall STROUT(AFSNAMEMAX); 208853f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 208953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 120: /* Reclone */ 209053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" tid"); 209153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 209253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 209353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 121: /* List one volume */ 209453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 122: /* Nuke volume */ 209553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 124: /* Extended List volumes */ 209653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 125: /* Extended List one volume */ 209753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 65536: /* Convert RO to RW volume */ 209853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" partid"); 209953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 210053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" volid"); 210153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 210253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 210353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 123: /* Set date */ 210453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" tid"); 210553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 210653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" date"); 210753f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 210853f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 210953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 126: /* Set info */ 211053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" tid"); 211153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 211253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 211353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 128: /* Forward multiple */ 211453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromtrans"); 211553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 211653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromdate"); 211753f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 211853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 211953f17a9db278d33517d9888dd77848f554522a38JP Abgrall unsigned long i, j; 212053f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK2(bp[0], 4); 212153f17a9db278d33517d9888dd77848f554522a38JP Abgrall j = EXTRACT_32BITS(bp); 212253f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(int32_t); 212353f17a9db278d33517d9888dd77848f554522a38JP Abgrall for (i = 0; i < j; i++) { 212453f17a9db278d33517d9888dd77848f554522a38JP Abgrall DESTSERVEROUT(); 212553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (i != j - 1) 212653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(","); 212753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 212853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (j == 0) 212953f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" <none!>"); 213053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 213153f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 213253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 65538: /* Dump version 2 */ 213353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromtrans"); 213453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 213553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" fromdate"); 213653f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 213753f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" flags"); 213853f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 213953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 214053f17a9db278d33517d9888dd77848f554522a38JP Abgrall default: 214153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ; 214253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 21432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 21442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 21462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|vol]"); 21472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 21482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 21502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle replies to the AFS Volume Service 21512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 21522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 21542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvol_reply_print(register const u_char *bp, int length, int32_t opcode) 21552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 21562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 21572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 21592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 21602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 21622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 21642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 21652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from volser/volint.xg 21662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 21672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" vol reply %s", tok2str(vol_req, "op#%d", opcode)); 21692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 21712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 21732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, interpret the response. 21742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 21752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 217653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (rxh->type == RX_PACKET_TYPE_DATA) { 217753f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch (opcode) { 217853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 100: /* Create volume */ 217953f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" volid"); 218053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 218153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" trans"); 218253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 218353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 218453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 104: /* End transaction */ 218553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 218653f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 218753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 105: /* Clone */ 218853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" newvol"); 218953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 219053f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 219153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 107: /* Get flags */ 219253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 219353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 219453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 108: /* Transaction create */ 219553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" trans"); 219653f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 219753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 219853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 110: /* Get n-th volume */ 219953f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" volume"); 220053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 220153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" partition"); 220253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 220353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 220453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 112: /* Get name */ 220553f17a9db278d33517d9888dd77848f554522a38JP Abgrall STROUT(AFSNAMEMAX); 220653f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 220753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 113: /* Get status */ 220853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" volid"); 220953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 221053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" nextuniq"); 221153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 221253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" type"); 221353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 221453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" parentid"); 221553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 221653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" clone"); 221753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 221853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" backup"); 221953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 222053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" restore"); 222153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 222253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" maxquota"); 222353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 222453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" minquota"); 222553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 222653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" owner"); 222753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 222853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" create"); 222953f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 223053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" access"); 223153f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 223253f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" update"); 223353f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 223453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" expire"); 223553f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 223653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" backup"); 223753f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 223853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" copy"); 223953f17a9db278d33517d9888dd77848f554522a38JP Abgrall DATEOUT(); 224053f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 224153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 115: /* Old list partitions */ 224253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 224353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 116: /* List volumes */ 224453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case 121: /* List one volume */ 224553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 224653f17a9db278d33517d9888dd77848f554522a38JP Abgrall unsigned long i, j; 224753f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK2(bp[0], 4); 224853f17a9db278d33517d9888dd77848f554522a38JP Abgrall j = EXTRACT_32BITS(bp); 224953f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(int32_t); 225053f17a9db278d33517d9888dd77848f554522a38JP Abgrall for (i = 0; i < j; i++) { 225153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" name"); 225253f17a9db278d33517d9888dd77848f554522a38JP Abgrall VECOUT(32); 225353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" volid"); 225453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UINTOUT(); 225553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" type"); 225653f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += sizeof(int32_t) * 21; 225753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (i != j - 1) 225853f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(","); 225953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 226053f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (j == 0) 226153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf(" <none!>"); 226253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 226353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 226453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 226553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 226653f17a9db278d33517d9888dd77848f554522a38JP Abgrall default: 226753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ; 226853f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 226953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 22702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 22712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, just print out the return code 22722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 22732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" errcode"); 22742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 22752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 22762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 22782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 22802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|vol]"); 22812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 22822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle calls to the AFS BOS service 22852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 22862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 22882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectbos_print(register const u_char *bp, int length) 22892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 22902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int bos_op; 22912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 22932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 22942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend - bp + 1 <= (int)(sizeof(struct rx_header) + sizeof(int32_t))) { 22962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 22972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 22982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 23002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 23012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from bozo/bosint.xg 23022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 23032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bos_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 23052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" bos call %s", tok2str(bos_req, "op#%d", bos_op)); 23072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 23092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Decode some of the arguments to the BOS calls 23102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 23112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header) + 4; 23132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (bos_op) { 23152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 80: /* Create B node */ 23162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" type"); 23172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(BOSNAMEMAX); 23182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" instance"); 23192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(BOSNAMEMAX); 23202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 23212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 81: /* Delete B node */ 23222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 83: /* Get status */ 23232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 85: /* Get instance info */ 23242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 87: /* Add super user */ 23252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 88: /* Delete super user */ 23262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 93: /* Set cell name */ 23272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 96: /* Add cell host */ 23282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 97: /* Delete cell host */ 23292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 104: /* Restart */ 23302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 106: /* Uninstall */ 23312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 108: /* Exec */ 23322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 112: /* Getlog */ 23332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 114: /* Get instance strings */ 23342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(BOSNAMEMAX); 23352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 23362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 82: /* Set status */ 23372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 98: /* Set T status */ 23382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(BOSNAMEMAX); 23392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" status"); 23402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 23412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 23422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 86: /* Get instance parm */ 23432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(BOSNAMEMAX); 23442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" num"); 23452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 23462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 23472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 84: /* Enumerate instance */ 23482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 89: /* List super users */ 23492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 90: /* List keys */ 23502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 91: /* Add key */ 23512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 92: /* Delete key */ 23522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 95: /* Get cell host */ 23532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 23542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 23552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 105: /* Install */ 23562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STROUT(BOSNAMEMAX); 23572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" size"); 23582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 23592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" flags"); 23602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 23612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" date"); 23622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 23632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 23642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 23652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 23662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 23672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 23692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 23712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|bos]"); 23722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 23732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 23752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle replies to the AFS BOS Service 23762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 23772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 23792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectbos_reply_print(register const u_char *bp, int length, int32_t opcode) 23802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 23812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 23822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length <= (int)sizeof(struct rx_header)) 23842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 23852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 23872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 23892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 23902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from volser/volint.xg 23912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 23922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" bos reply %s", tok2str(bos_req, "op#%d", opcode)); 23942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 23962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 23982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, interpret the response. 23992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 24002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA) 24022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Well, no, not really. Leave this for later */ 24032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 24042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 24052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 24062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, just print out the return code 24072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 24082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" errcode"); 24092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 24102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 24112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 24132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 24152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|bos]"); 24162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 24172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 24192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Check to see if this is a Ubik opcode. 24202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 24212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int 24232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectis_ubik(u_int32_t opcode) 24242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 24252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((opcode >= VOTE_LOW && opcode <= VOTE_HIGH) || 24262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (opcode >= DISK_LOW && opcode <= DISK_HIGH)) 24272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(1); 24282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 24292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(0); 24302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 24312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 24332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle Ubik opcodes to any one of the replicated database services 24342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 24352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 24372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectubik_print(register const u_char *bp) 24382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 24392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int ubik_op; 24402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int32_t temp; 24412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 24432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the afs call we're invoking. The table used here was 24442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gleaned from ubik/ubik_int.xg 24452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 24462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ubik_op = EXTRACT_32BITS(bp + sizeof(struct rx_header)); 24482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" ubik call %s", tok2str(ubik_req, "op#%d", ubik_op)); 24502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 24522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Decode some of the arguments to the Ubik calls 24532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 24542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header) + 4; 24562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 24572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (ubik_op) { 24582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 10000: /* Beacon */ 24592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], 4); 24602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project temp = EXTRACT_32BITS(bp); 24612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 24622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" syncsite %s", temp ? "yes" : "no"); 24632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" votestart"); 24642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DATEOUT(); 24652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" dbversion"); 24662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 24672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" tid"); 24682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 24692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 24702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 10003: /* Get sync site */ 24712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" site"); 24722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UINTOUT(); 24732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 24742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20000: /* Begin */ 24752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20001: /* Commit */ 24762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20007: /* Abort */ 24772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20008: /* Release locks */ 24782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20010: /* Writev */ 24792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" tid"); 24802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 24812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 24822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20002: /* Lock */ 24832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" tid"); 24842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 24852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" file"); 24862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 24872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" pos"); 24882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 24892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" length"); 24902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 24912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project temp = EXTRACT_32BITS(bp); 24922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(int32_t); 24932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(ubik_lock_types, "type %d", temp); 24942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 24952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20003: /* Write */ 24962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" tid"); 24972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 24982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" file"); 24992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" pos"); 25012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20005: /* Get file */ 25042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" file"); 25052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20006: /* Send file */ 25082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" file"); 25092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" length"); 25112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" dbversion"); 25132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 25142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20009: /* Truncate */ 25162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" tid"); 25172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 25182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" file"); 25192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" length"); 25212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20012: /* Set version */ 25242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" tid"); 25252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 25262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" oldversion"); 25272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 25282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" newversion"); 25292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 25302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 25322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 25332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 25342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 25362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 25382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|ubik]"); 25392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 25402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 25422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle Ubik replies to any one of the replicated database services 25432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 25442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 25462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectubik_reply_print(register const u_char *bp, int length, int32_t opcode) 25472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 25482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_header *rxh; 25492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length < (int)sizeof(struct rx_header)) 25512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 25522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxh = (struct rx_header *) bp; 25542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 25562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out the ubik call we're invoking. This table was gleaned 25572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * from ubik/ubik_int.xg 25582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 25592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" ubik reply %s", tok2str(ubik_req, "op#%d", opcode)); 25612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 25632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 25652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If it was a data packet, print out the arguments to the Ubik calls 25662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 25672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxh->type == RX_PACKET_TYPE_DATA) 25692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (opcode) { 25702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 10000: /* Beacon */ 25712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" vote no"); 25722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 20004: /* Get version */ 25742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" dbversion"); 25752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project UBIK_VERSIONOUT(); 25762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 25782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ; 25792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 25802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 25822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, print out "yes" it it was a beacon packet (because 25832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * that's how yes votes are returned, go figure), otherwise 25842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * just print out the error code. 25852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 25862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 25882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (opcode) { 25892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 10000: /* Beacon */ 25902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" vote yes until"); 25912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DATEOUT(); 25922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 25932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 25942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" errcode"); 25952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 25962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 25972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 25992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 26012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|ubik]"); 26022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 26032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 26052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Handle RX ACK packets. 26062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 26072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 26092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrx_ack_print(register const u_char *bp, int length) 26102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 26112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct rx_ackPacket *rxa; 26122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i, start, last; 26132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t firstPacket; 26142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length < (int)sizeof(struct rx_header)) 26162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 26172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += sizeof(struct rx_header); 26192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 26212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This may seem a little odd .... the rx_ackPacket structure 26222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * contains an array of individual packet acknowledgements 26232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * (used for selective ack/nack), but since it's variable in size, 26242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * we don't want to truncate based on the size of the whole 26252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * rx_ackPacket structure. 26262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 26272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], sizeof(struct rx_ackPacket) - RX_MAXACKS); 26292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rxa = (struct rx_ackPacket *) bp; 26312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += (sizeof(struct rx_ackPacket) - RX_MAXACKS); 26322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 26342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print out a few useful things from the ack packet structure 26352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 26362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 2) 26382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" bufspace %d maxskew %d", 26392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int) EXTRACT_16BITS(&rxa->bufferSpace), 26402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int) EXTRACT_16BITS(&rxa->maxSkew)); 26412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstPacket = EXTRACT_32BITS(&rxa->firstPacket); 26432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" first %d serial %d reason %s", 26442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstPacket, EXTRACT_32BITS(&rxa->serial), 26452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(rx_ack_reasons, "#%d", (int) rxa->reason)); 26462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 26482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Okay, now we print out the ack array. The way _this_ works 26492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * is that we start at "first", and step through the ack array. 26502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If we have a contiguous range of acks/nacks, try to 26512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * collapse them into a range. 26522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 26532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * If you're really clever, you might have noticed that this 26542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * doesn't seem quite correct. Specifically, due to structure 26552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * padding, sizeof(struct rx_ackPacket) - RX_MAXACKS won't actually 26562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * yield the start of the ack array (because RX_MAXACKS is 255 26572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * and the structure will likely get padded to a 2 or 4 byte 26582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * boundary). However, this is the way it's implemented inside 26592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * of AFS - the start of the extra fields are at 26602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * sizeof(struct rx_ackPacket) - RX_MAXACKS + nAcks, which _isn't_ 26612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the exact start of the ack array. Sigh. That's why we aren't 26622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * using bp, but instead use rxa->acks[]. But nAcks gets added 26632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * to bp after this, so bp ends up at the right spot. Go figure. 26642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 26652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxa->nAcks != 0) { 26672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(bp[0], rxa->nAcks); 26692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 26712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Sigh, this is gross, but it seems to work to collapse 26722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ranges correctly. 26732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 26742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0, start = last = -2; i < rxa->nAcks; i++) 26762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxa->acks[i] == RX_ACK_TYPE_ACK) { 26772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 26792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * I figured this deserved _some_ explanation. 26802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * First, print "acked" and the packet seq 26812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * number if this is the first time we've 26822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * seen an acked packet. 26832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 26842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (last == -2) { 26862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" acked %d", 26872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstPacket + i); 26882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project start = i; 26892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 26902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 26922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Otherwise, if the there is a skip in 26932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the range (such as an nacked packet in 26942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the middle of some acked packets), 26952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * then print the current packet number 26962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * seperated from the last number by 26972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * a comma. 26982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 26992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (last != i - 1) { 27012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(",%d", firstPacket + i); 27022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project start = i; 27032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 27042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 27062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * We always set last to the value of 27072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the last ack we saw. Conversely, start 27082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * is set to the value of the first ack 27092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * we saw in a range. 27102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 27112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project last = i; 27132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 27152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Okay, this bit a code gets executed when 27162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * we hit a nack ... in _this_ case we 27172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * want to print out the range of packets 27182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * that were acked, so we need to print 27192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the _previous_ packet number seperated 27202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * from the first by a dash (-). Since we 27212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * already printed the first packet above, 27222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * just print the final packet. Don't 27232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * do this if there will be a single-length 27242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * range. 27252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 27262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (last == i - 1 && start != last) 27272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("-%d", firstPacket + i - 1); 27282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 27302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * So, what's going on here? We ran off the end of the 27312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ack list, and if we got a range we need to finish it up. 27322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * So we need to determine if the last packet in the list 27332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * was an ack (if so, then last will be set to it) and 27342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * we need to see if the last range didn't start with the 27352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * last packet (because if it _did_, then that would mean 27362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * that the packet number has already been printed and 27372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * we don't need to print it again). 27382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 27392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (last == i - 1 && start != last) 27412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("-%d", firstPacket + i - 1); 27422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 27442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Same as above, just without comments 27452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 27462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0, start = last = -2; i < rxa->nAcks; i++) 27482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rxa->acks[i] == RX_ACK_TYPE_NACK) { 27492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (last == -2) { 27502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" nacked %d", 27512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project firstPacket + i); 27522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project start = i; 27532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (last != i - 1) { 27542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(",%d", firstPacket + i); 27552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project start = i; 27562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 27572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project last = i; 27582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (last == i - 1 && start != last) 27592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("-%d", firstPacket + i - 1); 27602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (last == i - 1 && start != last) 27622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("-%d", firstPacket + i - 1); 27632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += rxa->nAcks; 27652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 27662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 27692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * These are optional fields; depending on your version of AFS, 27702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * you may or may not see them 27712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 27722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define TRUNCRET(n) if (snapend - bp + 1 <= n) return; 27742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 1) { 27762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TRUNCRET(4); 27772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" ifmtu"); 27782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 27792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TRUNCRET(4); 27812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" maxmtu"); 27822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 27832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TRUNCRET(4); 27852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rwind"); 27862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 27872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TRUNCRET(4); 27892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" maxpackets"); 27902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project INTOUT(); 27912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 27922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 27942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 27962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|ack]"); 27972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 27982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#undef TRUNCRET 2799