1/** \file 2 * \brief service helper functions 3 */ 4 5/* 6 * Copyright (c) 2011, ETH Zurich. 7 * All rights reserved. 8 * 9 * This file is distributed under the terms in the attached LICENSE file. 10 * If you do not find this file, copies can be found by writing to: 11 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group. 12 */ 13 14#include <stdio.h> 15#include <string.h> 16 17#include <barrelfish/barrelfish.h> 18#include <barrelfish/nameservice_client.h> 19 20#include <dist/service.h> 21 22#define EXTRA_NAME_LEN 6 // enough extra space for an int or "done" 23 24errval_t register_service_local(coreid_t core, char *name, iref_t iref) 25{ 26 assert(name != NULL); 27 28 errval_t err; 29 int new_len = strlen(name) + EXTRA_NAME_LEN; 30 char new_name[new_len]; 31 snprintf(new_name, new_len, "%s.%d", name, core); 32 33 err = nameservice_register(new_name, iref); 34 35 // TODO: comparing to core == 0 is kind of ugly. We should somehow 36 // identify the 'master' core independent of its core id 37 if (err_is_ok(err) && core == 0) { 38 err = nameservice_register(name, iref); 39 } 40 41 return err; 42} 43 44 45errval_t lookup_service(coreid_t core, char *name, iref_t *iref) 46{ 47 assert(name != NULL); 48 49 errval_t err; 50 51 int new_len = strlen(name) + EXTRA_NAME_LEN; 52 char new_name[new_len]; 53 snprintf(new_name, new_len, "%s.%d", name, core); 54 55 err = nameservice_lookup(new_name, iref); 56 if (err_is_ok(err)) { 57 return SYS_ERR_OK; 58 } 59 60 err = nameservice_lookup(name, iref); 61 62 return err; 63} 64