@@ -170,41 +170,41 @@ static uint32_t *rpc_add_credentials(uint32_t *p)
170
170
/**************************************************************************
171
171
RPC_LOOKUP - Lookup RPC Port numbers
172
172
**************************************************************************/
173
- static struct rpc_t * rpc_req_prep (void )
174
- {
175
- return (struct rpc_t * )(net_tx_packet + net_eth_hdr_size () +
176
- IP_UDP_HDR_SIZE );
177
- }
178
-
179
- static void rpc_req (int rpc_prog , int rpc_proc , struct rpc_t * rpc_pkt ,
180
- int datalen )
173
+ static void rpc_req (int rpc_prog , int rpc_proc , uint32_t * data , int datalen )
181
174
{
175
+ struct rpc_t rpc_pkt ;
182
176
unsigned long id ;
177
+ uint32_t * p ;
183
178
int pktlen ;
184
179
int sport ;
185
180
186
181
id = ++ rpc_id ;
187
- rpc_pkt -> u .call .id = htonl (id );
188
- rpc_pkt -> u .call .type = htonl (MSG_CALL );
189
- rpc_pkt -> u .call .rpcvers = htonl (2 ); /* use RPC version 2 */
190
- rpc_pkt -> u .call .prog = htonl (rpc_prog );
182
+ rpc_pkt . u .call .id = htonl (id );
183
+ rpc_pkt . u .call .type = htonl (MSG_CALL );
184
+ rpc_pkt . u .call .rpcvers = htonl (2 ); /* use RPC version 2 */
185
+ rpc_pkt . u .call .prog = htonl (rpc_prog );
191
186
switch (rpc_prog ) {
192
187
case PROG_NFS :
193
188
if (supported_nfs_versions & NFSV2_FLAG )
194
- rpc_pkt -> u .call .vers = htonl (2 ); /* NFS v2 */
189
+ rpc_pkt . u .call .vers = htonl (2 ); /* NFS v2 */
195
190
else /* NFSV3_FLAG */
196
- rpc_pkt -> u .call .vers = htonl (3 ); /* NFS v3 */
191
+ rpc_pkt . u .call .vers = htonl (3 ); /* NFS v3 */
197
192
break ;
198
193
case PROG_PORTMAP :
199
194
case PROG_MOUNT :
200
195
default :
201
- /* portmapper is version 2 */
202
- rpc_pkt -> u .call .vers = htonl (2 );
196
+ rpc_pkt .u .call .vers = htonl (2 ); /* portmapper is version 2 */
203
197
}
204
- rpc_pkt -> u .call .proc = htonl (rpc_proc );
198
+ rpc_pkt .u .call .proc = htonl (rpc_proc );
199
+ p = (uint32_t * )& (rpc_pkt .u .call .data );
200
+
201
+ if (datalen )
202
+ memcpy ((char * )p , (char * )data , datalen * sizeof (uint32_t ));
203
+
204
+ pktlen = (char * )p + datalen * sizeof (uint32_t ) - (char * )& rpc_pkt ;
205
205
206
- pktlen = ((char * )& rpc_pkt -> u . call . data - ( char * ) & rpc_pkt ) +
207
- datalen * sizeof ( uint32_t );
206
+ memcpy ((char * )net_tx_packet + net_eth_hdr_size () + IP_UDP_HDR_SIZE ,
207
+ & rpc_pkt . u . data [ 0 ], pktlen );
208
208
209
209
if (rpc_prog == PROG_PORTMAP )
210
210
sport = SUNRPC_PORT ;
@@ -222,32 +222,30 @@ RPC_LOOKUP - Lookup RPC Port numbers
222
222
**************************************************************************/
223
223
static void rpc_lookup_req (int prog , int ver )
224
224
{
225
- uint32_t * data ;
226
- struct rpc_t * rpc_pkt = rpc_req_prep ();
225
+ uint32_t data [16 ];
227
226
228
- data = rpc_pkt -> u .call .data ;
229
227
data [0 ] = 0 ; data [1 ] = 0 ; /* auth credential */
230
228
data [2 ] = 0 ; data [3 ] = 0 ; /* auth verifier */
231
229
data [4 ] = htonl (prog );
232
230
data [5 ] = htonl (ver );
233
231
data [6 ] = htonl (17 ); /* IP_UDP */
234
232
data [7 ] = 0 ;
235
- rpc_req (PROG_PORTMAP , PORTMAP_GETPORT , rpc_pkt , 8 );
233
+ rpc_req (PROG_PORTMAP , PORTMAP_GETPORT , data , 8 );
236
234
}
237
235
238
236
/**************************************************************************
239
237
NFS_MOUNT - Mount an NFS Filesystem
240
238
**************************************************************************/
241
239
static void nfs_mount_req (char * path )
242
240
{
241
+ uint32_t data [1024 ];
243
242
uint32_t * p ;
244
243
int len ;
245
244
int pathlen ;
246
- struct rpc_t * rpc_pkt = rpc_req_prep ();
247
245
248
246
pathlen = strlen (path );
249
247
250
- p = rpc_pkt -> u . call . data ;
248
+ p = & ( data [ 0 ]) ;
251
249
p = rpc_add_credentials (p );
252
250
253
251
* p ++ = htonl (pathlen );
@@ -256,30 +254,30 @@ static void nfs_mount_req(char *path)
256
254
memcpy (p , path , pathlen );
257
255
p += (pathlen + 3 ) / 4 ;
258
256
259
- len = (uint32_t * )p - (uint32_t * )& (rpc_pkt -> u . call . data );
257
+ len = (uint32_t * )p - (uint32_t * )& (data [ 0 ] );
260
258
261
- rpc_req (PROG_MOUNT , MOUNT_ADDENTRY , rpc_pkt , len );
259
+ rpc_req (PROG_MOUNT , MOUNT_ADDENTRY , data , len );
262
260
}
263
261
264
262
/**************************************************************************
265
263
NFS_UMOUNTALL - Unmount all our NFS Filesystems on the Server
266
264
**************************************************************************/
267
265
static void nfs_umountall_req (void )
268
266
{
267
+ uint32_t data [1024 ];
269
268
uint32_t * p ;
270
269
int len ;
271
- struct rpc_t * rpc_pkt = rpc_req_prep ();
272
270
273
271
if ((nfs_server_mount_port == -1 ) || (!fs_mounted ))
274
272
/* Nothing mounted, nothing to umount */
275
273
return ;
276
274
277
- p = rpc_pkt -> u . call . data ;
275
+ p = & ( data [ 0 ]) ;
278
276
p = rpc_add_credentials (p );
279
277
280
- len = (uint32_t * )p - (uint32_t * )& (rpc_pkt -> u . call . data );
278
+ len = (uint32_t * )p - (uint32_t * )& (data [ 0 ] );
281
279
282
- rpc_req (PROG_MOUNT , MOUNT_UMOUNTALL , rpc_pkt , len );
280
+ rpc_req (PROG_MOUNT , MOUNT_UMOUNTALL , data , len );
283
281
}
284
282
285
283
/***************************************************************************
@@ -291,11 +289,11 @@ static void nfs_umountall_req(void)
291
289
**************************************************************************/
292
290
static void nfs_readlink_req (void )
293
291
{
292
+ uint32_t data [1024 ];
294
293
uint32_t * p ;
295
294
int len ;
296
- struct rpc_t * rpc_pkt = rpc_req_prep ();
297
295
298
- p = rpc_pkt -> u . call . data ;
296
+ p = & ( data [ 0 ]) ;
299
297
p = rpc_add_credentials (p );
300
298
301
299
if (supported_nfs_versions & NFSV2_FLAG ) {
@@ -307,24 +305,24 @@ static void nfs_readlink_req(void)
307
305
p += (filefh3_length / 4 );
308
306
}
309
307
310
- len = (uint32_t * )p - (uint32_t * )& (rpc_pkt -> u . call . data );
308
+ len = (uint32_t * )p - (uint32_t * )& (data [ 0 ] );
311
309
312
- rpc_req (PROG_NFS , NFS_READLINK , rpc_pkt , len );
310
+ rpc_req (PROG_NFS , NFS_READLINK , data , len );
313
311
}
314
312
315
313
/**************************************************************************
316
314
NFS_LOOKUP - Lookup Pathname
317
315
**************************************************************************/
318
316
static void nfs_lookup_req (char * fname )
319
317
{
318
+ uint32_t data [1024 ];
320
319
uint32_t * p ;
321
320
int len ;
322
321
int fnamelen ;
323
- struct rpc_t * rpc_pkt = rpc_req_prep ();
324
322
325
323
fnamelen = strlen (fname );
326
324
327
- p = rpc_pkt -> u . call . data ;
325
+ p = & ( data [ 0 ]) ;
328
326
p = rpc_add_credentials (p );
329
327
330
328
if (supported_nfs_versions & NFSV2_FLAG ) {
@@ -336,9 +334,9 @@ static void nfs_lookup_req(char *fname)
336
334
memcpy (p , fname , fnamelen );
337
335
p += (fnamelen + 3 ) / 4 ;
338
336
339
- len = (uint32_t * )p - (uint32_t * )& (rpc_pkt -> u . call . data );
337
+ len = (uint32_t * )p - (uint32_t * )& (data [ 0 ] );
340
338
341
- rpc_req (PROG_NFS , NFS_LOOKUP , rpc_pkt , len );
339
+ rpc_req (PROG_NFS , NFS_LOOKUP , data , len );
342
340
} else { /* NFSV3_FLAG */
343
341
* p ++ = htonl (NFS_FHSIZE ); /* Dir handle length */
344
342
memcpy (p , dirfh , NFS_FHSIZE );
@@ -349,9 +347,9 @@ static void nfs_lookup_req(char *fname)
349
347
memcpy (p , fname , fnamelen );
350
348
p += (fnamelen + 3 ) / 4 ;
351
349
352
- len = (uint32_t * )p - (uint32_t * )& (rpc_pkt -> u . call . data );
350
+ len = (uint32_t * )p - (uint32_t * )& (data [ 0 ] );
353
351
354
- rpc_req (PROG_NFS , NFS3PROC_LOOKUP , rpc_pkt , len );
352
+ rpc_req (PROG_NFS , NFS3PROC_LOOKUP , data , len );
355
353
}
356
354
}
357
355
@@ -360,11 +358,11 @@ NFS_READ - Read File on NFS Server
360
358
**************************************************************************/
361
359
static void nfs_read_req (int offset , int readlen )
362
360
{
361
+ uint32_t data [1024 ];
363
362
uint32_t * p ;
364
363
int len ;
365
- struct rpc_t * rpc_pkt = rpc_req_prep ();
366
364
367
- p = rpc_pkt -> u . call . data ;
365
+ p = & ( data [ 0 ]) ;
368
366
p = rpc_add_credentials (p );
369
367
370
368
if (supported_nfs_versions & NFSV2_FLAG ) {
@@ -383,9 +381,9 @@ static void nfs_read_req(int offset, int readlen)
383
381
* p ++ = 0 ;
384
382
}
385
383
386
- len = (uint32_t * )p - (uint32_t * )& (rpc_pkt -> u . call . data );
384
+ len = (uint32_t * )p - (uint32_t * )& (data [ 0 ] );
387
385
388
- rpc_req (PROG_NFS , NFS_READ , rpc_pkt , len );
386
+ rpc_req (PROG_NFS , NFS_READ , data , len );
389
387
}
390
388
391
389
/**************************************************************************
0 commit comments