static int bgp_dump_interval_func (struct thread *t) { struct bgp_dump *bgp_dump; bgp_dump = THREAD_ARG (t); bgp_dump->t_interval = NULL; /* Reschedule dump even if file couldn't be opened this time... */ if (bgp_dump_open_file (bgp_dump) != NULL) { /* In case of bgp_dump_routes, we need special route dump function. */ if (bgp_dump->type == BGP_DUMP_ROUTES) { unsigned int seq = bgp_dump_routes_func (AFI_IP, 1, 0); bgp_dump_routes_func (AFI_IP6, 0, seq); /* Close the file now. For a RIB dump there's no point in leaving * it open until the next scheduled dump starts. */ fclose(bgp_dump->fp); bgp_dump->fp = NULL; } } /* if interval is set reschedule */ if (bgp_dump->interval > 0) bgp_dump_interval_add (bgp_dump, bgp_dump->interval); return 0; }
static int bgp_dump_set (struct vty *vty, struct bgp_dump *bgp_dump, enum bgp_dump_type type, const char *path, const char *interval_str) { unsigned int interval; if (interval_str) { /* Check interval string. */ interval = bgp_dump_parse_time (interval_str); if (interval == 0) { vty_out (vty, "Malformed interval string%s", VTY_NEWLINE); return CMD_WARNING; } /* Don't schedule duplicate dumps if the dump command is given twice */ if (interval == bgp_dump->interval && type == bgp_dump->type && path && bgp_dump->filename && !strcmp (path, bgp_dump->filename)) { return CMD_SUCCESS; } /* Set interval. */ bgp_dump->interval = interval; if (bgp_dump->interval_str) free (bgp_dump->interval_str); bgp_dump->interval_str = strdup (interval_str); } else { interval = 0; } /* Create interval thread. */ bgp_dump_interval_add (bgp_dump, interval); /* Set type. */ bgp_dump->type = type; /* Set file name. */ if (bgp_dump->filename) free (bgp_dump->filename); bgp_dump->filename = strdup (path); /* This should be called when interval is expired. */ bgp_dump_open_file (bgp_dump); return CMD_SUCCESS; }
int bgp_dump_set (struct vty *vty, struct bgp_dump *bgp_dump, int type, const char *path, const char *interval_str) { unsigned int interval; if (interval_str) { /* Check interval string. */ interval = bgp_dump_parse_time (interval_str); if (interval == 0) { vty_out (vty, "Malformed interval string%s", VTY_NEWLINE); return CMD_WARNING; } /* Set interval. */ bgp_dump->interval = interval; if (bgp_dump->interval_str) free (bgp_dump->interval_str); bgp_dump->interval_str = strdup (interval_str); } else { interval = 0; } /* Create interval thread. */ bgp_dump_interval_add (bgp_dump, interval); /* Set type. */ bgp_dump->type = type; /* Set file name. */ if (bgp_dump->filename) free (bgp_dump->filename); bgp_dump->filename = strdup (path); /* This should be called when interval is expired. */ bgp_dump_open_file (bgp_dump); return CMD_SUCCESS; }
int bgp_dump_interval_func (struct thread *t) { struct bgp_dump *bgp_dump; bgp_dump = THREAD_ARG (t); bgp_dump->t_interval = NULL; if (bgp_dump_open_file (bgp_dump) == NULL) return 0; /* In case of bgp_dump_routes, we need special route dump function. */ if (bgp_dump->type == BGP_DUMP_ROUTES) { bgp_dump_routes_func (AFI_IP); bgp_dump_routes_func (AFI_IP6); } bgp_dump_interval_add (bgp_dump, bgp_dump->interval); return 0; }