Changeset 02a09ed in mainline for uspace/lib/c/generic/iplink.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/lib/c/generic/iplink.c
redf0d27 r02a09ed 86 86 87 87 ipc_call_t answer; 88 aid_t req = async_send_2(exch, IPLINK_SEND, (sysarg_t) sdu->lsrc, 89 (sysarg_t) sdu->ldest, &answer); 90 int rc = async_data_write_start(exch, sdu->data, sdu->size); 88 aid_t req = async_send_0(exch, IPLINK_SEND, &answer); 89 90 int rc = async_data_write_start(exch, &sdu->src, sizeof(inet_addr_t)); 91 if (rc != EOK) { 92 async_exchange_end(exch); 93 async_forget(req); 94 return rc; 95 } 96 97 rc = async_data_write_start(exch, &sdu->dest, sizeof(inet_addr_t)); 98 if (rc != EOK) { 99 async_exchange_end(exch); 100 async_forget(req); 101 return rc; 102 } 103 104 rc = async_data_write_start(exch, sdu->data, sdu->size); 91 105 92 106 async_exchange_end(exch); … … 120 134 int iplink_addr_add(iplink_t *iplink, inet_addr_t *addr) 121 135 { 122 uint32_t addr_addr; 123 int rc = inet_addr_pack(addr, &addr_addr); 124 if (rc != EOK) 125 return rc; 126 127 async_exch_t *exch = async_exchange_begin(iplink->sess); 128 rc = async_req_1_0(exch, IPLINK_ADDR_ADD, (sysarg_t) addr_addr); 129 async_exchange_end(exch); 130 131 return rc; 136 async_exch_t *exch = async_exchange_begin(iplink->sess); 137 138 ipc_call_t answer; 139 aid_t req = async_send_0(exch, IPLINK_ADDR_ADD, &answer); 140 141 int rc = async_data_write_start(exch, addr, sizeof(inet_addr_t)); 142 async_exchange_end(exch); 143 144 if (rc != EOK) { 145 async_forget(req); 146 return rc; 147 } 148 149 sysarg_t retval; 150 async_wait_for(req, &retval); 151 152 return (int) retval; 132 153 } 133 154 134 155 int iplink_addr_remove(iplink_t *iplink, inet_addr_t *addr) 135 156 { 136 uint32_t addr_addr; 137 int rc = inet_addr_pack(addr, &addr_addr); 138 if (rc != EOK) 139 return rc; 140 141 async_exch_t *exch = async_exchange_begin(iplink->sess); 142 rc = async_req_1_0(exch, IPLINK_ADDR_REMOVE, (sysarg_t) addr_addr); 143 async_exchange_end(exch); 144 145 return rc; 146 } 147 148 static void iplink_ev_recv(iplink_t *iplink, ipc_callid_t callid, 149 ipc_call_t *call) 150 { 151 iplink_sdu_t sdu; 152 153 sdu.lsrc = IPC_GET_ARG1(*call); 154 sdu.ldest = IPC_GET_ARG2(*call); 155 156 int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); 157 if (rc != EOK) { 158 async_answer_0(callid, rc); 157 async_exch_t *exch = async_exchange_begin(iplink->sess); 158 159 ipc_call_t answer; 160 aid_t req = async_send_0(exch, IPLINK_ADDR_REMOVE, &answer); 161 162 int rc = async_data_write_start(exch, addr, sizeof(inet_addr_t)); 163 async_exchange_end(exch); 164 165 if (rc != EOK) { 166 async_forget(req); 167 return rc; 168 } 169 170 sysarg_t retval; 171 async_wait_for(req, &retval); 172 173 return (int) retval; 174 } 175 176 static void iplink_ev_recv(iplink_t *iplink, ipc_callid_t iid, 177 ipc_call_t *icall) 178 { 179 iplink_recv_sdu_t sdu; 180 181 uint16_t af = IPC_GET_ARG1(*icall); 182 183 int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, 184 &sdu.size); 185 if (rc != EOK) { 186 async_answer_0(iid, rc); 159 187 return; 160 188 } 161 189 162 rc = iplink->ev_ops->recv(iplink, &sdu );190 rc = iplink->ev_ops->recv(iplink, &sdu, af); 163 191 free(sdu.data); 164 async_answer_0( callid, rc);192 async_answer_0(iid, rc); 165 193 } 166 194
Note:
See TracChangeset
for help on using the changeset viewer.