Changeset 02a09ed in mainline for uspace/lib/c/generic/iplink_srv.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_srv.c
redf0d27 r02a09ed 34 34 * @brief IP link server stub 35 35 */ 36 36 37 #include <errno.h> 37 38 #include <ipc/iplink.h> 38 39 #include <stdlib.h> 39 40 #include <sys/types.h> 40 41 #include <inet/addr.h> 41 42 #include <inet/iplink_srv.h> 42 43 … … 49 50 } 50 51 51 static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t callid, 52 ipc_call_t *call) 53 { 54 int rc = srv->ops->addr_add(srv, IPC_GET_ARG1(*call)); 55 async_answer_0(callid, rc); 56 } 57 58 static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_callid_t callid, 59 ipc_call_t *call) 60 { 61 int rc = srv->ops->addr_remove(srv, IPC_GET_ARG1(*call)); 62 async_answer_0(callid, rc); 63 } 64 65 static void iplink_send_srv(iplink_srv_t *srv, ipc_callid_t callid, 66 ipc_call_t *call) 67 { 68 iplink_srv_sdu_t sdu; 69 int rc; 70 71 sdu.lsrc = IPC_GET_ARG1(*call); 72 sdu.ldest = IPC_GET_ARG2(*call); 73 74 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); 75 if (rc != EOK) { 76 async_answer_0(callid, rc); 77 return; 78 } 52 static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t iid, 53 ipc_call_t *icall) 54 { 55 ipc_callid_t callid; 56 size_t size; 57 if (!async_data_write_receive(&callid, &size)) { 58 async_answer_0(callid, EREFUSED); 59 async_answer_0(iid, EREFUSED); 60 return; 61 } 62 63 if (size != sizeof(inet_addr_t)) { 64 async_answer_0(callid, EINVAL); 65 async_answer_0(iid, EINVAL); 66 return; 67 } 68 69 inet_addr_t addr; 70 int rc = async_data_write_finalize(callid, &addr, size); 71 if (rc != EOK) { 72 async_answer_0(callid, (sysarg_t) rc); 73 async_answer_0(iid, (sysarg_t) rc); 74 } 75 76 rc = srv->ops->addr_add(srv, &addr); 77 async_answer_0(iid, (sysarg_t) rc); 78 } 79 80 static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_callid_t iid, 81 ipc_call_t *icall) 82 { 83 ipc_callid_t callid; 84 size_t size; 85 if (!async_data_write_receive(&callid, &size)) { 86 async_answer_0(callid, EREFUSED); 87 async_answer_0(iid, EREFUSED); 88 return; 89 } 90 91 if (size != sizeof(inet_addr_t)) { 92 async_answer_0(callid, EINVAL); 93 async_answer_0(iid, EINVAL); 94 return; 95 } 96 97 inet_addr_t addr; 98 int rc = async_data_write_finalize(callid, &addr, size); 99 if (rc != EOK) { 100 async_answer_0(callid, (sysarg_t) rc); 101 async_answer_0(iid, (sysarg_t) rc); 102 } 103 104 rc = srv->ops->addr_remove(srv, &addr); 105 async_answer_0(iid, (sysarg_t) rc); 106 } 107 108 static void iplink_send_srv(iplink_srv_t *srv, ipc_callid_t iid, 109 ipc_call_t *icall) 110 { 111 iplink_sdu_t sdu; 112 113 ipc_callid_t callid; 114 size_t size; 115 if (!async_data_write_receive(&callid, &size)) { 116 async_answer_0(callid, EREFUSED); 117 async_answer_0(iid, EREFUSED); 118 return; 119 } 120 121 if (size != sizeof(inet_addr_t)) { 122 async_answer_0(callid, EINVAL); 123 async_answer_0(iid, EINVAL); 124 return; 125 } 126 127 int rc = async_data_write_finalize(callid, &sdu.src, size); 128 if (rc != EOK) { 129 async_answer_0(callid, (sysarg_t) rc); 130 async_answer_0(iid, (sysarg_t) rc); 131 } 132 133 if (!async_data_write_receive(&callid, &size)) { 134 async_answer_0(callid, EREFUSED); 135 async_answer_0(iid, EREFUSED); 136 return; 137 } 138 139 if (size != sizeof(inet_addr_t)) { 140 async_answer_0(callid, EINVAL); 141 async_answer_0(iid, EINVAL); 142 return; 143 } 144 145 rc = async_data_write_finalize(callid, &sdu.dest, size); 146 if (rc != EOK) { 147 async_answer_0(callid, (sysarg_t) rc); 148 async_answer_0(iid, (sysarg_t) rc); 149 } 150 151 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, 152 &sdu.size); 153 if (rc != EOK) 154 return; 79 155 80 156 rc = srv->ops->send(srv, &sdu); 81 157 free(sdu.data); 82 async_answer_0( callid, rc);158 async_answer_0(iid, rc); 83 159 } 84 160 … … 155 231 } 156 232 157 int iplink_ev_recv(iplink_srv_t *srv, iplink_ srv_sdu_t *sdu)233 int iplink_ev_recv(iplink_srv_t *srv, iplink_recv_sdu_t *sdu, uint16_t af) 158 234 { 159 235 if (srv->client_sess == NULL) … … 163 239 164 240 ipc_call_t answer; 165 aid_t req = async_send_2(exch, IPLINK_EV_RECV, (sysarg_t) sdu->lsrc, 166 (sysarg_t) sdu->ldest, &answer); 241 aid_t req = async_send_1(exch, IPLINK_EV_RECV, (sysarg_t) af, 242 &answer); 243 167 244 int rc = async_data_write_start(exch, sdu->data, sdu->size); 168 245 async_exchange_end(exch);
Note:
See TracChangeset
for help on using the changeset viewer.