[ Bottom of Page | Previous Page | Next Page | Contents | Index | Library Home | Legal | Search ]

Kernel Extensions and Device Support Programming Concepts

demo.c Example File

#include <sys/types.h>
#include <sys/sysconfig.h>
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "demo.h"

/* Extension loading data */
struct cfg_load cfg_load;
extern int sysconfig();
extern int errno;

#define NAME_SIZE 256
#define LIBPATH_SIZE 256

main(argc,argv)
int argc;
char *argv[];
       {
       char path[NAME_SIZE];
       char libpath[LIBPATH_SIZE];
       char buf[BUFLEN];
       struct cfg_kmod cfg_kmod;
       struct extparms extparms = {argc,argv,buf,BUFLEN};
       int option = 1;
       int status = 0;

       /*
        * Load the demo kernel extension.
        */
       memset(path, 0, sizeof(path));
       memset(libpath, 0, sizeof(libpath));
       strcpy(path, "./demokext");
       cfg_load.path = path;
       cfg_load.libpath = libpath;
       if (sysconfig(SYS_KLOAD, &cfg_load, sizeof(cfg_load)) == CONF_SUCC)
              {
              printf("Kernel extension ./demokext was succesfully loaded, kmid=%x\n",
                     cfg_load.kmid);
              }
       else
              {
              printf("Encountered errno=%d loading kernel extension %s\n",
                     errno, cfg_load.path);
              exit(1);
              }

       /*
        * Loop alterantely allocating and freeing 16K from memory.
        */
       option = 1;
       while (option != 0)
              {
              printf("\n\n");
              printf("0. Quit and unload kernel extension\n");
              printf("1. Configure kernel extension - increment counter\n");
              printf("2. Configure kernel extension - decrement counter\n");
              printf("\n");
              printf("Enter choice: ");
              scanf("%d", &option);
              switch (option)
                    {
                    case 0:
                           break;
                    case 1:
                           bzero(buf,BUFLEN);
                           strcpy(buf,"sample string");
                           cfg_kmod.kmid = cfg_load.kmid;
                           cfg_kmod.cmd = 1;
                           cfg_kmod.mdiptr = (char *)&extparms;
                           cfg_kmod.mdilen = sizeof(extparms);
                           if (sysconfig(SYS_CFGKMOD,&cfg_kmod, sizeof(cfg_kmod))==CONF_SUCC)
                                  {
                                  printf("Kernel extension %s was successfully configured\n",
                                         cfg_load.path);
                                  }
                           else
                                  {
                                  printf("errno=%d configuring kernel extension %s\n",
                                         errno, cfg_load.path);
                                  }
                           break;
                    case 2:
                           bzero(buf,BUFLEN);
                           strcpy(buf,"sample string");
                           cfg_kmod.kmid = cfg_load.kmid;
                           cfg_kmod.cmd = 2;
                           cfg_kmod.mdiptr = (char *)&extparms;
                           cfg_kmod.mdilen = sizeof(extparms);
                           if (sysconfig(SYS_CFGKMOD,&cfg_kmod, sizeof(cfg_kmod))==CONF_SUCC)
                                  {
                                  printf("Kernel extension %s was successfully configured\n",
                                         cfg_load.path);
                                  }
                           else
                                  {
                                  printf("errno=%d configuring kernel extension %s\n",
                                         errno, cfg_load.path);
                                  }
                           break;
                    default:
                           printf("\nUnknown option\n");
                           break;
                    }
              }


       /*
        * Unload the demo kernel extension.
        */
  if (sysconfig(SYS_KULOAD, &cfg_load, sizeof(cfg_load)) == CONF_SUCC)
             {
             printf("Kernel extension %s was successfully unloaded\n", cfg_load.path);
             }
     else
             {
             printf("errno=%d unloading kernel extension %s\n", errno, cfg_load.path);
             }
     }

[ Top of Page | Previous Page | Next Page | Contents | Index | Library Home | Legal | Search ]