All modules must have at least the following: static int load_module(): Do what you need to do when you get started. This function can return AST_MODULE_LOAD_FAILURE if an action fails and the module is prevented from loading, AST_MODULE_LOAD_DECLINE if the module can not load because of a non-critical failure (the configuration file was not found), or AST_MODULE_LOAD_SUCCESS if the module loaded fine. static int unload_module(): The module will soon be unloaded. If any channels are using your features, you should give them a softhangup in an effort to keep the program from crashing. Generally, unload_module is only called when the usecount is 0 or less, but the user can force unloading at their discretion, and thus a module should do its best to comply (although in some cases there may be no way to avoid a crash). This function should return 0 on success and non-zero on failure (i.e. it cannot yet be unloaded). AST_MODULE_INFO_STANDARD(keystr, desc); keystr: Applicable license for module. In most cases this is ASTERISK_GPL_KEY. desc: Description of module.