Exemple #1
0
int main(int argc, const char *argv[])
{
	const char *modname;	/* module name */
	char *mod_filename;	/* module filename: /usr/lib/ipmasqadm/MOD.so */
	void *dlp;
	int (*mod_main) (int, const char *[]);

	progname = argv[0];
	if (argc<2)
		usage(stderr, 1);

	modname = argv[1];

	mod_filename=malloc(strlen(LIBDIR)+strlen(modname)+1+3+1);
        if (!mod_filename) {
        	perror("malloc()");
                return 1;
        }
        
	sprintf(mod_filename, LIBDIR "/%s.so", modname);

	/* 
	 *	Open module file
	 */
	dlp=dlopen(mod_filename, RTLD_NOW);
	if (!dlp) {
		fprintf(stderr, "dlopen(): %s\n", dlerror());
		return 1;
	}

	/* 
	 *	Fetch entry address (masqmod_main)
	 */
	mod_main=dlsym(dlp, MASQ_MOD_MAIN);
	if (!mod_main) {
		fprintf(stderr, "dlsym(\"%s\"): %s\n", "masqmod_main", dlerror());
		return 1;
	}
	--argc;
	++argv;

	/*
	 *	Here we go ...
	 */
	return mod_main(argc, argv);
}
Exemple #2
0
static int __init mod_init(void)
{
	printk("=== insmod module ===\n");
	mod_main();
	return 0;
}