int stasis_message_router_add_cache_update(struct stasis_message_router *router,
	struct stasis_message_type *message_type,
	stasis_subscription_cb callback, void *data)
{
	int res;

	ast_assert(router != NULL);

	if (!message_type) {
		/* Cannot cache a route to NULL type. */
		return -1;
	}
	ao2_lock(router);
	res = route_table_add(&router->cache_routes, message_type, callback, data);
	ao2_unlock(router);
	return res;
}
Exemple #2
0
int main() {
  int rv;
  struct in_addr network, netmask, default_route, next_hop;
  struct route_table *rt;
  char src[32];
  char dst[32];

  rt = route_table_new(32);
  assert(rt);


  inet_pton(AF_INET, "192.168.37.0", &network);
  inet_pton(AF_INET, "255.255.255.0", &netmask);
  inet_pton(AF_INET, "192.168.37.1", &default_route);

  rv = route_table_init(rt, &network, &netmask, &default_route);
  if (rv < 0) {
    printf("init error\n");
    return -1;
  }


  inet_pton(AF_INET, "6.6.6.4", &network);
  inet_pton(AF_INET, "255.255.255.252", &netmask);
  inet_pton(AF_INET, "192.168.37.2", &next_hop);

  rv = route_table_add(rt, 0, &network, &netmask, &next_hop);
  if (rv < 0) {
    printf("add error\n");
    return -1;
  }

  printf("route table:\n");
  route_table_print(rt);
  printf("*************\n");

  inet_pton(AF_INET, "192.168.37.1", &network);
  rv = route_table_get_route(rt, &network, &next_hop);
  if (rv > 0) {
    inet_ntop(AF_INET, &network, src, 32);
    inet_ntop(AF_INET, &next_hop, dst, 32);
    printf("%s -> %s\n", src, dst);
  }

  inet_pton(AF_INET, "192.168.37.11", &network);
  rv = route_table_get_route(rt, &network, &next_hop);
  if (rv > 0) {
    inet_ntop(AF_INET, &network, src, 32);
    inet_ntop(AF_INET, &next_hop, dst, 32);
    printf("%s -> %s\n", src, dst);
  }

  inet_pton(AF_INET, "127.0.0.1", &network);
  rv = route_table_get_route(rt, &network, &next_hop);
  if (rv > 0) {
    inet_ntop(AF_INET, &network, src, 32);
    inet_ntop(AF_INET, &next_hop, dst, 32);
    printf("%s -> %s\n", src, dst);
  }

  inet_pton(AF_INET, "6.6.6.3", &network);
  rv = route_table_get_route(rt, &network, &next_hop);
  if (rv > 0) {
    inet_ntop(AF_INET, &network, src, 32);
    inet_ntop(AF_INET, &next_hop, dst, 32);
    printf("%s -> %s\n", src, dst);
  }

  inet_pton(AF_INET, "6.6.6.6", &network);
  rv = route_table_get_route(rt, &network, &next_hop);
  if (rv > 0) {
    inet_ntop(AF_INET, &network, src, 32);
    inet_ntop(AF_INET, &next_hop, dst, 32);
    printf("%s -> %s\n", src, dst);
  }

  inet_pton(AF_INET, "6.6.6.8", &network);
  rv = route_table_get_route(rt, &network, &next_hop);
  if (rv > 0) {
    inet_ntop(AF_INET, &network, src, 32);
    inet_ntop(AF_INET, &next_hop, dst, 32);
    printf("%s -> %s\n", src, dst);
  }

  route_table_delete(rt);
  return 0;
}