Changeset d8b47eca in mainline for uspace/lib/c/generic/inet.c
- Timestamp:
- 2013-07-03T17:16:44Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 66366470, 882bc4b
- Parents:
- 1d24ad3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/inet.c
r1d24ad3 rd8b47eca 108 108 int inet_send(inet_dgram_t *dgram, uint8_t ttl, inet_df_t df) 109 109 { 110 addr32_t src_v4; 111 addr128_t src_v6; 112 uint16_t src_af = inet_addr_get(&dgram->src, &src_v4, &src_v6); 113 114 addr32_t dest_v4; 115 addr128_t dest_v6; 116 uint16_t dest_af = inet_addr_get(&dgram->dest, &dest_v4, &dest_v6); 117 118 if (src_af != dest_af) 119 return EINVAL; 120 121 async_exch_t *exch; 110 async_exch_t *exch = async_exchange_begin(inet_sess); 111 122 112 ipc_call_t answer; 123 aid_t req; 124 int rc; 125 126 switch (src_af) { 127 case AF_INET: 128 exch = async_exchange_begin(inet_sess); 129 130 req = async_send_5(exch, INET_SEND, (sysarg_t) src_v4, 131 (sysarg_t) dest_v4, dgram->tos, ttl, df, &answer); 132 rc = async_data_write_start(exch, dgram->data, dgram->size); 133 113 aid_t req = async_send_3(exch, INET_SEND, dgram->tos, ttl, df, 114 &answer); 115 116 int rc = async_data_write_start(exch, &dgram->src, sizeof(inet_addr_t)); 117 if (rc != EOK) { 134 118 async_exchange_end(exch); 135 break; 136 case AF_INET6: 137 // FIXME TODO 138 return ENOTSUP; 139 default: 140 return EINVAL; 141 } 119 async_forget(req); 120 return rc; 121 } 122 123 rc = async_data_write_start(exch, &dgram->dest, sizeof(inet_addr_t)); 124 if (rc != EOK) { 125 async_exchange_end(exch); 126 async_forget(req); 127 return rc; 128 } 129 130 rc = async_data_write_start(exch, dgram->data, dgram->size); 131 132 async_exchange_end(exch); 142 133 143 134 if (rc != EOK) { … … 154 145 int inet_get_srcaddr(inet_addr_t *remote, uint8_t tos, inet_addr_t *local) 155 146 { 156 addr32_t remote_v4; 157 addr128_t remote_v6; 158 uint16_t remote_af = inet_addr_get(remote, &remote_v4, &remote_v6); 159 160 async_exch_t *exch; 161 int rc; 162 163 switch (remote_af) { 164 case AF_INET: 165 exch = async_exchange_begin(inet_sess); 166 167 sysarg_t local_v4; 168 rc = async_req_2_1(exch, INET_GET_SRCADDR, (sysarg_t) remote_v4, 169 tos, &local_v4); 170 147 async_exch_t *exch = async_exchange_begin(inet_sess); 148 149 ipc_call_t answer; 150 aid_t req = async_send_1(exch, INET_GET_SRCADDR, tos, &answer); 151 152 int rc = async_data_write_start(exch, remote, sizeof(inet_addr_t)); 153 if (rc != EOK) { 171 154 async_exchange_end(exch); 172 173 if (rc != EOK) 174 return rc; 175 176 inet_addr_set(local_v4, local); 177 return EOK; 178 case AF_INET6: 179 // FIXME TODO 180 return ENOTSUP; 181 default: 182 return EINVAL; 183 } 155 async_forget(req); 156 return rc; 157 } 158 159 rc = async_data_read_start(exch, local, sizeof(inet_addr_t)); 160 161 async_exchange_end(exch); 162 163 if (rc != EOK) { 164 async_forget(req); 165 return rc; 166 } 167 168 sysarg_t retval; 169 async_wait_for(req, &retval); 170 171 return (int) retval; 184 172 } 185 173
Note:
See TracChangeset
for help on using the changeset viewer.