librouteros
librouteros is a free and open-source library written in C which abstracts the API provided by RouterOS. It was initially written in 2009 by Florian Forster and released under the GNU General Public License (GPL).
Features and design goals are:
- Ease of use: The library makes heavy use of callback functions which simplifies memory management.
- Strict ISO C99 and POSIX.1-2001 conformance.
- Thread and reentrant-safety.
- Abstraction from underlying network protocol.
- Well documented using manual pages.
Compiling
librouteros uses the autotools and libtool and can therefore be compiled and installed with the usual set of commands:
~ $ tar jxf librouteros-x.y.z.tar.bz2 ~ $ cd librouteros-x.y.z librouteros-x.y.z $ ./configure librouteros-x.y.z $ make librouteros-x.y.z $ make install
Dependencies
librouteros uses the gcrypt library from the GnuPG project to calculate the MD5-hash required for authenticating.
Example program
The following (untested!) example program demonstrates how to get a list of interfaces from a device running RouterOS and print this list to standard output. It is using the high-level function ros_interface
which provides a list of interfaces on the router. For a more thorough example please tend to the ros command line utility which is included with the librouteros source code distribution. It demonstrates how to handle generic queries and registration-table entries, too.
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include "routeros_api.h" /* Print the list of interfaces. */ static void print_interface (const ros_interface_t *if) { if (if == NULL) return; printf ("%s (%s, %s, %s, %s)\n", if->name, if->type, if->dynamic ? "dynamic" : "static", if->running ? "running" : "stopped", if->enabled ? "enabled" : "disabled"); print_interface (if->next); } /* Callback function that is called by "ros_interface" */ static int handle_interfaces (ros_connection_t *c, const ros_interface_t *if, void *user_data) { print_interface (if); return (0); } int main (int argc, char **argv) { ros_connection_t *c; /* Connect to the router */ c = ros_connect ("my-router.example.com", ROUTEROS_API_PORT, "api_user", "secret"); if (c == NULL) { fprintf (stderr, "ros_connect failed: %s\n", strerror (errno)); exit (EXIT_FAILURE); } /* Query a list of interfaces and call "handle_interfaces". */ ros_interface (c, handle_interfaces, /* user data = */ NULL); /* Disconnect from the router. */ ros_disconnect (c); exit (EXIT_SUCCESS); }
External links
- librouteros' homepage
- librouteros(3) manual page
- ros.c, a thorough example program.
- Freshmeat entry
- libgcrypt in the Free Software Directory