X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fros.c;h=1d638b69281788f9a2b6d3904d5f8ad9207ee91d;hb=ba77bd446bf69360905d1028f5d1a164208088d3;hp=b7934dfa625eccb6b32b820a75f11af1b6c0022a;hpb=0bf7ecba787380d37947bb1537e2dc3496fd13ee;p=routeros-api.git diff --git a/src/ros.c b/src/ros.c index b7934df..1d638b6 100644 --- a/src/ros.c +++ b/src/ros.c @@ -36,6 +36,10 @@ #include "routeros_api.h" +#if !__GNUC__ +# define __attribute__(x) /**/ +#endif + static const char *opt_username = "admin"; static int result_handler (ros_connection_t *c, const ros_reply_t *r, /* {{{ */ @@ -104,8 +108,9 @@ static void regtable_dump (const ros_registration_table_t *r) /* {{{ */ regtable_dump (r->next); } /* }}} void regtable_dump */ -static int regtable_handler (ros_connection_t *c, /* {{{ */ - const ros_registration_table_t *r, void *user_data) +static int regtable_handler (__attribute__((unused)) ros_connection_t *c, /* {{{ */ + const ros_registration_table_t *r, + __attribute__((unused)) void *user_data) { regtable_dump (r); return (0); @@ -142,13 +147,65 @@ static void interface_dump (const ros_interface_t *i) /* {{{ */ interface_dump (i->next); } /* }}} void interface_dump */ -static int interface_handler (ros_connection_t *c, /* {{{ */ - const ros_interface_t *i, void *user_data) +static int interface_handler (__attribute__((unused)) ros_connection_t *c, /* {{{ */ + const ros_interface_t *i, + __attribute__((unused)) void *user_data) { interface_dump (i); return (0); } /* }}} int interface_handler */ +static int system_resource_handler (__attribute__((unused)) ros_connection_t *c, /* {{{ */ + const ros_system_resource_t *r, __attribute__((unused)) void *user_data) +{ + uint64_t used_memory; + uint64_t used_hdd_space; + + if (r == NULL) + return (EINVAL); + + used_memory = r->total_memory - r->free_memory; + used_hdd_space = r->total_hdd_space - r->free_hdd_space; + + printf ("====== System resources ======\n" + "Uptime: %10.2f days\n" + "RouterOS version: %11s\n" + "Architecture name: %11s\n" + "Board name: %15s\n" + "CPU model: %15s\n" + "CPU count: %15u\n" + "CPU load: %15u\n" + "CPU frequency: %11g MHz\n" + "Memory free: %10"PRIu64" Byte (%4.1f %%)\n" + "Memory used: %10"PRIu64" Byte (%4.1f %%)\n" + "Memory total: %10"PRIu64" Byte\n" + "Space free: %10"PRIu64" Byte (%4.1f %%)\n" + "Space used: %10"PRIu64" Byte (%4.1f %%)\n" + "Space total: %10"PRIu64" Byte\n" + "Sectors written: %13"PRIu64" (%"PRIu64")\n" + "Bad blocks: %15"PRIu64"\n" + "==============================\n", + ((double) r->uptime) / 86400.0, r->version, + r->architecture_name, r->board_name, + r->cpu_model, r->cpu_count, r->cpu_load, + ((double) r->cpu_frequency) / 1000000.0, + r->free_memory, + 100.0 * (((double) r->free_memory) / ((double) r->total_memory)), + used_memory, + 100.0 * (((double) used_memory) / ((double) r->total_memory)), + r->total_memory, + r->free_hdd_space, + 100.0 * (((double) r->free_hdd_space) / ((double) r->total_hdd_space)), + used_hdd_space, + 100.0 * (((double) used_hdd_space) / ((double) r->total_hdd_space)), + r->total_hdd_space, + r->write_sect_since_reboot, + r->write_sect_total, + r->bad_blocks); + + return (0); +} /* }}} int system_resource_handler */ + static char *read_password (void) /* {{{ */ { FILE *tty; @@ -186,7 +243,12 @@ static char *read_password (void) /* {{{ */ return (NULL); } - fgets (buffer, sizeof (buffer), tty); + if (fgets (buffer, sizeof (buffer), tty) == NULL) + { + fprintf (stderr, "fgets failed: %s\n", strerror (errno)); + fclose (tty); + return (NULL); + } buffer[sizeof (buffer) - 1] = 0; buffer_len = strlen (buffer); @@ -216,7 +278,19 @@ static char *read_password (void) /* {{{ */ static void exit_usage (void) /* {{{ */ { - printf ("Usage: ros [options] [args]\n"); + printf ("Usage: ros [options] [args]\n" + "\n" + "OPTIONS:\n" + " -u Use to authenticate.\n" + " -h Display this help message.\n" + "\n"); + if (ros_version () == ROS_VERSION) + printf ("Using librouteros %s\n", ROS_VERSION_STRING); + else + printf ("Using librouteros %s (%s)\n", + ros_version_string (), ROS_VERSION_STRING); + printf ("Copyright (c) 2009 by Florian Forster\n"); + exit (EXIT_SUCCESS); } /* }}} void exit_usage */ @@ -278,6 +352,10 @@ int main (int argc, char **argv) /* {{{ */ { ros_registration_table (c, regtable_handler, /* user data = */ NULL); } + else if (strcmp ("system-resource", command) == 0) + { + ros_system_resource (c, system_resource_handler, /* user data = */ NULL); + } else { fprintf (stderr, "Unknown built-in command %s. "