#include "zebra/zserv.h"
#include "zebra/zebra_ns.h"
#include "zebra/zebra_vrf.h"
+#include "zebra/zebra_errors.h"
#include "fpm/fpm.h"
#include "zebra_fpm_private.h"
unsigned long updates_triggered;
unsigned long redundant_triggers;
- unsigned long non_fpm_table_triggers;
unsigned long dests_del_after_update;
return now - reference;
}
-/*
- * zfpm_is_table_for_fpm
- *
- * Returns TRUE if the the given table is to be communicated to the
- * FPM.
- */
-static inline int zfpm_is_table_for_fpm(struct route_table *table)
-{
- rib_table_info_t *info;
-
- info = rib_table_info(table);
-
- /*
- * We only send the unicast tables in the main instance to the FPM
- * at this point.
- */
- if (zvrf_id(info->zvrf) != 0)
- return 0;
-
- if (info->safi != SAFI_UNICAST)
- return 0;
-
- return 1;
-}
-
/*
* zfpm_rnodes_iter_init
*/
*/
route_table_iter_cleanup(&iter->iter);
- while ((table = rib_tables_iter_next(&iter->tables_iter))) {
- if (zfpm_is_table_for_fpm(table))
- break;
- }
+ table = rib_tables_iter_next(&iter->tables_iter);
if (!table)
return NULL;
nbyte = stream_read_try(ibuf, zfpm_g->sock,
FPM_MSG_HDR_LEN - already);
if (nbyte == 0 || nbyte == -1) {
- zfpm_connection_down("closed socket in read");
+ if (nbyte == -1) {
+ char buffer[1024];
+
+ sprintf(buffer, "closed socket in read(%d): %s",
+ errno, safe_strerror(errno));
+ zfpm_connection_down(buffer);
+ } else
+ zfpm_connection_down("closed socket in read");
return 0;
}
nbyte = stream_read_try(ibuf, zfpm_g->sock, msg_len - already);
if (nbyte == 0 || nbyte == -1) {
- zfpm_connection_down("failed to read message");
+ if (nbyte == -1) {
+ char buffer[1024];
+
+ sprintf(buffer, "failed to read message(%d) %s",
+ errno, safe_strerror(errno));
+ zfpm_connection_down(buffer);
+ } else
+ zfpm_connection_down("failed to read message");
return 0;
}
*/
struct route_entry *zfpm_route_for_update(rib_dest_t *dest)
{
- struct route_entry *re;
-
- RE_DEST_FOREACH_ROUTE (dest, re) {
- if (!CHECK_FLAG(re->status, ROUTE_ENTRY_SELECTED_FIB))
- continue;
-
- return re;
- }
-
- /*
- * We have no route for this destination.
- */
- return NULL;
+ return dest->selected_fib;
}
/*
break;
bytes_written =
- write(zfpm_g->sock, STREAM_PNT(s), bytes_to_write);
+ write(zfpm_g->sock, stream_pnt(s), bytes_to_write);
zfpm_g->stats.write_calls++;
num_writes++;
dest = rib_dest_from_rnode(rn);
- /*
- * Ignore the trigger if the dest is not in a table that we would
- * send to the FPM.
- */
- if (!zfpm_is_table_for_fpm(rib_dest_table(dest))) {
- zfpm_g->stats.non_fpm_table_triggers++;
- return 0;
- }
-
if (CHECK_FLAG(dest->flags, RIB_DEST_UPDATE_FPM)) {
zfpm_g->stats.redundant_triggers++;
return 0;
ZFPM_SHOW_STAT(route_adds);
ZFPM_SHOW_STAT(route_dels);
ZFPM_SHOW_STAT(updates_triggered);
- ZFPM_SHOW_STAT(non_fpm_table_triggers);
ZFPM_SHOW_STAT(redundant_triggers);
ZFPM_SHOW_STAT(dests_del_after_update);
ZFPM_SHOW_STAT(t_conn_down_starts);
show_zebra_fpm_stats_cmd,
"show zebra fpm stats",
SHOW_STR
- "Zebra information\n"
+ ZEBRA_STR
"Forwarding Path Manager information\n"
"Statistics\n")
{
clear_zebra_fpm_stats_cmd,
"clear zebra fpm stats",
CLEAR_STR
- "Zebra information\n"
+ ZEBRA_STR
"Clear Forwarding Path Manager information\n"
"Statistics\n")
{
if (!strcmp("netlink", format)) {
if (!have_netlink) {
- zlog_err("FPM netlink message format is not available");
+ flog_err(EC_ZEBRA_NETLINK_NOT_AVAILABLE,
+ "FPM netlink message format is not available");
return;
}
zfpm_g->message_format = ZFPM_MSG_FORMAT_NETLINK;
if (!strcmp("protobuf", format)) {
if (!have_protobuf) {
- zlog_err(
+ flog_err(
+ EC_ZEBRA_PROTOBUF_NOT_AVAILABLE,
"FPM protobuf message format is not available");
return;
}
return;
}
- zlog_warn("Unknown fpm format '%s'", format);
+ flog_warn(EC_ZEBRA_FPM_FORMAT_UNKNOWN, "Unknown fpm format '%s'",
+ format);
}
/**
in.s_addr = zfpm_g->fpm_server;
if ((zfpm_g->fpm_server != FPM_DEFAULT_IP
- && zfpm_g->fpm_server != INADDR_ANY)
- || (zfpm_g->fpm_port != FPM_DEFAULT_PORT
- && zfpm_g->fpm_port != 0))
+ && zfpm_g->fpm_server != INADDR_ANY)
+ || (zfpm_g->fpm_port != FPM_DEFAULT_PORT && zfpm_g->fpm_port != 0))
vty_out(vty, "fpm connection ip %s port %d\n", inet_ntoa(in),
zfpm_g->fpm_port);