CFSMounter::FS_Support CFSMounter::fsSupported(const CFSMounter::FSType fstype, const bool keep_modules) { const char * fsname = NULL; if (fstype == CFSMounter::NFS) fsname = "nfs"; else if (fstype == CFSMounter::CIFS) fsname = "cifs"; else if (fstype == CFSMounter::LUFS) fsname = "lufs"; if (in_proc_filesystems(fsname)) return CFSMounter::FS_READY; if (insert_modules(fstype)) { if (in_proc_filesystems(fsname)) { if (keep_modules) { if (fstype == CFSMounter::NFS) nfs_mounted_once = true; } else { remove_modules(fstype); } return CFSMounter::FS_NEEDS_MODULES; } } remove_modules(fstype); return CFSMounter::FS_UNSUPPORTED; }
CFSMounter::UMountRes CFSMounter::umount(const char * const dir) { UMountRes res = UMRES_OK; if (dir != NULL) { if (umount2(dir, MNT_FORCE) != 0) { return UMRES_ERR; } } else { MountInfo mi; std::ifstream in("/proc/mounts", std::ifstream::in); while(in.good()) { in >> mi.device >> mi.mountPoint >> mi.type; in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); if(strcmp(mi.type.c_str(),"nfs")==0 && strcmp(mi.mountPoint.c_str(),"/")==0) { if (umount2(mi.mountPoint.c_str(),MNT_FORCE) != 0) { printf("[CFSMounter] Error umounting %s\n",mi.device.c_str()); res = UMRES_ERR; } } } } if (nfs_mounted_once) remove_modules(CFSMounter::NFS); return res; }
static void cleanup() { log(LOG_DEBUG, 0, "CLEANING UP!"); k_del_rte(AODV_BROADCAST, 0, 0); remove_modules(); rt_table_destroy(); packet_input_cleanup(); aodv_socket_cleanup(); log_cleanup(); }
static void cleanup(void) { DEBUG(LOG_DEBUG, 0, "CLEANING UP!"); rt_table_destroy(); aodv_socket_cleanup(); #ifdef LLFEEDBACK if (llfeedback) llf_cleanup(); #endif log_cleanup(); nl_cleanup(); remove_modules(); }