Changeset 02a09ed in mainline for uspace/srv/net/inetsrv/inetping.c
- Timestamp:
- 2013-06-28T20:20:03Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1d24ad3
- Parents:
- edf0d27
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/inetping.c
redf0d27 r02a09ed 43 43 #include <stdlib.h> 44 44 #include <sys/types.h> 45 45 #include <net/socket_codes.h> 46 46 #include "icmp.h" 47 47 #include "icmp_std.h" … … 55 55 static uint16_t inetping_ident = 0; 56 56 57 static inetping_client_t *inetping_client_find(uint16_t);58 59 57 static int inetping_send(inetping_client_t *client, inetping_sdu_t *sdu) 60 58 { … … 62 60 } 63 61 64 static int inetping_get_srcaddr(inetping_client_t *client, uint32_t remote,65 uint32_t *local)62 static int inetping_get_srcaddr(inetping_client_t *client, addr32_t remote, 63 addr32_t *local) 66 64 { 67 65 inet_addr_t remote_addr; 68 inet_addr_ unpack(remote, &remote_addr);66 inet_addr_set(remote, &remote_addr); 69 67 70 68 inet_addr_t local_addr; … … 73 71 return rc; 74 72 75 return inet_addr_pack(&local_addr, local); 73 uint16_t family = inet_addr_get(&local_addr, local, NULL); 74 if (family != AF_INET) 75 return EINVAL; 76 77 return EOK; 78 } 79 80 static inetping_client_t *inetping_client_find(uint16_t ident) 81 { 82 fibril_mutex_lock(&client_list_lock); 83 84 list_foreach(client_list, link) { 85 inetping_client_t *client = list_get_instance(link, 86 inetping_client_t, client_list); 87 88 if (client->ident == ident) { 89 fibril_mutex_unlock(&client_list_lock); 90 return client; 91 } 92 } 93 94 fibril_mutex_unlock(&client_list_lock); 95 return NULL; 76 96 } 77 97 78 98 int inetping_recv(uint16_t ident, inetping_sdu_t *sdu) 79 99 { 80 inetping_client_t *client; 81 async_exch_t *exch; 82 ipc_call_t answer; 83 84 client = inetping_client_find(ident); 100 inetping_client_t *client = inetping_client_find(ident); 85 101 if (client == NULL) { 86 102 log_msg(LOG_DEFAULT, LVL_DEBUG, "Unknown ICMP ident. Dropping."); 87 103 return ENOENT; 88 104 } 89 90 exch = async_exchange_begin(client->sess); 91 105 106 async_exch_t *exch = async_exchange_begin(client->sess); 107 108 ipc_call_t answer; 92 109 aid_t req = async_send_3(exch, INETPING_EV_RECV, (sysarg_t) sdu->src, 93 110 (sysarg_t) sdu->dest, sdu->seq_no, &answer); 94 111 int rc = async_data_write_start(exch, sdu->data, sdu->size); 112 95 113 async_exchange_end(exch); 96 114 … … 170 188 } 171 189 172 static inetping_client_t *inetping_client_find(uint16_t ident)173 {174 fibril_mutex_lock(&client_list_lock);175 176 list_foreach(client_list, link) {177 inetping_client_t *client = list_get_instance(link,178 inetping_client_t, client_list);179 180 if (client->ident == ident) {181 fibril_mutex_unlock(&client_list_lock);182 return client;183 }184 }185 186 fibril_mutex_unlock(&client_list_lock);187 return NULL;188 }189 190 190 void inetping_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg) 191 191 { 192 inetping_client_t client;193 int rc;194 195 192 log_msg(LOG_DEFAULT, LVL_DEBUG, "inetping_conn()"); 196 193 197 194 /* Accept the connection */ 198 195 async_answer_0(iid, EOK); 199 200 rc = inetping_client_init(&client); 196 197 inetping_client_t client; 198 int rc = inetping_client_init(&client); 201 199 if (rc != EOK) 202 200 return;
Note:
See TracChangeset
for help on using the changeset viewer.