static CCNxControl * metisConfiguration_ProcessRegistrationList(MetisConfiguration *config, CCNxControl *request, unsigned ingressId) { MetisFibEntryList *fibList = metisForwarder_GetFibEntries(config->metis); CPIRouteEntryList *routeEntryList = cpiRouteEntryList_Create(); for (size_t i = 0; i < metisFibEntryList_Length(fibList); i++) { const MetisFibEntry *fibEntry = metisFibEntryList_Get(fibList, i); MetisTlvName *prefix = metisFibEntry_GetPrefix(fibEntry); const MetisNumberSet *nexthops = metisFibEntry_GetNexthops(fibEntry); for (int j = 0; j < metisNumberSet_Length(nexthops); j++) { CPIRouteEntry *route = cpiRouteEntry_Create(metisTlvName_ToCCNxName(prefix), metisNumberSet_GetItem(nexthops, j), NULL, cpiNameRouteProtocolType_STATIC, cpiNameRouteType_LONGEST_MATCH, NULL, // lifetime 1); // cost cpiRouteEntryList_Append(routeEntryList, route); } metisTlvName_Release(&prefix); } PARCJSON *entryListJson = cpiRouteEntryList_ToJson(routeEntryList); CCNxControl *response = cpi_CreateResponse(request, entryListJson); parcJSON_Release(&entryListJson); cpiRouteEntryList_Destroy(&routeEntryList); metisFibEntryList_Destroy(&fibList); return response; }
LONGBOW_TEST_CASE(Global, metisFibEntry_GetNexthops) { CCNxName *ccnxName = ccnxName_CreateFromURI("lci:/foo/bar"); MetisTlvName *tlvName = metisTlvName_CreateFromCCNxName(ccnxName); MetisFibEntry *fibEntry = metisFibEntry_Create(tlvName); metisFibEntry_AddNexthop(fibEntry, 1); metisFibEntry_AddNexthop(fibEntry, 2); const MetisNumberSet *nexthops = metisFibEntry_GetNexthops(fibEntry); assertTrue(metisNumberSet_Equals(nexthops, fibEntry->nexhops), "did not returns the right set"); metisFibEntry_Release(&fibEntry); metisTlvName_Release(&tlvName); ccnxName_Release(&ccnxName); }