static int afscall_set_rxpck_received = 0;
+extern afs_int32 afs_volume_ttl;
+
+/* From afs_util.c */
+extern afs_int32 afs_md5inum;
+
/* This is code which needs to be called once when the first daemon enters
* the client. A non-zero return means an error and AFS should not start.
*/
afs_InitSetup(int preallocs)
{
int code;
+ afs_uint32 host;
if (afs_InitSetup_done)
return EAGAIN;
/* start RX */
if(!afscall_set_rxpck_received)
rx_extraPackets = AFS_NRXPACKETS; /* smaller # of packets */
+
+ host = ntohl(rx_bindhost);
+ afs_warn("afs: Binding rx to %d.%d.%d.%d:%d\n",
+ (host >> 24),
+ (host >> 16) & 0xff,
+ (host >> 8) & 0xff,
+ (host) & 0xff,
+ 7001);
code = rx_InitHost(rx_bindhost, htons(7001));
if (code) {
afs_warn("AFS: RX failed to initialize %d).\n", code);
if (!code) {
mvParam->retval = 0;
/* for reqs where pointers are strings: */
+# ifdef AFS_DARWIN_ENV
if (mvParam->reqtype == AFS_USPC_UMV) {
/* don't copy out random kernel memory */
AFS_COPYOUT(param2, AFSKPTR(parm4),
AFS_COPYOUT(param1, AFSKPTR(parm3),
MIN(namebufsz, strlen((char *)param1)+1), code);
}
+# endif /* AFS_DARWIN_ENV */
AFS_COPYOUT((caddr_t)mvParam, AFSKPTR(parm2),
sizeof(struct afs_uspc_param), code);
}
else if (parm == AFSOP_SET_DYNROOT) {
code = afs_SetDynrootEnable(parm2);
} else if (parm == AFSOP_SET_FAKESTAT) {
- afs_fakestat_enable = parm2;
- code = 0;
+ if (parm2 >= 0 && parm2 <= 2) {
+ afs_fakestat_enable = parm2;
+ code = 0;
+ } else {
+ afs_warn("afs: afsd gave us unknown fakestat value %ld (are afsd "
+ "and libafs running the same version?\n", parm2);
+ code = EINVAL;
+ }
} else if (parm == AFSOP_SET_BACKUPTREE) {
afs_bkvolpref = parm2;
} else if (parm == AFSOP_SET_RXPCK) {
afs_osi_Free(seedbuf, parm3);
}
#endif
+ } else if (parm == AFSOP_SET_INUMCALC) {
+ switch (parm2) {
+ case AFS_INUMCALC_COMPAT:
+ afs_md5inum = 0;
+ code = 0;
+ break;
+ case AFS_INUMCALC_MD5:
+ afs_md5inum = 1;
+ code = 0;
+ break;
+ default:
+ code = EINVAL;
+ }
+ } else if (parm == AFSOP_SET_VOLUME_TTL) {
+ if ((parm2 < AFS_MIN_VOLUME_TTL) || (parm2 > AFS_MAX_VOLUME_TTL)) {
+ code = EFAULT;
+ } else {
+ afs_volume_ttl = parm2;
+ code = 0;
+ }
} else {
code = EINVAL;
}
afs_warn("NetIfPoller... ");
osi_StopNetIfPoller();
#endif
+ rxi_FreeAllPackets();
afs_termState = AFSOP_STOP_COMPLETE;
shutdown_nfsclnt();
#endif
shutdown_afstest();
+ shutdown_dynroot();
shutdown_AFS();
/* The following hold the cm stats */
memset(&afs_cmstats, 0, sizeof(struct afs_CMStats));