static CCNxControl * metisConfiguration_ProcessRegisterPrefix(MetisConfiguration *config, CCNxControl *control, unsigned ingressId) { CPIRouteEntry *route = cpiForwarding_RouteFromControlMessage(control); bool success = false; // if it has a symbolic name set the interface index if (cpiRouteEntry_GetSymbolicName(route) != NULL) { success = _symbolicRegisterPrefix(config, route); } else { if (cpiRouteEntry_GetInterfaceIndex(route) == CPI_CURRENT_INTERFACE) { // We want to use the ingress interface cpiRouteEntry_SetInterfaceIndex(route, ingressId); } success = metisForwarder_AddOrUpdateRoute(config->metis, route); } CCNxControl *response; if (success) { response = _createAck(config, control, ingressId); } else { response = _createNack(config, control, ingressId); } cpiRouteEntry_Destroy(&route); return response; }
CCNxControl * ccnxControl_CreateRemoveRouteToSelfRequest(const CCNxName *name) { CPIRouteEntry *route = cpiRouteEntry_CreateRouteToSelf(name); CCNxControl *result = ccnxControl_CreateRemoveRouteRequest(route); cpiRouteEntry_Destroy(&route); return result; }
LONGBOW_TEST_CASE(Global, cpiAck_CreateNack) { CCNxName *name = ccnxName_CreateFromCString("lci:/foo/bar"); CPIRouteEntry *route = cpiRouteEntry_CreateRouteToSelf(name); PARCJSON *request = cpiForwarding_CreateAddRouteRequest(route); PARCJSON *actual = cpiAcks_CreateNack(request); assertFalse(cpiAcks_IsAck(actual), "Expected cpiAcks_IsAck to return false."); parcJSON_Release(&actual); parcJSON_Release(&request); cpiRouteEntry_Destroy(&route); ccnxName_Release(&name); }
static CCNxControl * metisConfiguration_ProcessUnregisterPrefix(MetisConfiguration *config, CCNxControl *control, unsigned ingressId) { CPIRouteEntry *route = cpiForwarding_RouteFromControlMessage(control); if (cpiRouteEntry_GetInterfaceIndex(route) == CPI_CURRENT_INTERFACE) { // We want to use the ingress interface cpiRouteEntry_SetInterfaceIndex(route, ingressId); } CCNxControl *response = NULL; if (metisForwarder_RemoveRoute(config->metis, route)) { response = _createAck(config, control, ingressId); } else { response = _createNack(config, control, ingressId); } cpiRouteEntry_Destroy(&route); return response; }