include-afsconfig-before-param-h-20010712
[openafs.git] / src / venus / twiddle.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 RCSID("$Header$");
14
15 #include <rx/xdr.h>
16 #include <sys/ioctl.h>
17 #include <sys/socket.h>
18 #include <netdb.h>
19 #include <errno.h>
20 #include <stdio.h>
21 #include <netinet/in.h>
22 #include <sys/stat.h>
23 #include <afs/stds.h>
24 #include <afs/vice.h>
25 #include <afs/venus.h>
26 #ifdef  AFS_AIX32_ENV
27 #include <signal.h>
28 #endif
29 #undef VIRTUE
30 #undef VICE
31 #include "afs/prs_fs.h"
32 #include <afs/afsint.h>
33 #include <afs/auth.h>
34 #include <afs/cellconfig.h>
35 #include <afs/cmd.h>
36 #include <strings.h>
37
38
39 #define MAXSIZE 2048
40 #define MAXINSIZE 1300    /* pioctl complains if data is larger than this */
41 #define VMSGSIZE 128      /* size of msg buf in volume hdr */
42
43 static char space[MAXSIZE];
44 static char tspace[1024];
45 static struct ubik_client *uclient;
46
47 extern int errno;
48 extern struct cmd_syndesc *cmd_CreateSyntax();
49 static char pn[] = "fs";
50 static int rxInitDone = 0;
51
52 static Twiddle(as) 
53 struct cmd_syndesc *as; {
54     afs_int32 code;
55     struct ViceIoctl blob;
56     struct cmd_item *ti;
57     struct rxparams rxp;
58     int tmp;
59     
60     ti=as->parms[0].items; 
61     if (ti && ti->data) {
62       tmp = atoi (ti->data);
63     }
64     else tmp = 0;
65     rxp.rx_initReceiveWindow = tmp;
66     ti=as->parms[1].items; 
67     if (ti && ti->data) {
68       tmp = atoi (ti->data);
69     }
70     else tmp = 0;
71     rxp.rx_maxReceiveWindow = tmp;
72     ti=as->parms[2].items; 
73     if (ti && ti->data) {
74       tmp = atoi (ti->data);
75     }
76     else tmp = 0;
77     rxp.rx_initSendWindow = tmp;
78     ti=as->parms[3].items; 
79     if (ti && ti->data) {
80       tmp = atoi (ti->data);
81     }
82     else tmp = 0;
83     rxp.rx_maxSendWindow = tmp;
84     ti=as->parms[4].items; 
85     if (ti && ti->data) {
86       tmp = atoi (ti->data);
87     }
88     else tmp = 0;
89     rxp.rxi_nSendFrags = tmp;
90     ti=as->parms[5].items; 
91     if (ti && ti->data) {
92       tmp = atoi (ti->data);
93     }
94     else tmp = 0;
95     rxp.rxi_nRecvFrags = tmp;
96     ti=as->parms[6].items; 
97     if (ti && ti->data) {
98       tmp = atoi (ti->data);
99     }
100     else tmp = 0;
101     rxp.rxi_OrphanFragSize = tmp;
102     ti=as->parms[7].items; 
103     if (ti && ti->data) {
104       tmp = atoi (ti->data);
105     }
106     else tmp = 0;
107     rxp.rx_maxReceiveSize = tmp;
108     ti=as->parms[8].items; 
109     if (ti && ti->data) {
110       tmp = atoi (ti->data);
111     }
112     else tmp = 0;
113     rxp.rx_MyMaxSendSize = tmp;
114
115     blob.in = (char *)&rxp;
116     blob.out = (char *)&rxp;
117     blob.in_size = sizeof(rxp);
118     blob.out_size = sizeof(rxp);
119     code = pioctl(0, VIOC_TWIDDLE, &blob, 1);
120
121     if (code) {
122         Die(code, 0);
123     }
124     return code;
125 }
126
127 #include "AFS_component_version_number.c"
128
129 main(argc, argv)
130 int argc;
131 char **argv; {
132     register afs_int32 code;
133     register struct cmd_syndesc *ts;
134     
135 #ifdef  AFS_AIX32_ENV
136     /*
137      * The following signal action for AIX is necessary so that in case of a 
138      * crash (i.e. core is generated) we can include the user's data section 
139      * in the core dump. Unfortunately, by default, only a partial core is
140      * generated which, in many cases, isn't too useful.
141      */
142     struct sigaction nsa;
143     
144     sigemptyset(&nsa.sa_mask);
145     nsa.sa_handler = SIG_DFL;
146     nsa.sa_flags = SA_FULLDUMP;
147     sigaction(SIGSEGV, &nsa, NULL);
148 #endif
149     /* try to find volume location information */
150     
151
152     ts = cmd_CreateSyntax((char *)0, Twiddle, 0, "adjust rx parms");
153     cmd_AddParm(ts, "-initReceiveWindow ", CMD_SINGLE, CMD_OPTIONAL, "16");
154     cmd_AddParm(ts, "-maxReceiveWindow ", CMD_SINGLE, CMD_OPTIONAL, "16");
155     cmd_AddParm(ts, "-initSendWindow ", CMD_SINGLE, CMD_OPTIONAL, "8");
156     cmd_AddParm(ts, "-maxSendWindow ", CMD_SINGLE, CMD_OPTIONAL, "16");
157     cmd_AddParm(ts, "-nSendFrags ", CMD_SINGLE, CMD_OPTIONAL, "4");
158     cmd_AddParm(ts, "-nRecvFrags ", CMD_SINGLE, CMD_OPTIONAL, "4");
159     cmd_AddParm(ts, "-OrphanFragSize ", CMD_SINGLE, CMD_OPTIONAL, "512");
160     cmd_AddParm(ts, "-maxReceiveSize ", CMD_SINGLE, CMD_OPTIONAL, "");
161     cmd_AddParm(ts, "-MyMaxSendSize ", CMD_SINGLE, CMD_OPTIONAL, "");
162
163     code = cmd_Dispatch(argc, argv);
164     if (rxInitDone) rx_Finalize();
165     
166     exit(code);
167 }
168
169 Die(code, filename)
170     int   code;
171     char *filename;
172 { /*Die*/
173
174     if (errno == EINVAL) {
175         if (filename)
176             fprintf(stderr,"%s: Invalid argument; it is possible that %s is not in AFS.\n", pn, filename);
177         else fprintf(stderr,"%s: Invalid argument.\n", pn);
178     }
179     else if (errno == ENOENT) {
180         if (filename) fprintf(stderr,"%s: File '%s' doesn't exist\n", pn, filename);
181         else fprintf(stderr,"%s: no such file returned\n", pn);
182     }
183     else if (errno == EROFS)  fprintf(stderr,"%s: You can not change a backup or readonly volume\n", pn);
184     else if (errno == EACCES || errno == EPERM) {
185         if (filename) fprintf(stderr,"%s: You don't have the required access rights on '%s'\n", pn, filename);
186         else fprintf(stderr,"%s: You do not have the required rights to do this operation\n", pn);
187     }
188     else {
189         if (filename) fprintf(stderr,"%s:'%s'", pn, filename);
190         else fprintf(stderr,"%s", pn);
191         fprintf(stderr,": %s\n", error_message(errno));
192     }
193 } /*Die*/
194
195
196
197
198
199
200
201