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; }
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; }