source: mainline/uspace/srv/net/structures/module_map.c@ 21580dd

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 21580dd was 21580dd, checked in by Lukas Mejdrech <lukas@…>, 15 years ago

Merged with network branch svn://svn.helenos.org/HelenOS/branches/network revision 4759; ipc_share_* and ipc_data_* changed to async_*; client connection in module.c returns on IPC_M_PHONE_HUNGUP; * Qemu scripts renamed to net-qe.*; (the dp8390 does not respond)

  • Property mode set to 100644
File size: 3.2 KB
Line 
1/*
2 * Copyright (c) 2009 Lukas Mejdrech
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup net
30 * @{
31 */
32
33/** @file
34 * Character string to module map implementation.
35 */
36
37#include <malloc.h>
38#include <task.h>
39#include <unistd.h>
40
41#include <ipc/services.h>
42
43#include "../err.h"
44#include "../modules.h"
45
46#include "generic_char_map.h"
47#include "module_map.h"
48
49GENERIC_CHAR_MAP_IMPLEMENT( modules, module_t )
50
51int add_module( module_ref * module, modules_ref modules, char * name, char * filename, services_t service, task_id_t task_id, connect_module_t connect_module ){
52 ERROR_DECLARE;
53
54 module_ref tmp_module;
55
56 tmp_module = ( module_ref ) malloc( sizeof( module_t ));
57 if( ! tmp_module ) return ENOMEM;
58 tmp_module->task_id = task_id;
59 tmp_module->phone = 0;
60 tmp_module->usage = 0;
61 tmp_module->name = name;
62 tmp_module->filename = filename;
63 tmp_module->service = service;
64 tmp_module->connect_module = connect_module;
65 if( ERROR_OCCURRED( modules_add( modules, tmp_module->name, 0, tmp_module ))){
66 free( tmp_module );
67 return ERROR_CODE;
68 }
69 if( module ) * module = tmp_module;
70 return EOK;
71}
72
73module_ref get_running_module( modules_ref modules, char * name ){
74 module_ref module;
75
76 module = modules_find( modules, name, 0 );
77 if( ! module ) return NULL;
78 if( ! module->task_id ){
79 module->task_id = spawn( module->filename );
80 if( ! module->task_id ) return NULL;
81 }
82 if( ! module->phone ){
83 module->phone = module->connect_module( module->service );
84 }
85 return module;
86}
87
88task_id_t spawn( char * fname ){
89 char * argv[ 2 ];
90// char * argv[ 4 ];
91 task_id_t res;
92
93// printf( "Spawning %s\n", fname );
94 argv[ 0 ] = fname;
95 argv[ 1 ] = NULL;
96 res = task_spawn( fname, argv );
97/* argv[ 0 ] = "/app/trace";
98 argv[ 1 ] = "+ti";
99 argv[ 2 ] = fname;
100 argv[ 3 ] = NULL;
101 res = task_spawn( "/app/trace", argv );
102*/
103 if( res != 0 ){
104 /* Success */
105 usleep( 10000 );
106 }
107 return res;
108}
109
110/** @}
111 */
Note: See TracBrowser for help on using the repository browser.