source: mainline/uspace/lib/net/netif/netif_remote.c@ 854151c

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 854151c was 854151c, checked in by Martin Decky <martin@…>, 14 years ago

store addresses as uint8_t values (char can be both signed or unsigned depending on platform)
improve MAC address printouts

  • Property mode set to 100644
File size: 5.6 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 libnet
30 * @{
31 */
32
33/** @file
34 * Network interface module interface implementation for remote modules.
35 */
36
37#include <netif_remote.h>
38#include <packet_client.h>
39#include <generic.h>
40
41#include <ipc/services.h>
42#include <ipc/netif.h>
43
44#include <net/modules.h>
45#include <adt/measured_strings.h>
46#include <net/packet.h>
47#include <net/device.h>
48
49/** Return the device local hardware address.
50 *
51 * @param[in] netif_phone The network interface phone.
52 * @param[in] device_id The device identifier.
53 * @param[out] address The device local hardware address.
54 * @param[out] data The address data.
55 * @return EOK on success.
56 * @return EBADMEM if the address parameter is NULL.
57 * @return ENOENT if there no such device.
58 * @return Other error codes as defined for the
59 * netif_get_addr_message() function.
60 */
61int netif_get_addr_req_remote(int netif_phone, device_id_t device_id,
62 measured_string_t **address, uint8_t **data)
63{
64 return generic_get_addr_req(netif_phone, NET_NETIF_GET_ADDR, device_id,
65 address, data);
66}
67
68/** Probe the existence of the device.
69 *
70 * @param[in] netif_phone The network interface phone.
71 * @param[in] device_id The device identifier.
72 * @param[in] irq The device interrupt number.
73 * @param[in] io The device input/output address.
74 * @return EOK on success.
75 * @return Other error codes as defined for the
76 * netif_probe_message().
77 */
78int
79netif_probe_req_remote(int netif_phone, device_id_t device_id, int irq, int io)
80{
81 return async_req_3_0(netif_phone, NET_NETIF_PROBE, device_id, irq, io);
82}
83
84/** Send the packet queue.
85 *
86 * @param[in] netif_phone The network interface phone.
87 * @param[in] device_id The device identifier.
88 * @param[in] packet The packet queue.
89 * @param[in] sender The sending module service.
90 * @return EOK on success.
91 * @return Other error codes as defined for the generic_send_msg()
92 * function.
93 */
94int
95netif_send_msg_remote(int netif_phone, device_id_t device_id, packet_t *packet,
96 services_t sender)
97{
98 return generic_send_msg_remote(netif_phone, NET_NETIF_SEND, device_id,
99 packet_get_id(packet), sender, 0);
100}
101
102/** Start the device.
103 *
104 * @param[in] netif_phone The network interface phone.
105 * @param[in] device_id The device identifier.
106 * @return EOK on success.
107 * @return Other error codes as defined for the find_device()
108 * function.
109 * @return Other error codes as defined for the
110 * netif_start_message() function.
111 */
112int netif_start_req_remote(int netif_phone, device_id_t device_id)
113{
114 return async_req_1_0(netif_phone, NET_NETIF_START, device_id);
115}
116
117/** Stop the device.
118 *
119 * @param[in] netif_phone The network interface phone.
120 * @param[in] device_id The device identifier.
121 * @return EOK on success.
122 * @return Other error codes as defined for the find_device()
123 * function.
124 * @return Other error codes as defined for the
125 * netif_stop_message() function.
126 */
127int netif_stop_req_remote(int netif_phone, device_id_t device_id)
128{
129 return async_req_1_0(netif_phone, NET_NETIF_STOP, device_id);
130}
131
132/** Return the device usage statistics.
133 *
134 * @param[in] netif_phone The network interface phone.
135 * @param[in] device_id The device identifier.
136 * @param[out] stats The device usage statistics.
137 * @return EOK on success.
138 */
139int netif_stats_req_remote(int netif_phone, device_id_t device_id,
140 device_stats_t *stats)
141{
142 if (!stats)
143 return EBADMEM;
144
145 aid_t message_id = async_send_1(netif_phone, NET_NETIF_STATS,
146 (sysarg_t) device_id, NULL);
147 async_data_read_start(netif_phone, stats, sizeof(*stats));
148
149 sysarg_t result;
150 async_wait_for(message_id, &result);
151
152 return (int) result;
153}
154
155/** Create bidirectional connection with the network interface module and
156 * registers the message receiver.
157 *
158 * @param[in] service The network interface module service.
159 * @param[in] device_id The device identifier.
160 * @param[in] me The requesting module service.
161 * @param[in] receiver The message receiver.
162 *
163 * @return The phone of the needed service.
164 * @return EOK on success.
165 * @return Other error codes as defined for the bind_service()
166 * function.
167 */
168int
169netif_bind_service_remote(services_t service, device_id_t device_id,
170 services_t me, async_client_conn_t receiver)
171{
172 return bind_service(service, device_id, me, 0, receiver);
173}
174
175/** @}
176 */
Note: See TracBrowser for help on using the repository browser.