Changeset 984a9ba in mainline for uspace/lib/c/generic/iplink_srv.c
- Timestamp:
- 2018-07-05T09:34:09Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63d46341
- Parents:
- 76f566d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/iplink_srv.c
r76f566d r984a9ba 42 42 #include <inet/iplink_srv.h> 43 43 44 static void iplink_get_mtu_srv(iplink_srv_t *srv, cap_call_handle_t chandle, 45 ipc_call_t *call) 44 static void iplink_get_mtu_srv(iplink_srv_t *srv, ipc_call_t *call) 46 45 { 47 46 size_t mtu; 48 47 errno_t rc = srv->ops->get_mtu(srv, &mtu); 49 async_answer_1(chandle, rc, mtu); 50 } 51 52 static void iplink_get_mac48_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle, 53 ipc_call_t *icall) 48 async_answer_1(call, rc, mtu); 49 } 50 51 static void iplink_get_mac48_srv(iplink_srv_t *srv, ipc_call_t *icall) 54 52 { 55 53 addr48_t mac; 56 54 errno_t rc = srv->ops->get_mac48(srv, &mac); 57 55 if (rc != EOK) { 58 async_answer_0(icall _handle, rc);59 return; 60 } 61 62 cap_call_handle_t chandle;63 size_t size; 64 if (!async_data_read_receive(&c handle, &size)) {65 async_answer_0( chandle, EREFUSED);66 async_answer_0(icall _handle, EREFUSED);56 async_answer_0(icall, rc); 57 return; 58 } 59 60 ipc_call_t call; 61 size_t size; 62 if (!async_data_read_receive(&call, &size)) { 63 async_answer_0(&call, EREFUSED); 64 async_answer_0(icall, EREFUSED); 67 65 return; 68 66 } 69 67 70 68 if (size != sizeof(addr48_t)) { 71 async_answer_0( chandle, EINVAL);72 async_answer_0(icall _handle, EINVAL);73 return; 74 } 75 76 rc = async_data_read_finalize( chandle, &mac, size);69 async_answer_0(&call, EINVAL); 70 async_answer_0(icall, EINVAL); 71 return; 72 } 73 74 rc = async_data_read_finalize(&call, &mac, size); 77 75 if (rc != EOK) 78 async_answer_0(chandle, rc); 79 80 async_answer_0(icall_handle, rc); 81 } 82 83 static void iplink_set_mac48_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle, 84 ipc_call_t *icall) 76 async_answer_0(&call, rc); 77 78 async_answer_0(icall, rc); 79 } 80 81 static void iplink_set_mac48_srv(iplink_srv_t *srv, ipc_call_t *icall) 85 82 { 86 83 errno_t rc; 87 84 size_t size; 88 85 addr48_t mac; 89 cap_call_handle_t chandle; 90 91 if (!async_data_write_receive(&c handle, &size)) {92 async_answer_0( chandle, EREFUSED);93 async_answer_0(icall _handle, EREFUSED);86 87 ipc_call_t call; 88 if (!async_data_write_receive(&call, &size)) { 89 async_answer_0(&call, EREFUSED); 90 async_answer_0(icall, EREFUSED); 94 91 } 95 92 96 93 rc = srv->ops->set_mac48(srv, &mac); 97 94 if (rc != EOK) { 98 async_answer_0(icall _handle, rc);99 return; 100 } 101 102 rc = async_data_read_finalize( chandle, &mac, sizeof(addr48_t));95 async_answer_0(icall, rc); 96 return; 97 } 98 99 rc = async_data_read_finalize(&call, &mac, sizeof(addr48_t)); 103 100 if (rc != EOK) 104 async_answer_0(chandle, rc); 105 106 async_answer_0(icall_handle, rc); 107 } 108 109 static void iplink_addr_add_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle, 110 ipc_call_t *icall) 111 { 112 cap_call_handle_t chandle; 113 size_t size; 114 if (!async_data_write_receive(&chandle, &size)) { 115 async_answer_0(chandle, EREFUSED); 116 async_answer_0(icall_handle, EREFUSED); 101 async_answer_0(&call, rc); 102 103 async_answer_0(icall, rc); 104 } 105 106 static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_call_t *icall) 107 { 108 ipc_call_t call; 109 size_t size; 110 if (!async_data_write_receive(&call, &size)) { 111 async_answer_0(&call, EREFUSED); 112 async_answer_0(icall, EREFUSED); 117 113 return; 118 114 } 119 115 120 116 if (size != sizeof(inet_addr_t)) { 121 async_answer_0( chandle, EINVAL);122 async_answer_0(icall _handle, EINVAL);117 async_answer_0(&call, EINVAL); 118 async_answer_0(icall, EINVAL); 123 119 return; 124 120 } 125 121 126 122 inet_addr_t addr; 127 errno_t rc = async_data_write_finalize( chandle, &addr, size);128 if (rc != EOK) { 129 async_answer_0( chandle, rc);130 async_answer_0(icall _handle, rc);123 errno_t rc = async_data_write_finalize(&call, &addr, size); 124 if (rc != EOK) { 125 async_answer_0(&call, rc); 126 async_answer_0(icall, rc); 131 127 } 132 128 133 129 rc = srv->ops->addr_add(srv, &addr); 134 async_answer_0(icall_handle, rc); 135 } 136 137 static void iplink_addr_remove_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle, 138 ipc_call_t *icall) 139 { 140 cap_call_handle_t chandle; 141 size_t size; 142 if (!async_data_write_receive(&chandle, &size)) { 143 async_answer_0(chandle, EREFUSED); 144 async_answer_0(icall_handle, EREFUSED); 130 async_answer_0(icall, rc); 131 } 132 133 static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_call_t *icall) 134 { 135 ipc_call_t call; 136 size_t size; 137 if (!async_data_write_receive(&call, &size)) { 138 async_answer_0(&call, EREFUSED); 139 async_answer_0(icall, EREFUSED); 145 140 return; 146 141 } 147 142 148 143 if (size != sizeof(inet_addr_t)) { 149 async_answer_0( chandle, EINVAL);150 async_answer_0(icall _handle, EINVAL);144 async_answer_0(&call, EINVAL); 145 async_answer_0(icall, EINVAL); 151 146 return; 152 147 } 153 148 154 149 inet_addr_t addr; 155 errno_t rc = async_data_write_finalize( chandle, &addr, size);156 if (rc != EOK) { 157 async_answer_0( chandle, rc);158 async_answer_0(icall _handle, rc);150 errno_t rc = async_data_write_finalize(&call, &addr, size); 151 if (rc != EOK) { 152 async_answer_0(&call, rc); 153 async_answer_0(icall, rc); 159 154 } 160 155 161 156 rc = srv->ops->addr_remove(srv, &addr); 162 async_answer_0(icall_handle, rc); 163 } 164 165 static void iplink_send_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle, 166 ipc_call_t *icall) 157 async_answer_0(icall, rc); 158 } 159 160 static void iplink_send_srv(iplink_srv_t *srv, ipc_call_t *icall) 167 161 { 168 162 iplink_sdu_t sdu; … … 174 168 &sdu.size); 175 169 if (rc != EOK) { 176 async_answer_0(icall _handle, rc);170 async_answer_0(icall, rc); 177 171 return; 178 172 } … … 180 174 rc = srv->ops->send(srv, &sdu); 181 175 free(sdu.data); 182 async_answer_0(icall_handle, rc); 183 } 184 185 static void iplink_send6_srv(iplink_srv_t *srv, cap_call_handle_t icall_handle, 186 ipc_call_t *icall) 176 async_answer_0(icall, rc); 177 } 178 179 static void iplink_send6_srv(iplink_srv_t *srv, ipc_call_t *icall) 187 180 { 188 181 iplink_sdu6_t sdu; 189 182 190 cap_call_handle_t chandle;191 size_t size; 192 if (!async_data_write_receive(&c handle, &size)) {193 async_answer_0( chandle, EREFUSED);194 async_answer_0(icall _handle, EREFUSED);183 ipc_call_t call; 184 size_t size; 185 if (!async_data_write_receive(&call, &size)) { 186 async_answer_0(&call, EREFUSED); 187 async_answer_0(icall, EREFUSED); 195 188 return; 196 189 } 197 190 198 191 if (size != sizeof(addr48_t)) { 199 async_answer_0( chandle, EINVAL);200 async_answer_0(icall _handle, EINVAL);201 return; 202 } 203 204 errno_t rc = async_data_write_finalize( chandle, &sdu.dest, size);205 if (rc != EOK) { 206 async_answer_0( chandle, rc);207 async_answer_0(icall _handle, rc);192 async_answer_0(&call, EINVAL); 193 async_answer_0(icall, EINVAL); 194 return; 195 } 196 197 errno_t rc = async_data_write_finalize(&call, &sdu.dest, size); 198 if (rc != EOK) { 199 async_answer_0(&call, rc); 200 async_answer_0(icall, rc); 208 201 } 209 202 … … 211 204 &sdu.size); 212 205 if (rc != EOK) { 213 async_answer_0(icall _handle, rc);206 async_answer_0(icall, rc); 214 207 return; 215 208 } … … 217 210 rc = srv->ops->send6(srv, &sdu); 218 211 free(sdu.data); 219 async_answer_0(icall _handle, rc);212 async_answer_0(icall, rc); 220 213 } 221 214 … … 229 222 } 230 223 231 errno_t iplink_conn( cap_call_handle_t icall_handle,ipc_call_t *icall, void *arg)224 errno_t iplink_conn(ipc_call_t *icall, void *arg) 232 225 { 233 226 iplink_srv_t *srv = (iplink_srv_t *) arg; … … 237 230 if (srv->connected) { 238 231 fibril_mutex_unlock(&srv->lock); 239 async_answer_0(icall _handle, EBUSY);232 async_answer_0(icall, EBUSY); 240 233 return EBUSY; 241 234 } … … 245 238 246 239 /* Accept the connection */ 247 async_answer_0(icall _handle, EOK);240 async_answer_0(icall, EOK); 248 241 249 242 async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE); … … 259 252 while (true) { 260 253 ipc_call_t call; 261 cap_call_handle_t chandle =async_get_call(&call);254 async_get_call(&call); 262 255 sysarg_t method = IPC_GET_IMETHOD(call); 263 256 … … 267 260 srv->connected = false; 268 261 fibril_mutex_unlock(&srv->lock); 269 async_answer_0( chandle, EOK);262 async_answer_0(&call, EOK); 270 263 break; 271 264 } … … 273 266 switch (method) { 274 267 case IPLINK_GET_MTU: 275 iplink_get_mtu_srv(srv, chandle,&call);268 iplink_get_mtu_srv(srv, &call); 276 269 break; 277 270 case IPLINK_GET_MAC48: 278 iplink_get_mac48_srv(srv, chandle,&call);271 iplink_get_mac48_srv(srv, &call); 279 272 break; 280 273 case IPLINK_SET_MAC48: 281 iplink_set_mac48_srv(srv, chandle,&call);274 iplink_set_mac48_srv(srv, &call); 282 275 break; 283 276 case IPLINK_SEND: 284 iplink_send_srv(srv, chandle,&call);277 iplink_send_srv(srv, &call); 285 278 break; 286 279 case IPLINK_SEND6: 287 iplink_send6_srv(srv, chandle,&call);280 iplink_send6_srv(srv, &call); 288 281 break; 289 282 case IPLINK_ADDR_ADD: 290 iplink_addr_add_srv(srv, chandle,&call);283 iplink_addr_add_srv(srv, &call); 291 284 break; 292 285 case IPLINK_ADDR_REMOVE: 293 iplink_addr_remove_srv(srv, chandle,&call);286 iplink_addr_remove_srv(srv, &call); 294 287 break; 295 288 default: 296 async_answer_0( chandle, EINVAL);289 async_answer_0(&call, EINVAL); 297 290 } 298 291 }
Note:
See TracChangeset
for help on using the changeset viewer.