static void NfsSend (void) { debug("%s\n", __func__); switch (NfsState) { case STATE_PRCLOOKUP_PROG_MOUNT_REQ: rpc_lookup_req (PROG_MOUNT, 1); break; case STATE_PRCLOOKUP_PROG_NFS_REQ: rpc_lookup_req (PROG_NFS, 2); break; case STATE_MOUNT_REQ: nfs_mount_req (nfs_path); break; case STATE_UMOUNT_REQ: nfs_umountall_req (); break; case STATE_LOOKUP_REQ: nfs_lookup_req (nfs_filename); break; case STATE_READ_REQ: nfs_read_req (nfs_offset, nfs_len); break; case STATE_READLINK_REQ: nfs_readlink_req (); break; } }
/************************************************************************** RPC request dispatcher **************************************************************************/ static void nfs_send(void) { debug("%s\n", __func__); switch (nfs_state) { case STATE_PRCLOOKUP_PROG_MOUNT_REQ: rpc_lookup_req(PROG_MOUNT, 1); break; case STATE_PRCLOOKUP_PROG_NFS_REQ: rpc_lookup_req(PROG_NFS, 2); break; case STATE_MOUNT_REQ: nfs_mount_req(nfs_path); break; case STATE_UMOUNT_REQ: nfs_umountall_req(); break; case STATE_LOOKUP_REQ: nfs_lookup_req(nfs_filename); break; case STATE_READ_REQ: nfs_read_req(nfs_offset, NFS_READ_SIZE); break; case STATE_READLINK_REQ: nfs_readlink_req(); break; } nfs_timer_start = get_time_ns(); }
static void NfsSend (void) { #ifdef NFS_DEBUG printf ("%s\n", __FUNCTION__); #endif switch (NfsState) { case STATE_PRCLOOKUP_PROG_MOUNT_REQ: rpc_lookup_req (PROG_MOUNT, 1); break; case STATE_PRCLOOKUP_PROG_NFS_REQ: rpc_lookup_req (PROG_NFS, 2); break; case STATE_MOUNT_REQ: nfs_mount_req (nfs_path); break; case STATE_UMOUNT_REQ: nfs_umountall_req (); break; case STATE_LOOKUP_REQ: nfs_lookup_req (nfs_filename); break; case STATE_READ_REQ: nfs_read_req (nfs_offset, nfs_len); break; case STATE_READLINK_REQ: nfs_readlink_req (); break; } }
static int nfs_probe(struct device_d *dev) { struct fs_device_d *fsdev = dev_to_fs_device(dev); struct nfs_priv *npriv = xzalloc(sizeof(struct nfs_priv)); char *tmp = xstrdup(fsdev->backingstore); char *path; int ret; dev->priv = npriv; debug("nfs: mount: %s\n", fsdev->backingstore); path = strchr(tmp, ':'); if (!path) { ret = -EINVAL; goto err; } *path = 0; npriv->path = xstrdup(path + 1); npriv->server = resolv(tmp); debug("nfs: server: %s path: %s\n", tmp, npriv->path); npriv->con = net_udp_new(npriv->server, 0, nfs_handler, npriv); if (IS_ERR(npriv->con)) { ret = PTR_ERR(npriv->con); goto err1; } /* Need a priviliged source port */ net_udp_bind(npriv->con, 1000); ret = rpc_lookup_req(npriv, PROG_MOUNT, 1); if (ret) { printf("lookup mount port failed with %d\n", ret); goto err2; } ret = rpc_lookup_req(npriv, PROG_NFS, 2); if (ret) { printf("lookup nfs port failed with %d\n", ret); goto err2; } ret = nfs_mount_req(npriv); if (ret) { printf("mounting failed with %d\n", ret); goto err2; } free(tmp); return 0; err2: net_unregister(npriv->con); err1: free(npriv->path); err: free(tmp); free(npriv); return ret; }