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