- 论坛徽章:
- 2
|
回复 11# orian - struct cfg_load ext_load;
- int main(int argc, char **argv)
- {
- struct cfg_kmod opt_kmod;
- char c, modname[256] = {'\0'};
- struct stat statbuf;
- int rc;
- int ret;
- if (argc != 2) {
- printf("Usage: %s <kernel_extension>\n", argv[0]);
- exit(EINVAL);
- }
- strcpy(modname, argv[1]);
- if (stat(modname, &statbuf) != 0) {
- perror("stat");
- exit(errno);
- }
- printf("Enter choice:(1)oad, (u)nload\n");
- while((c = getchar()) < 'a' && c > 'z')
- ;
- switch (c) {
- case 'l':
- ext_load.path = modname;
- ext_load.libpath = NULL;
- ext_load.kmid = 0;
- if (sysconfig(SYS_KLOAD, &ext_load, sizeof(struct cfg_load))) {
- printf("Error in loading extension. errno=%d\n", errno);
- exit(1);
- } else {
- printf("Extension Successfully loaded, kmid is %d.\n", ext_load.kmid);
- }
- opt_kmod.kmid = ext_load.kmid;
- opt_kmod.cmd = CFG_INIT;
- opt_kmod.mdiptr = NULL;
- opt_kmod.mdilen = 0;
- if (sysconfig(SYS_CFGKMOD,&opt_kmod,sizeof(struct cfg_kmod)) )
- perror("sysconfig(SYS_CFGKMOD)");
- else
- printf("Extension Initialized \n");
- break;
- case 'u':
- ext_load.path = modname;
- ext_load.libpath = NULL;
- if(sysconfig(SYS_QUERYLOAD, &ext_load, sizeof(struct cfg_load))){
- printf("Error while querying.\n");
- }
-
- if (ext_load.kmid == 0) {
- fprintf(stderr, "Extension not loaded.\n");
- } else {
- opt_kmod.kmid = ext_load.kmid;
- opt_kmod.cmd = CFG_TERM;
- opt_kmod.mdiptr = NULL;
- opt_kmod.mdilen = 0;
- if (sysconfig(SYS_CFGKMOD, &opt_kmod, sizeof(struct cfg_kmod))) {
- perror("sysconfig(SYS_CFGKMOD)");
- } else {
- fprintf(stderr, "Kernel Extension Terminated. mid=%d\n", opt_kmod.kmid);
- }
- }
- if(sysconfig(SYS_KULOAD, &ext_load, sizeof(struct cfg_load))){
- printf("Error in unloading extension.mid=%d, errno=%d\n", ext_load.kmid, errno);
-
- } else {
- printf("Extension Successfully unloaded. mid=%d\n", ext_load.kmid);
- }
- break;
- default:
- printf("Incorret option\n");
- break;
- }
- return 0;
- }
复制代码 |
|