Changeset faa3588 in mainline
- Timestamp:
- 2010-10-16T15:47:36Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- af7638e
- Parents:
- 9f9c7fd
- Location:
- uspace/lib/net
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/net/il/arp_remote.c
r9f9c7fd rfaa3588 27 27 */ 28 28 29 /** @addtogroup arp30 * 29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * 35 * 34 * ARP interface implementation for remote modules. 35 * @see arp_interface.h 36 36 */ 37 37 … … 49 49 #include <adt/measured_strings.h> 50 50 51 int arp_connect_module(services_t service){ 52 if(service != SERVICE_ARP){ 51 /** Connects to the ARP module. 52 * 53 * @param service The ARP module service. Ignored parameter. 54 * @returns The ARP module phone on success. 55 */ 56 int arp_connect_module(services_t service) 57 { 58 if (service != SERVICE_ARP) 53 59 return EINVAL; 54 } 60 55 61 return connect_to_service(SERVICE_ARP); 56 62 } 57 63 58 int arp_clean_cache_req(int arp_phone){ 64 /** Cleans the cache. 65 * 66 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 67 * @returns EOK on success. 68 */ 69 int arp_clean_cache_req(int arp_phone) 70 { 59 71 return (int) async_req_0_0(arp_phone, NET_ARP_CLEAN_CACHE); 60 72 } 61 73 62 int arp_clear_address_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address){ 74 /** Clears the given protocol address from the cache. 75 * 76 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 77 * @param[in] device_id The device identifier. 78 * @param[in] protocol The requesting protocol service. 79 * @param[in] address The protocol address to be cleared. 80 * @returns EOK on success. 81 * @returns ENOENT if the mapping is not found. 82 */ 83 int 84 arp_clear_address_req(int arp_phone, device_id_t device_id, services_t protocol, 85 measured_string_ref address) 86 { 63 87 aid_t message_id; 64 88 ipcarg_t result; 65 89 66 message_id = async_send_2(arp_phone, NET_ARP_CLEAR_ADDRESS, (ipcarg_t) device_id, protocol, NULL); 90 message_id = async_send_2(arp_phone, NET_ARP_CLEAR_ADDRESS, 91 (ipcarg_t) device_id, protocol, NULL); 67 92 measured_strings_send(arp_phone, address, 1); 68 93 async_wait_for(message_id, &result); 94 69 95 return (int) result; 70 96 } 71 97 72 int arp_clear_device_req(int arp_phone, device_id_t device_id){ 73 return (int) async_req_1_0(arp_phone, NET_ARP_CLEAR_DEVICE, (ipcarg_t) device_id); 98 /** Clears the device cache. 99 * 100 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 101 * @param[in] device_id The device identifier. 102 * @returns EOK on success. 103 * @returns ENOENT if the device is not found. 104 */ 105 int arp_clear_device_req(int arp_phone, device_id_t device_id) 106 { 107 return (int) async_req_1_0(arp_phone, NET_ARP_CLEAR_DEVICE, 108 (ipcarg_t) device_id); 74 109 } 75 110 76 int arp_device_req(int arp_phone, device_id_t device_id, services_t protocol, services_t netif, measured_string_ref address){ 111 /** Registers the new device and the requesting protocol service. 112 * 113 * Connects to the network interface layer service. 114 * Determines the device broadcast address, its address lengths and packet size. 115 * 116 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 117 * @param[in] device_id The new device identifier. 118 * @param[in] protocol The requesting protocol service. 119 * @param[in] netif The underlying device network interface layer service. 120 * @param[in] address The local requesting protocol address of the device. 121 * @returns EOK on success. 122 * @returns EEXIST if the device is already used. 123 * @returns ENOMEM if there is not enough memory left. 124 * @returns ENOENT if the network interface service is not known. 125 * @returns EREFUSED if the network interface service is not 126 * responding. 127 * @returns Other error codes as defined for the 128 * nil_packet_get_size() function. 129 * @returns Other error codes as defined for the nil_get_addr() 130 * function. 131 * @returns Other error codes as defined for the 132 * nil_get_broadcast_addr() function. 133 */ 134 int arp_device_req(int arp_phone, device_id_t device_id, services_t protocol, 135 services_t netif, measured_string_ref address) 136 { 77 137 aid_t message_id; 78 138 ipcarg_t result; 79 139 80 message_id = async_send_3(arp_phone, NET_ARP_DEVICE, (ipcarg_t) device_id, protocol, netif, NULL); 140 message_id = async_send_3(arp_phone, NET_ARP_DEVICE, 141 (ipcarg_t) device_id, protocol, netif, NULL); 81 142 measured_strings_send(arp_phone, address, 1); 82 143 async_wait_for(message_id, &result); 144 83 145 return (int) result; 84 146 } 85 147 86 task_id_t arp_task_get_id(void){ 148 /** Returns the ARP task identifier. 149 * 150 * @returns 0 if called by the remote module. 151 */ 152 task_id_t arp_task_get_id(void) 153 { 87 154 return 0; 88 155 } 89 156 90 int arp_translate_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address, measured_string_ref * translation, char ** data){ 91 return generic_translate_req(arp_phone, NET_ARP_TRANSLATE, device_id, protocol, address, 1, translation, data); 157 /** Translates the given protocol address to the network interface address. 158 * 159 * Broadcasts the ARP request if the mapping is not found. 160 * Allocates and returns the needed memory block as the data parameter. 161 * 162 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 163 * @param[in] device_id The device identifier. 164 * @param[in] protocol The requesting protocol service. 165 * @param[in] address The local requesting protocol address. 166 * @param[out] translation The translation of the local protocol address. 167 * @param[out] data The allocated raw translation data container. 168 * @returns EOK on success. 169 * @returns EINVAL if the address parameter is NULL. 170 * @returns EBADMEM if the translation or the data parameters are 171 * NULL. 172 * @returns ENOENT if the mapping is not found. 173 */ 174 int 175 arp_translate_req(int arp_phone, device_id_t device_id, services_t protocol, 176 measured_string_ref address, measured_string_ref *translation, char **data) 177 { 178 return generic_translate_req(arp_phone, NET_ARP_TRANSLATE, device_id, 179 protocol, address, 1, translation, data); 92 180 } 93 181 -
uspace/lib/net/include/arp_interface.h
r9f9c7fd rfaa3588 27 27 */ 28 28 29 /** @addtogroup arp30 * 29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 #ifndef __NET_ARP_INTERFACE_H__34 #define __NET_ARP_INTERFACE_H__33 #ifndef LIBNET_ARP_INTERFACE_H_ 34 #define LIBNET_ARP_INTERFACE_H_ 35 35 36 36 #include <adt/measured_strings.h> … … 43 43 44 44 /** @name ARP module interface 45 * 45 * This interface is used by other modules. 46 46 */ 47 47 /*@{*/ 48 48 49 /** Registers the new device and the requesting protocol service. 50 * Connects to the network interface layer service. 51 * Determines the device broadcast address, its address lengths and packet size. 52 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 53 * @param[in] device_id The new device identifier. 54 * @param[in] protocol The requesting protocol service. 55 * @param[in] netif The underlying device network interface layer service. 56 * @param[in] address The local requesting protocol address of the device. 57 * @returns EOK on success. 58 * @returns EEXIST if the device is already used. 59 * @returns ENOMEM if there is not enough memory left. 60 * @returns ENOENT if the network interface service is not known. 61 * @returns EREFUSED if the network interface service is not responding. 62 * @returns Other error codes as defined for the nil_packet_get_size() function. 63 * @returns Other error codes as defined for the nil_get_addr() function. 64 * @returns Other error codes as defined for the nil_get_broadcast_addr() function. 65 */ 66 extern int arp_device_req(int arp_phone, device_id_t device_id, services_t protocol, services_t netif, measured_string_ref address); 67 68 /** Translates the given protocol address to the network interface address. 69 * Broadcasts the ARP request if the mapping is not found. 70 * Allocates and returns the needed memory block as the data parameter. 71 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 72 * @param[in] device_id The device identifier. 73 * @param[in] protocol The requesting protocol service. 74 * @param[in] address The local requesting protocol address. 75 * @param[out] translation The translation of the local protocol address. 76 * @param[out] data The allocated raw translation data container. 77 * @returns EOK on success. 78 * @returns EINVAL if the address parameter is NULL. 79 * @returns EBADMEM if the translation or the data parameters are NULL. 80 * @returns ENOENT if the mapping is not found. 81 */ 82 extern int arp_translate_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address, measured_string_ref * translation, char ** data); 83 84 /** Clears the device cache. 85 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 86 * @param[in] device_id The device identifier. 87 * @returns EOK on success. 88 * @returns ENOENT if the device is not found. 89 */ 90 extern int arp_clear_device_req(int arp_phone, device_id_t device_id); 91 92 /** Clears the given protocol address from the cache. 93 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 94 * @param[in] device_id The device identifier. 95 * @param[in] protocol The requesting protocol service. 96 * @param[in] address The protocol address to be cleared. 97 * @returns EOK on success. 98 * @returns ENOENT if the mapping is not found. 99 */ 100 extern int arp_clear_address_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address); 101 102 /** Cleans the cache. 103 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 104 * @returns EOK on success. 105 */ 106 extern int arp_clean_cache_req(int arp_phone); 107 108 /** Connects to the ARP module. 109 * @param service The ARP module service. Ignored parameter. 110 * @returns The ARP module phone on success. 111 */ 112 extern int arp_connect_module(services_t service); 113 114 /** Returns the ARP task identifier. 115 * @returns 0 if called by the remote module. 116 */ 49 extern int arp_device_req(int, device_id_t, services_t, services_t, 50 measured_string_ref); 51 extern int arp_translate_req(int, device_id_t, services_t, measured_string_ref, 52 measured_string_ref *, char **); 53 extern int arp_clear_device_req(int, device_id_t); 54 extern int arp_clear_address_req(int, device_id_t, services_t, 55 measured_string_ref); 56 extern int arp_clean_cache_req(int); 57 extern int arp_connect_module(services_t); 117 58 extern task_id_t arp_task_get_id(void); 118 59
Note:
See TracChangeset
for help on using the changeset viewer.