Changes in uspace/lib/c/generic/iplink_srv.c [5a6cc679:a35b458] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/iplink_srv.c
r5a6cc679 ra35b458 59 59 return; 60 60 } 61 61 62 62 ipc_callid_t callid; 63 63 size_t size; … … 67 67 return; 68 68 } 69 69 70 70 if (size != sizeof(addr48_t)) { 71 71 async_answer_0(callid, EINVAL); … … 73 73 return; 74 74 } 75 75 76 76 rc = async_data_read_finalize(callid, &mac, size); 77 77 if (rc != EOK) 78 78 async_answer_0(callid, rc); 79 79 80 80 async_answer_0(iid, rc); 81 81 } … … 99 99 return; 100 100 } 101 101 102 102 rc = async_data_read_finalize(callid, &mac, sizeof(addr48_t)); 103 103 if (rc != EOK) 104 104 async_answer_0(callid, rc); 105 105 106 106 async_answer_0(iid, rc); 107 107 } … … 117 117 return; 118 118 } 119 119 120 120 if (size != sizeof(inet_addr_t)) { 121 121 async_answer_0(callid, EINVAL); … … 123 123 return; 124 124 } 125 125 126 126 inet_addr_t addr; 127 127 errno_t rc = async_data_write_finalize(callid, &addr, size); … … 130 130 async_answer_0(iid, rc); 131 131 } 132 132 133 133 rc = srv->ops->addr_add(srv, &addr); 134 134 async_answer_0(iid, rc); … … 145 145 return; 146 146 } 147 147 148 148 if (size != sizeof(inet_addr_t)) { 149 149 async_answer_0(callid, EINVAL); … … 151 151 return; 152 152 } 153 153 154 154 inet_addr_t addr; 155 155 errno_t rc = async_data_write_finalize(callid, &addr, size); … … 158 158 async_answer_0(iid, rc); 159 159 } 160 160 161 161 rc = srv->ops->addr_remove(srv, &addr); 162 162 async_answer_0(iid, rc); … … 167 167 { 168 168 iplink_sdu_t sdu; 169 169 170 170 sdu.src = IPC_GET_ARG1(*icall); 171 171 sdu.dest = IPC_GET_ARG2(*icall); 172 172 173 173 errno_t rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, 174 174 &sdu.size); … … 177 177 return; 178 178 } 179 179 180 180 rc = srv->ops->send(srv, &sdu); 181 181 free(sdu.data); … … 187 187 { 188 188 iplink_sdu6_t sdu; 189 189 190 190 ipc_callid_t callid; 191 191 size_t size; … … 195 195 return; 196 196 } 197 197 198 198 if (size != sizeof(addr48_t)) { 199 199 async_answer_0(callid, EINVAL); … … 201 201 return; 202 202 } 203 203 204 204 errno_t rc = async_data_write_finalize(callid, &sdu.dest, size); 205 205 if (rc != EOK) { … … 207 207 async_answer_0(iid, rc); 208 208 } 209 209 210 210 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, 211 211 &sdu.size); … … 214 214 return; 215 215 } 216 216 217 217 rc = srv->ops->send6(srv, &sdu); 218 218 free(sdu.data); … … 233 233 iplink_srv_t *srv = (iplink_srv_t *) arg; 234 234 errno_t rc; 235 235 236 236 fibril_mutex_lock(&srv->lock); 237 237 if (srv->connected) { … … 240 240 return EBUSY; 241 241 } 242 242 243 243 srv->connected = true; 244 244 fibril_mutex_unlock(&srv->lock); 245 245 246 246 /* Accept the connection */ 247 247 async_answer_0(iid, EOK); 248 248 249 249 async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE); 250 250 if (sess == NULL) 251 251 return ENOMEM; 252 252 253 253 srv->client_sess = sess; 254 254 255 255 rc = srv->ops->open(srv); 256 256 if (rc != EOK) 257 257 return rc; 258 258 259 259 while (true) { 260 260 ipc_call_t call; 261 261 ipc_callid_t callid = async_get_call(&call); 262 262 sysarg_t method = IPC_GET_IMETHOD(call); 263 263 264 264 if (!method) { 265 265 /* The other side has hung up */ … … 270 270 break; 271 271 } 272 272 273 273 switch (method) { 274 274 case IPLINK_GET_MTU: … … 297 297 } 298 298 } 299 299 300 300 return srv->ops->close(srv); 301 301 } … … 306 306 if (srv->client_sess == NULL) 307 307 return EIO; 308 308 309 309 async_exch_t *exch = async_exchange_begin(srv->client_sess); 310 310 311 311 ipc_call_t answer; 312 312 aid_t req = async_send_1(exch, IPLINK_EV_RECV, (sysarg_t)ver, 313 313 &answer); 314 314 315 315 errno_t rc = async_data_write_start(exch, sdu->data, sdu->size); 316 316 async_exchange_end(exch); 317 317 318 318 if (rc != EOK) { 319 319 async_forget(req); 320 320 return rc; 321 321 } 322 322 323 323 errno_t retval; 324 324 async_wait_for(req, &retval); 325 325 if (retval != EOK) 326 326 return retval; 327 327 328 328 return EOK; 329 329 } … … 333 333 if (srv->client_sess == NULL) 334 334 return EIO; 335 335 336 336 async_exch_t *exch = async_exchange_begin(srv->client_sess); 337 337 338 338 ipc_call_t answer; 339 339 aid_t req = async_send_0(exch, IPLINK_EV_CHANGE_ADDR, &answer); 340 340 341 341 errno_t rc = async_data_write_start(exch, addr, sizeof(addr48_t)); 342 342 async_exchange_end(exch); 343 343 344 344 if (rc != EOK) { 345 345 async_forget(req); 346 346 return rc; 347 347 } 348 348 349 349 errno_t retval; 350 350 async_wait_for(req, &retval); 351 351 if (retval != EOK) 352 352 return retval; 353 353 354 354 return EOK; 355 355 }
Note:
See TracChangeset
for help on using the changeset viewer.