Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Marcelog Device Manager is a set of libraries and a multithreaded daemon written in plain ansi C that runs under linux and freebsd, and allows clients to control devices like DSLAM Alcatel, ZTE, and HUAWEI. it supports ssh2, telnet, raw, and serial connections. Uses libssh2 1.2.5+ and libtelnet
C PHP Objective-C Shell
branch: master
Failed to load latest commit information.
clients/php added misc shub info, shub sw version, and shub ip for alcatel 73xxx
src added port profile update for zte 8426
AUTHOR initial commit
README added link to CI server a little better build a little better build


 * You can get the releases at the CI server:
 * \mainpage 
 * Here's how it works, top-bottom:\n
 * Using a MDMDevice client, like MDMDevice.php, from your own code\n
 * call MDMDevice constructor, getting a instance of an MDMDevice\n
 * class. This will initialize all the data needed (see example.php).\n
 * When you want to execute a command in a device, you have to call the exec()\n
 * method of that object. Remember to use constants (encapsulated in the same\n
 * MDMDevice client you've just instantiated) like: \n
 * MDM_DSLAM_ALCATEL_73xx_CMD_GET_IP, etc to identify the device type, the\n
 * connection type, etc. Do not hardcode anything!\n
 * The exec method will open a socket and try to connect to the MDM server. It\n
 * will honor parameters like connection timeout and receive timeout so it can\n
 * abort the connection on any of these timeouts values. (Remember, these\n
 * timeouts apply only to the connection from your code to the MDM server,\n
 * timeouts regarding the connection from the MDM server to the devices\n
 * are embedded in the request itself and go as arguments to the exec method\n
 * generally). Be *warned* you may need high times for recv_to and or\n
 * devread_to depending on the device you are interacting with.\n
 * Once the exec method is connected to the MDM server, it sends a XML request\n
 * (see mdm_request_example.xml). The server will validate this request\n
 * against a request schema (see mdm_request.xsd). If the request is \n
 * sintactically valid, it will proceed to validate the contained data and\n
 * execute the command requested.\n
 *\n WARNING: The server will silently close and drop the connection if the\n
 * request is invalid or does not have any available childs to handle the\n
 * connection, etc. If you notice that your connections are dropped by the\n
 * server, check the server logs.\n
 * If the command executed successfully, the server will reply with an error\n
 * code equals to 0. If an error occurred, the error code will not be equals\n
 * to 0 and an additional response message is generated in the response.\n
 * The server has several configuration options (see mdm_server_conf.xml and\n
 * mdm_server_conf.xsd).\n
 * When the MDMDevice gets the response from server\n
 * (see mdm_response_example.xml) it will try to validate it against a schema\n
 * (see mdm_response.xsd) and throw an exception if it doesn't validate.\n
 * If everything went well, you now have available the methods needed in the\n
 * MDMDevice you instantiated to access the data requested (i.e: if you\n
 * asked for a dslam uptime, you have the getDSLAMUptime() method, etc).\n
 * \n
 * \n
 * Here is the basic diagram for mdm layers:\n
 * \n
 * \n
 * example.php\n
 *      |     \n
 *      |     \n
 * MDMDevice.php\n
 *      |\n
 *      |\n
 *      |\n
 *      |\n
 * +---------------------------------------------------------------------------+\n
 * | User applications, i.e:                                                   |\n
 * | mdm_server.c                                                              |\n
 * | mdm_test_driver_telnet.c                                                  |\n
 * | mdm_test_driver_ssh2.c                                                    |\n
 * | mdm_test_driver_rawtcp.c                                                  |\n
 * | mdm_test_driver_serial.c                                                  |\n
 * | mdm_test_driver_dummy.c                                                   |\n
 * | mdm_test_device_dslam_alcatel_73xx.c                                      |\n
 * | mdm_test_device_dslam_zte_8426.c                                          |\n
 * | mdm_connection_types_list.c                                               |\n
 * | mdm_device_types_list.c                                                   |\n
 * +---------------------------------------------------------------------------+\n
 * | mdm_device.c                                                              |\n
 * +----------------------------------+----------------------------------------+\n
 * | device drivers                   | device command parsers                 |\n
 * | mdm_device_dslam_zte_8426.c      | mdm_parser_dslam_zte_8426.c            |\n
 * | mdm_device_dslam_alcatel_73xx.c  | mdm_parser_dslam_alcatel_73xx.c        |\n
 * +----------------------------------+----------------------------------------+\n
 * | mdm_connection.c                                                          |\n
 * +---------------------------------------------------------------------------+\n
 * | connection drivers                                                        |\n
 * | mdm_driver_telnet.c                                                       |\n
 * | mdm_driver_ssh2.c                                                         |\n
 * | mdm_driver_rawtcp.c                                                       |\n
 * | mdm_driver_rawtcp_server.c                                                |\n
 * | mdm_driver_serial.c                                                       |\n
 * | mdm_driver_dummy.c                                                        |\n
 * +---------------------------------------------------------------------------+\n
 * Commands executed by mdm_device_exec follow this path:\n
 * 1.- mdm_device_xxxx_prepare_exec() Will mix command and arguments, and \n
 * validate both. \n
 * 2.- mdm_device_xxxx_exec() Will exec the command with arguments.\n
 * 3.- mdm_device_xxxx_post_exec() Will parse the result, giving back an XML\n
 * if a parser exists for that command or the raw response from the device.\n
Something went wrong with that request. Please try again.