2 * \file ferret/server/sensor_directory/dir.c
3 * \brief Directory server, serves as well known instance and
4 * naming service for sensors
7 * \author Martin Pohlack <mp26@os.inf.tu-dresden.de>
10 * (c) 2005-2009 Technische Universität Dresden
11 * This file is part of TUD:OS and distributed under the terms of the
12 * GNU General Public License 2.
13 * Please see the COPYING-GPL-2 file for details.
15 //#include <l4/dm_generic/dm_generic.h>
16 //#include <l4/dm_phys/dm_phys.h>
17 #include <l4/l4vfs/tree_helper.h>
18 #include <l4/l4vfs/name_server.h>
19 #include <l4/l4vfs/name_space_provider.h>
20 #include <l4/log/l4log.h>
21 #include <l4/names/libnames.h>
22 #include <l4/util/l4_macros.h>
23 #include <l4/util/parse_cmd.h>
24 #include <l4/util/util.h>
26 #include <l4/ferret/ferret_dir-server.h>
27 #include <l4/ferret/sensors/tbuf.h>
33 char LOG_tag[9] = FERRET_DIR_NAME;
36 l4vfs_th_node_t * root;
38 #define MIN ((a)<(b)?(a):(b))
40 int main(int argc, const char *argv[])
43 l4dm_dataspace_t ds = L4DM_INVALID_DATASPACE;
46 CORBA_Server_Environment env = dice_default_server_environment;
48 if (parse_cmdline(&argc, &argv,
51 "be verbose by dumping progress information to via log",
52 PARSE_CMD_SWITCH, 1, &verbose,
54 'l', "l4vfs", "register volume_id at L4VFS' name_server",
55 PARSE_CMD_SWITCH, 1, ®_l4vfs,
62 // create root node for tree_helper
63 root = l4vfs_th_new_node("[ferret root]", L4VFS_TH_TYPE_DIRECTORY,
66 // register at L4VFS' name_server
71 root_id.volume_id = FERRET_L4VFS_VOLUME_ID;
72 root_id.object_id = 0;
74 ns = l4vfs_get_name_server_threadid();
75 if (l4_is_invalid_id(ns))
79 LOGd(verbose, "Got name_server thread_id ...");
80 for (i = 0; i < 3; i++)
82 ret = l4vfs_register_volume(ns, l4_myself(), root_id);
83 // register ok --> done
87 LOG("Error registering at name_server: %d, retrying ...", ret);
92 LOG("Could not register at name_server, gave up!");
95 LOGd(verbose, "Registered my volume_id at name_server.");
98 // register special sensors ...
101 se = sensors_new_entry(&ds, FERRET_TBUF_MAJOR, FERRET_TBUF_MINOR,
102 0, FERRET_TBUF, FERRET_PERMANENT, "", NULL);
105 LOG("Could not register trace buffer as sensor, ignored!");
108 env.malloc = (dice_malloc_func)malloc;
109 env.free = (dice_free_func)free;
111 LOGd(verbose, "Registering at names ...");
112 names_register(FERRET_DIR_NAME);
114 LOGd(verbose, "Starting server loop ...");
115 ferret_dir_server_loop(&env);