1/** 2 * \file 3 * \brief Queries the SKB to construct a multicast tree 4 */ 5 6/* 7 * Copyright (c) 2007, 2008, 2009, ETH Zurich. 8 * All rights reserved. 9 * 10 * This file is distributed under the terms in the attached LICENSE file. 11 * If you do not find this file, copies can be found by writing to: 12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group. 13 */ 14 15#include <barrelfish/barrelfish.h> 16#include <stdio.h> 17#include <stdlib.h> 18#include <skb/skb.h> 19#include <barrelfish/dispatch.h> 20 21int main(int argc, char**argv) 22{ 23 struct mem_aff { 24 uint64_t base, limit; 25 }; 26 struct mem_aff memory_affinities[20]; 27 uintptr_t idx = 0; 28 errval_t err; 29 30 char query[128]; 31 coreid_t core_id = disp_get_core_id(); 32 33 skb_client_connect(); 34 35 sprintf(query,"local_memory_affinity(%u, List),length(List,Len)," 36 "write(output,len(Len)),write(output,List).", core_id); 37 38 printf("\nexecute query...\n"); 39 40 char *output, *errstr; 41 int32_t errint; 42 err = skb_evaluate(query, &output, &errstr, &errint); 43 assert(err_is_ok(err)); 44 assert(errint == 0); 45 46 printf("\nquery executed.\n"); 47 printf("\nresult = %s\n", output); 48 49 while(!((output[0] == 'l') && (output[1] == 'e') && (output[2] == 'n'))) 50 output++; 51 output += 4; 52 int len = atoi(output); 53 printf("\nprocess %u elements.\n", len); 54 for (int i = 0; i < len; i++) { 55 while(!(output[0] == 'r')) output++; 56 while (!((output[0] >= '0') && (output[0] <= '9'))) output++; 57 uint64_t base = atol(output); 58 while(!(output[0] == ',')) output++; 59 while (!((output[0] >= '0') && (output[0] <= '9'))) output++; 60 uint64_t limit = atol(output); 61 memory_affinities[idx].base = base; 62 memory_affinities[idx].limit = limit; 63 idx++; 64 } 65 66 for (int i = 0; i < idx; i++) { 67 printf("found affinity %d: [%"PRIx64", %"PRIx64"]\n", i, memory_affinities[i].base, 68 memory_affinities[i].limit); 69 } 70 return 0; 71} 72