Changeset a2e3ee6 in mainline for uspace/lib/c
- Timestamp:
- 2013-06-20T16:45:58Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 08bb73b
- Parents:
- 19a4f73
- Location:
- uspace/lib/c
- Files:
-
- 2 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
r19a4f73 ra2e3ee6 93 93 generic/futex.c \ 94 94 generic/inet/addr.c \ 95 generic/inet/addr2.c \96 95 generic/inet.c \ 97 96 generic/inetcfg.c \ -
uspace/lib/c/generic/dnsr.c
r19a4f73 ra2e3ee6 108 108 109 109 info->cname = str_dup(cname_buf); 110 inet 2_addr_unpack(IPC_GET_ARG1(answer), &info->addr);110 inet_addr_unpack(IPC_GET_ARG1(answer), &info->addr); 111 111 112 112 *rinfo = info; … … 123 123 } 124 124 125 int dnsr_get_srvaddr(inet 2_addr_t *srvaddr)125 int dnsr_get_srvaddr(inet_addr_t *srvaddr) 126 126 { 127 127 async_exch_t *exch = dnsr_exchange_begin(); … … 129 129 ipc_call_t answer; 130 130 aid_t req = async_send_0(exch, DNSR_GET_SRVADDR, &answer); 131 int rc = async_data_read_start(exch, srvaddr, sizeof(inet 2_addr_t));131 int rc = async_data_read_start(exch, srvaddr, sizeof(inet_addr_t)); 132 132 133 133 loc_exchange_end(exch); … … 144 144 } 145 145 146 int dnsr_set_srvaddr(inet 2_addr_t *srvaddr)146 int dnsr_set_srvaddr(inet_addr_t *srvaddr) 147 147 { 148 148 async_exch_t *exch = dnsr_exchange_begin(); … … 150 150 ipc_call_t answer; 151 151 aid_t req = async_send_0(exch, DNSR_SET_SRVADDR, &answer); 152 int rc = async_data_write_start(exch, srvaddr, sizeof(inet 2_addr_t));152 int rc = async_data_write_start(exch, srvaddr, sizeof(inet_addr_t)); 153 153 154 154 loc_exchange_end(exch); -
uspace/lib/c/generic/inet.c
r19a4f73 ra2e3ee6 107 107 int inet_send(inet_dgram_t *dgram, uint8_t ttl, inet_df_t df) 108 108 { 109 async_exch_t *exch = async_exchange_begin(inet_sess); 110 109 uint32_t src; 110 int rc = inet_addr_pack(&dgram->src, &src); 111 if (rc != EOK) 112 return rc; 113 114 uint32_t dest; 115 rc = inet_addr_pack(&dgram->dest, &dest); 116 if (rc != EOK) 117 return EOK; 118 119 async_exch_t *exch = async_exchange_begin(inet_sess); 120 111 121 ipc_call_t answer; 112 aid_t req = async_send_5(exch, INET_SEND, dgram->src.ipv4, 113 dgram->dest.ipv4, dgram->tos, ttl, df, &answer); 114 int rc = async_data_write_start(exch, dgram->data, dgram->size); 115 async_exchange_end(exch); 116 122 aid_t req = async_send_5(exch, INET_SEND, (sysarg_t) src, 123 (sysarg_t) dest, dgram->tos, ttl, df, &answer); 124 rc = async_data_write_start(exch, dgram->data, dgram->size); 125 126 async_exchange_end(exch); 127 117 128 if (rc != EOK) { 118 129 async_forget(req); 119 130 return rc; 120 131 } 121 132 122 133 sysarg_t retval; 123 134 async_wait_for(req, &retval); 124 135 if (retval != EOK) 125 136 return retval; 126 137 127 138 return EOK; 128 139 } … … 130 141 int inet_get_srcaddr(inet_addr_t *remote, uint8_t tos, inet_addr_t *local) 131 142 { 132 sysarg_t local_addr;133 async_exch_t *exch = async_exchange_begin(inet_sess);134 135 int rc = async_req_2_1(exch, INET_GET_SRCADDR, remote->ipv4,136 tos, &local_addr);137 async_exchange_end(exch);138 139 if (rc != EOK)140 return rc;141 142 local->ipv4 = local_addr;143 return EOK;144 }145 146 int inet2_get_srcaddr(inet2_addr_t *remote, uint8_t tos, inet2_addr_t *local)147 {148 143 uint32_t remote_addr; 149 int rc = inet 2_addr_pack(remote, &remote_addr);144 int rc = inet_addr_pack(remote, &remote_addr); 150 145 if (rc != EOK) 151 146 return rc; … … 162 157 return rc; 163 158 164 inet 2_addr_unpack(local_addr, local);159 inet_addr_unpack(local_addr, local); 165 160 return EOK; 166 161 } … … 170 165 int rc; 171 166 inet_dgram_t dgram; 172 173 dgram.src.ipv4 = IPC_GET_ARG1(*call);174 dgram.dest.ipv4 = IPC_GET_ARG2(*call);167 168 inet_addr_unpack(IPC_GET_ARG1(*call), &dgram.src); 169 inet_addr_unpack(IPC_GET_ARG2(*call), &dgram.dest); 175 170 dgram.tos = IPC_GET_ARG3(*call); 176 171 -
uspace/lib/c/generic/inet/addr.c
r19a4f73 ra2e3ee6 34 34 35 35 #include <errno.h> 36 #include <unistd.h> 37 #include <net/socket_codes.h> 36 38 #include <inet/addr.h> 39 #include <net/inet.h> 37 40 #include <stdio.h> 38 41 42 static inet_addr_t inet_addr_any_addr = { 43 .family = AF_INET, 44 .addr = {0, 0, 0, 0} 45 }; 46 47 static inet_addr_t inet_addr_any_addr6 = { 48 .family = AF_INET6, 49 .addr = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} 50 }; 51 52 /** Parse network address family. 53 * 54 * @param text Network address in common notation. 55 * @param af Place to store network address family. 56 * 57 * @return EOK on success, EINVAL if input is not in valid format. 58 * 59 */ 60 int inet_addr_family(const char *text, uint16_t *af) 61 { 62 char *dot = str_chr(text, '.'); 63 if (dot != NULL) { 64 *af = AF_INET; 65 return EOK; 66 } 67 68 char *collon = str_chr(text, ':'); 69 if (collon != NULL) { 70 *af = AF_INET6; 71 return EOK; 72 } 73 74 *af = AF_NONE; 75 return EINVAL; 76 } 77 78 /** Parse node address. 79 * 80 * @param text Network address in common notation. 81 * @param addr Place to store node address. 82 * 83 * @return EOK on success, EINVAL if input is not in valid format. 84 * 85 */ 86 int inet_addr_parse(const char *text, inet_addr_t *addr) 87 { 88 int rc = inet_addr_family(text, &addr->family); 89 if (rc != EOK) 90 return rc; 91 92 rc = inet_pton(addr->family, text, addr->addr); 93 if (rc != EOK) 94 return rc; 95 96 return EOK; 97 } 98 39 99 /** Parse network address. 40 100 * 41 * @param text Network address in CIDR notation (a.b.c.d/w) 42 * @param naddr Place to store network address 43 * 44 * @return EOK on success, EINVAL if input is not in valid format 101 * @param text Network address in common notation. 102 * @param naddr Place to store network address. 103 * 104 * @return EOK on success, EINVAL if input is not in valid format. 105 * 45 106 */ 46 107 int inet_naddr_parse(const char *text, inet_naddr_t *naddr) 47 108 { 48 unsigned long a[4], bits; 49 char *cp = (char *)text; 50 int i; 51 52 for (i = 0; i < 3; i++) { 53 a[i] = strtoul(cp, &cp, 10); 54 if (*cp != '.') 109 char *slash = str_chr(text, '/'); 110 if (slash == NULL) 111 return EINVAL; 112 113 *slash = 0; 114 115 int rc = inet_addr_family(text, &naddr->family); 116 if (rc != EOK) 117 return rc; 118 119 rc = inet_pton(naddr->family, text, naddr->addr); 120 *slash = '/'; 121 122 if (rc != EOK) 123 return rc; 124 125 slash++; 126 127 switch (naddr->family) { 128 case AF_INET: 129 naddr->prefix = strtoul(slash, &slash, 10); 130 if (naddr->prefix > 32) 55 131 return EINVAL; 56 ++cp; 57 } 58 59 a[3] = strtoul(cp, &cp, 10); 60 if (*cp != '/') 61 return EINVAL; 62 ++cp; 63 64 bits = strtoul(cp, &cp, 10); 65 if (*cp != '\0') 66 return EINVAL; 67 68 naddr->ipv4 = 0; 69 for (i = 0; i < 4; i++) { 70 if (a[i] > 255) 132 break; 133 case AF_INET6: 134 naddr->prefix = strtoul(slash, &slash, 10); 135 if (naddr->prefix > 128) 71 136 return EINVAL; 72 naddr->ipv4 = (naddr->ipv4 << 8) | a[i]; 73 } 74 75 if (bits > 31) 76 return EINVAL; 77 78 naddr->bits = bits; 79 return EOK; 80 } 81 82 /** Parse node address. 83 * 84 * @param text Network address in dot notation (a.b.c.d) 85 * @param addr Place to store node address 86 * 87 * @return EOK on success, EINVAL if input is not in valid format 88 */ 89 int inet_addr_parse(const char *text, inet_addr_t *addr) 90 { 91 unsigned long a[4]; 92 char *cp = (char *)text; 93 int i; 94 95 for (i = 0; i < 3; i++) { 96 a[i] = strtoul(cp, &cp, 10); 97 if (*cp != '.') 98 return EINVAL; 99 ++cp; 100 } 101 102 a[3] = strtoul(cp, &cp, 10); 103 if (*cp != '\0') 104 return EINVAL; 105 106 addr->ipv4 = 0; 107 for (i = 0; i < 4; i++) { 108 if (a[i] > 255) 109 return EINVAL; 110 addr->ipv4 = (addr->ipv4 << 8) | a[i]; 111 } 112 113 return EOK; 114 } 115 116 /** Format network address. 117 * 118 * @param naddr Network address 119 * @param bufp Place to store pointer to formatted string (CIDR notation) 120 * 121 * @return EOK on success, ENOMEM if out of memory. 122 */ 123 int inet_naddr_format(inet_naddr_t *naddr, char **bufp) 137 break; 138 default: 139 return ENOTSUP; 140 } 141 142 return EOK; 143 } 144 145 /** Format node address. 146 * 147 * @param addr Node address. 148 * @param bufp Place to store pointer to formatted string. 149 * 150 * @return EOK on success. 151 * @return ENOMEM if out of memory. 152 * @return ENOTSUP on unsupported address family. 153 * 154 */ 155 int inet_addr_format(inet_addr_t *addr, char **bufp) 124 156 { 125 157 int rc; 126 127 rc = asprintf(bufp, "%d.%d.%d.%d/%d", naddr->ipv4 >> 24, 128 (naddr->ipv4 >> 16) & 0xff, (naddr->ipv4 >> 8) & 0xff, 129 naddr->ipv4 & 0xff, naddr->bits); 130 158 159 switch (addr->family) { 160 case AF_NONE: 161 rc = asprintf(bufp, "none"); 162 break; 163 case AF_INET: 164 rc = asprintf(bufp, "%u.%u.%u.%u", addr->addr[0], 165 addr->addr[1], addr->addr[2], addr->addr[3]); 166 break; 167 case AF_INET6: 168 // FIXME TODO 169 break; 170 default: 171 return ENOTSUP; 172 } 173 131 174 if (rc < 0) 132 175 return ENOMEM; 133 134 return EOK; 135 } 136 137 /** Format node address. 138 * 139 * @param addr Node address 140 * @param bufp Place to store pointer to formatted string (dot notation) 141 * 142 * @return EOK on success, ENOMEM if out of memory. 143 */ 144 int inet_addr_format(inet_addr_t *addr, char **bufp) 176 177 return EOK; 178 } 179 180 /** Format network address. 181 * 182 * @param naddr Network address. 183 * @param bufp Place to store pointer to formatted string. 184 * 185 * @return EOK on success. 186 * @return ENOMEM if out of memory. 187 * @return ENOTSUP on unsupported address family. 188 * 189 */ 190 int inet_naddr_format(inet_naddr_t *naddr, char **bufp) 145 191 { 146 192 int rc; 147 148 rc = asprintf(bufp, "%d.%d.%d.%d", addr->ipv4 >> 24, 149 (addr->ipv4 >> 16) & 0xff, (addr->ipv4 >> 8) & 0xff, 150 addr->ipv4 & 0xff); 151 193 194 switch (naddr->family) { 195 case AF_NONE: 196 rc = asprintf(bufp, "none"); 197 break; 198 case AF_INET: 199 rc = asprintf(bufp, "%u.%u.%u.%u/%u", naddr->addr[0], 200 naddr->addr[1], naddr->addr[2], naddr->addr[3], 201 naddr->prefix); 202 break; 203 case AF_INET6: 204 // FIXME TODO 205 break; 206 default: 207 return ENOTSUP; 208 } 209 152 210 if (rc < 0) 153 211 return ENOMEM; 154 155 return EOK; 212 213 return EOK; 214 } 215 216 /** Create packed IPv4 address 217 * 218 * Convert an IPv4 address to a packed 32 bit representation. 219 * 220 * @param addr Source address. 221 * @param packed Place to store the packed 32 bit representation. 222 * 223 * @return EOK on success. 224 * @return EINVAL if addr is not an IPv4 address. 225 * 226 */ 227 int inet_addr_pack(inet_addr_t *addr, uint32_t *packed) 228 { 229 if (addr->family != AF_INET) 230 return EINVAL; 231 232 *packed = (addr->addr[0] << 24) | (addr->addr[1] << 16) | 233 (addr->addr[2] << 8) | addr->addr[3]; 234 return EOK; 235 } 236 237 /** Create packed IPv4 address 238 * 239 * Convert an IPv4 address to a packed 32 bit representation. 240 * 241 * @param naddr Source address. 242 * @param packed Place to store the packed 32 bit representation. 243 * @param prefix Place to store the number of valid bits. 244 * 245 * @return EOK on success. 246 * @return EINVAL if addr is not an IPv4 address. 247 * 248 */ 249 int inet_naddr_pack(inet_naddr_t *naddr, uint32_t *packed, uint8_t *prefix) 250 { 251 if (naddr->family != AF_INET) 252 return EINVAL; 253 254 *packed = (naddr->addr[0] << 24) | (naddr->addr[1] << 16) | 255 (naddr->addr[2] << 8) | naddr->addr[3]; 256 *prefix = naddr->prefix; 257 258 return EOK; 259 } 260 261 void inet_addr_unpack(uint32_t packed, inet_addr_t *addr) 262 { 263 addr->family = AF_INET; 264 addr->addr[0] = (packed >> 24) & 0xff; 265 addr->addr[1] = (packed >> 16) & 0xff; 266 addr->addr[2] = (packed >> 8) & 0xff; 267 addr->addr[3] = packed & 0xff; 268 } 269 270 void inet_naddr_unpack(uint32_t packed, uint8_t prefix, inet_naddr_t *naddr) 271 { 272 naddr->family = AF_INET; 273 naddr->addr[0] = (packed >> 24) & 0xff; 274 naddr->addr[1] = (packed >> 16) & 0xff; 275 naddr->addr[2] = (packed >> 8) & 0xff; 276 naddr->addr[3] = packed & 0xff; 277 naddr->prefix = prefix; 278 } 279 280 int inet_addr_sockaddr_in(inet_addr_t *addr, sockaddr_in_t *sockaddr_in) 281 { 282 uint32_t packed; 283 int rc = inet_addr_pack(addr, &packed); 284 if (rc != EOK) 285 return rc; 286 287 sockaddr_in->sin_family = AF_INET; 288 sockaddr_in->sin_addr.s_addr = host2uint32_t_be(packed); 289 return EOK; 290 } 291 292 void inet_naddr_addr(inet_naddr_t *naddr, inet_addr_t *addr) 293 { 294 addr->family = naddr->family; 295 memcpy(addr->addr, naddr->addr, INET_ADDR_SIZE); 296 } 297 298 void inet_addr(inet_addr_t *addr, uint8_t a, uint8_t b, uint8_t c, uint8_t d) 299 { 300 addr->family = AF_INET; 301 addr->addr[0] = a; 302 addr->addr[1] = b; 303 addr->addr[2] = c; 304 addr->addr[3] = d; 305 } 306 307 void inet_naddr(inet_naddr_t *naddr, uint8_t a, uint8_t b, uint8_t c, uint8_t d, 308 uint8_t prefix) 309 { 310 naddr->family = AF_INET; 311 naddr->addr[0] = a; 312 naddr->addr[1] = b; 313 naddr->addr[2] = c; 314 naddr->addr[3] = d; 315 naddr->prefix = prefix; 316 } 317 318 void inet_addr_any(inet_addr_t *addr) 319 { 320 addr->family = 0; 321 memset(addr->addr, 0, INET_ADDR_SIZE); 322 } 323 324 void inet_naddr_any(inet_naddr_t *naddr) 325 { 326 naddr->family = 0; 327 memset(naddr->addr, 0, INET_ADDR_SIZE); 328 naddr->prefix = 0; 329 } 330 331 int inet_addr_compare(inet_addr_t *a, inet_addr_t *b) 332 { 333 if (a->family != b->family) 334 return 0; 335 336 switch (a->family) { 337 case AF_INET: 338 return ((a->addr[0] == b->addr[0]) && (a->addr[1] == b->addr[1]) && 339 (a->addr[2] == b->addr[2]) && (a->addr[3] == b->addr[3])); 340 case AF_INET6: 341 // FIXME TODO 342 return 0; 343 default: 344 return 0; 345 } 346 } 347 348 int inet_addr_is_any(inet_addr_t *addr) 349 { 350 return ((addr->family == 0) || 351 (inet_addr_compare(addr, &inet_addr_any_addr)) || 352 (inet_addr_compare(addr, &inet_addr_any_addr6))); 156 353 } 157 354 -
uspace/lib/c/generic/inetcfg.c
r19a4f73 ra2e3ee6 136 136 sysarg_t link_id, sysarg_t *addr_id) 137 137 { 138 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 139 140 ipc_call_t answer; 141 aid_t req = async_send_3(exch, INETCFG_ADDR_CREATE_STATIC, naddr->ipv4, 142 naddr->bits, link_id, &answer); 138 uint32_t naddr_addr; 139 uint8_t naddr_bits; 140 int rc = inet_naddr_pack(naddr, &naddr_addr, &naddr_bits); 141 if (rc != EOK) 142 return rc; 143 144 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 145 146 ipc_call_t answer; 147 aid_t req = async_send_3(exch, INETCFG_ADDR_CREATE_STATIC, 148 (sysarg_t) naddr_addr, (sysarg_t) naddr_bits, link_id, &answer); 143 149 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 144 145 async_exchange_end(exch); 146 147 if (retval != EOK) { 148 async_forget(req); 149 return retval; 150 } 151 150 151 async_exchange_end(exch); 152 153 if (retval != EOK) { 154 async_forget(req); 155 return retval; 156 } 157 152 158 async_wait_for(req, &retval); 153 159 *addr_id = IPC_GET_ARG1(answer); 154 160 155 161 return retval; 156 162 } … … 196 202 assert(act_size <= LOC_NAME_MAXLEN); 197 203 name_buf[act_size] = '\0'; 198 199 ainfo->naddr.ipv4 = IPC_GET_ARG1(answer);200 ainfo->naddr.bits = IPC_GET_ARG2(answer);204 205 inet_naddr_unpack(IPC_GET_ARG1(answer), IPC_GET_ARG2(answer), 206 &ainfo->naddr); 201 207 ainfo->ilink = IPC_GET_ARG3(answer); 202 208 ainfo->name = str_dup(name_buf); … … 284 290 inet_addr_t *router, sysarg_t *sroute_id) 285 291 { 286 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 287 292 uint32_t dest_addr; 293 uint8_t dest_bits; 294 int rc = inet_naddr_pack(dest, &dest_addr, &dest_bits); 295 if (rc != EOK) 296 return rc; 297 298 uint32_t router_addr; 299 rc = inet_addr_pack(router, &router_addr); 300 if (rc != EOK) 301 return rc; 302 303 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 304 288 305 ipc_call_t answer; 289 306 aid_t req = async_send_3(exch, INETCFG_SROUTE_CREATE, 290 dest->ipv4, dest->bits, router->ipv4, &answer); 307 (sysarg_t) dest_addr, (sysarg_t) dest_bits, (sysarg_t) router_addr, 308 &answer); 291 309 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 292 293 async_exchange_end(exch); 294 295 if (retval != EOK) { 296 async_forget(req); 297 return retval; 298 } 299 310 311 async_exchange_end(exch); 312 313 if (retval != EOK) { 314 async_forget(req); 315 return retval; 316 } 317 300 318 async_wait_for(req, &retval); 301 319 *sroute_id = IPC_GET_ARG1(answer); 302 320 303 321 return retval; 304 322 } … … 345 363 name_buf[act_size] = '\0'; 346 364 347 srinfo->dest.ipv4 = IPC_GET_ARG1(answer);348 srinfo->dest.bits = IPC_GET_ARG2(answer);349 srinfo->router.ipv4 = IPC_GET_ARG3(answer);365 inet_naddr_unpack(IPC_GET_ARG1(answer), IPC_GET_ARG2(answer), 366 &srinfo->dest); 367 inet_addr_unpack(IPC_GET_ARG3(answer), &srinfo->router); 350 368 srinfo->name = str_dup(name_buf); 351 369 -
uspace/lib/c/generic/iplink.c
r19a4f73 ra2e3ee6 39 39 #include <errno.h> 40 40 #include <inet/iplink.h> 41 #include <inet/addr.h> 41 42 #include <ipc/iplink.h> 42 43 #include <ipc/services.h> … … 83 84 { 84 85 async_exch_t *exch = async_exchange_begin(iplink->sess); 85 86 86 87 ipc_call_t answer; 87 aid_t req = async_send_2(exch, IPLINK_SEND, sdu->lsrc.ipv4,88 sdu->ldest.ipv4, &answer);88 aid_t req = async_send_2(exch, IPLINK_SEND, (sysarg_t) sdu->lsrc, 89 (sysarg_t) sdu->ldest, &answer); 89 90 int rc = async_data_write_start(exch, sdu->data, sdu->size); 91 90 92 async_exchange_end(exch); 91 93 92 94 if (rc != EOK) { 93 95 async_forget(req); 94 96 return rc; 95 97 } 96 98 97 99 sysarg_t retval; 98 100 async_wait_for(req, &retval); 99 101 if (retval != EOK) 100 102 return retval; 101 103 102 104 return EOK; 103 105 } … … 118 120 } 119 121 120 int iplink_addr_add(iplink_t *iplink, i plink_addr_t *addr)122 int iplink_addr_add(iplink_t *iplink, inet_addr_t *addr) 121 123 { 124 uint32_t addr_addr; 125 int rc = inet_addr_pack(addr, &addr_addr); 126 if (rc != EOK) 127 return rc; 128 122 129 async_exch_t *exch = async_exchange_begin(iplink->sess); 123 124 int rc = async_req_1_0(exch, IPLINK_ADDR_ADD, (sysarg_t)addr->ipv4); 130 rc = async_req_1_0(exch, IPLINK_ADDR_ADD, (sysarg_t) addr_addr); 125 131 async_exchange_end(exch); 126 132 127 133 return rc; 128 134 } 129 135 130 int iplink_addr_remove(iplink_t *iplink, i plink_addr_t *addr)136 int iplink_addr_remove(iplink_t *iplink, inet_addr_t *addr) 131 137 { 138 uint32_t addr_addr; 139 int rc = inet_addr_pack(addr, &addr_addr); 140 if (rc != EOK) 141 return rc; 142 132 143 async_exch_t *exch = async_exchange_begin(iplink->sess); 133 134 int rc = async_req_1_0(exch, IPLINK_ADDR_REMOVE, (sysarg_t)addr->ipv4); 144 rc = async_req_1_0(exch, IPLINK_ADDR_REMOVE, (sysarg_t) addr_addr); 135 145 async_exchange_end(exch); 136 146 137 147 return rc; 138 148 } … … 141 151 ipc_call_t *call) 142 152 { 143 int rc;144 153 iplink_sdu_t sdu; 145 146 sdu.lsrc .ipv4= IPC_GET_ARG1(*call);147 sdu.ldest .ipv4= IPC_GET_ARG2(*call);148 149 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size);154 155 sdu.lsrc = IPC_GET_ARG1(*call); 156 sdu.ldest = IPC_GET_ARG2(*call); 157 158 int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); 150 159 if (rc != EOK) { 151 160 async_answer_0(callid, rc); 152 161 return; 153 162 } 154 163 155 164 rc = iplink->ev_ops->recv(iplink, &sdu); 156 165 free(sdu.data); -
uspace/lib/c/generic/iplink_srv.c
r19a4f73 ra2e3ee6 54 54 ipc_call_t *call) 55 55 { 56 int rc; 57 iplink_srv_addr_t addr; 58 59 addr.ipv4 = IPC_GET_ARG1(*call); 60 61 rc = srv->ops->addr_add(srv, &addr); 56 int rc = srv->ops->addr_add(srv, IPC_GET_ARG1(*call)); 62 57 async_answer_0(callid, rc); 63 58 } … … 66 61 ipc_call_t *call) 67 62 { 68 int rc; 69 iplink_srv_addr_t addr; 70 71 addr.ipv4 = IPC_GET_ARG1(*call); 72 73 rc = srv->ops->addr_remove(srv, &addr); 63 int rc = srv->ops->addr_remove(srv, IPC_GET_ARG1(*call)); 74 64 async_answer_0(callid, rc); 75 65 } … … 81 71 int rc; 82 72 83 sdu.lsrc .ipv4= IPC_GET_ARG1(*call);84 sdu.ldest .ipv4= IPC_GET_ARG2(*call);73 sdu.lsrc = IPC_GET_ARG1(*call); 74 sdu.ldest = IPC_GET_ARG2(*call); 85 75 86 76 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); … … 139 129 if (!method) { 140 130 /* The other side has hung up */ 141 131 fibril_mutex_lock(&srv->lock); 142 132 srv->connected = false; 143 133 fibril_mutex_unlock(&srv->lock); 144 134 async_answer_0(callid, EOK); 145 135 break; … … 175 165 176 166 ipc_call_t answer; 177 aid_t req = async_send_2(exch, IPLINK_EV_RECV, sdu->lsrc.ipv4,178 sdu->ldest.ipv4, &answer);167 aid_t req = async_send_2(exch, IPLINK_EV_RECV, (sysarg_t) sdu->lsrc, 168 (sysarg_t) sdu->ldest, &answer); 179 169 int rc = async_data_write_start(exch, sdu->data, sdu->size); 180 170 async_exchange_end(exch); -
uspace/lib/c/generic/net/inet.c
r19a4f73 ra2e3ee6 39 39 #include <net/in6.h> 40 40 #include <net/inet.h> 41 41 #include <inet/addr.h> 42 42 #include <errno.h> 43 43 #include <mem.h> -
uspace/lib/c/generic/net/socket_client.c
r19a4f73 ra2e3ee6 87 87 /** Parent module service. */ 88 88 services_t service; 89 /** Socket family */ 90 int family; 89 91 90 92 /** … … 395 397 switch (domain) { 396 398 case PF_INET: 399 case PF_INET6: 397 400 switch (type) { 398 401 case SOCK_STREAM: … … 433 436 break; 434 437 435 case PF_INET6:436 438 default: 437 439 return EPFNOSUPPORT; … … 447 449 448 450 memset(socket, 0, sizeof(*socket)); 451 socket->family = domain; 449 452 fibril_rwlock_write_lock(&socket_globals.lock); 450 453 -
uspace/lib/c/generic/net/socket_parse.c
r19a4f73 ra2e3ee6 79 79 int socket_parse_protocol_family(const char *name, int *pf) 80 80 { 81 if (str_lcmp(name, "PF_INET6", 8) == 0) { 82 *pf = PF_INET6; 83 return EOK; 84 } 85 81 86 if (str_lcmp(name, "PF_INET", 7) == 0) { 82 87 *pf = PF_INET; 83 return EOK;84 }85 86 if (str_lcmp(name, "PF_INET6", 8) == 0) {87 *pf = PF_INET6;88 88 return EOK; 89 89 } -
uspace/lib/c/include/inet/addr.h
r19a4f73 ra2e3ee6 37 37 38 38 #include <stdint.h> 39 #include <net/in.h> 40 41 #define INET_ADDR_SIZE 16 39 42 40 43 /** Node address */ 41 44 typedef struct { 42 uint32_t ipv4; 45 uint16_t family; 46 uint8_t addr[INET_ADDR_SIZE]; 43 47 } inet_addr_t; 44 48 45 49 /** Network address */ 46 50 typedef struct { 51 /** Address family */ 52 uint16_t family; 53 47 54 /** Address */ 48 uint32_t ipv4; 49 /** Number of valid bits in @c ipv4 */ 50 int bits; 55 uint8_t addr[INET_ADDR_SIZE]; 56 57 /** Number of valid bits */ 58 uint8_t prefix; 51 59 } inet_naddr_t; 52 60 61 extern int inet_addr_family(const char *, uint16_t *); 62 63 extern int inet_addr_parse(const char *, inet_addr_t *); 53 64 extern int inet_naddr_parse(const char *, inet_naddr_t *); 54 extern int inet_addr_parse(const char *, inet_addr_t *); 65 66 extern int inet_addr_format(inet_addr_t *, char **); 55 67 extern int inet_naddr_format(inet_naddr_t *, char **); 56 extern int inet_addr_format(inet_addr_t *, char **); 68 69 extern int inet_addr_pack(inet_addr_t *, uint32_t *); 70 extern int inet_naddr_pack(inet_naddr_t *, uint32_t *, uint8_t *); 71 72 extern void inet_addr_unpack(uint32_t, inet_addr_t *); 73 extern void inet_naddr_unpack(uint32_t, uint8_t, inet_naddr_t *); 74 75 extern int inet_addr_sockaddr_in(inet_addr_t *, sockaddr_in_t *); 76 extern void inet_naddr_addr(inet_naddr_t *, inet_addr_t *); 77 78 extern void inet_addr(inet_addr_t *, uint8_t, uint8_t, uint8_t, uint8_t); 79 extern void inet_naddr(inet_naddr_t *, uint8_t, uint8_t, uint8_t, uint8_t, 80 uint8_t); 81 82 extern void inet_addr_any(inet_addr_t *); 83 extern void inet_naddr_any(inet_naddr_t *); 84 85 extern int inet_addr_compare(inet_addr_t *, inet_addr_t *); 86 extern int inet_addr_is_any(inet_addr_t *); 57 87 58 88 #endif -
uspace/lib/c/include/inet/dnsr.h
r19a4f73 ra2e3ee6 37 37 38 38 #include <inet/inet.h> 39 #include <inet/addr 2.h>39 #include <inet/addr.h> 40 40 41 41 enum { … … 47 47 char *cname; 48 48 /** Host address */ 49 inet 2_addr_t addr;49 inet_addr_t addr; 50 50 } dnsr_hostinfo_t; 51 51 … … 53 53 extern int dnsr_name2host(const char *, dnsr_hostinfo_t **); 54 54 extern void dnsr_hostinfo_destroy(dnsr_hostinfo_t *); 55 extern int dnsr_get_srvaddr(inet 2_addr_t *);56 extern int dnsr_set_srvaddr(inet 2_addr_t *);55 extern int dnsr_get_srvaddr(inet_addr_t *); 56 extern int dnsr_set_srvaddr(inet_addr_t *); 57 57 58 58 #endif -
uspace/lib/c/include/inet/inet.h
r19a4f73 ra2e3ee6 37 37 38 38 #include <inet/addr.h> 39 #include <inet/addr2.h>40 39 #include <sys/types.h> 41 40 … … 61 60 extern int inet_send(inet_dgram_t *, uint8_t, inet_df_t); 62 61 extern int inet_get_srcaddr(inet_addr_t *, uint8_t, inet_addr_t *); 63 extern int inet2_get_srcaddr(inet2_addr_t *, uint8_t, inet2_addr_t *);64 62 65 63 #endif -
uspace/lib/c/include/inet/iplink.h
r19a4f73 ra2e3ee6 38 38 #include <async.h> 39 39 #include <sys/types.h> 40 #include <inet/addr.h> 40 41 41 42 struct iplink_ev_ops; … … 46 47 } iplink_t; 47 48 48 typedef struct { 49 uint32_t ipv4; 50 } iplink_addr_t; 51 52 /** IP link Service Data Unit */ 49 /** IPv4 link Service Data Unit */ 53 50 typedef struct { 54 51 /** Local source address */ 55 iplink_addr_t lsrc;52 uint32_t lsrc; 56 53 /** Local destination address */ 57 iplink_addr_t ldest;54 uint32_t ldest; 58 55 /** Serialized IP packet */ 59 56 void *data; … … 61 58 size_t size; 62 59 } iplink_sdu_t; 60 61 /** IPv6 link Service Data Unit */ 62 typedef struct { 63 /** Target MAC address */ 64 uint64_t hwaddr; 65 /** Serialized IP packet */ 66 void *data; 67 /** Size of @c data in bytes */ 68 size_t size; 69 } iplink_sdu6_t; 63 70 64 71 typedef struct iplink_ev_ops { … … 69 76 extern void iplink_close(iplink_t *); 70 77 extern int iplink_send(iplink_t *, iplink_sdu_t *); 71 extern int iplink_addr_add(iplink_t *, i plink_addr_t *);72 extern int iplink_addr_remove(iplink_t *, i plink_addr_t *);78 extern int iplink_addr_add(iplink_t *, inet_addr_t *); 79 extern int iplink_addr_remove(iplink_t *, inet_addr_t *); 73 80 extern int iplink_get_mtu(iplink_t *, size_t *); 74 81 -
uspace/lib/c/include/inet/iplink_srv.h
r19a4f73 ra2e3ee6 51 51 } iplink_srv_t; 52 52 53 typedef struct {54 uint32_t ipv4;55 } iplink_srv_addr_t;56 57 53 /** IP link Service Data Unit */ 58 54 typedef struct { 59 55 /** Local source address */ 60 iplink_srv_addr_t lsrc;56 uint32_t lsrc; 61 57 /** Local destination address */ 62 iplink_srv_addr_t ldest;58 uint32_t ldest; 63 59 /** Serialized IP packet */ 64 60 void *data; … … 72 68 int (*send)(iplink_srv_t *, iplink_srv_sdu_t *); 73 69 int (*get_mtu)(iplink_srv_t *, size_t *); 74 int (*addr_add)(iplink_srv_t *, iplink_srv_addr_t *);75 int (*addr_remove)(iplink_srv_t *, iplink_srv_addr_t *);70 int (*addr_add)(iplink_srv_t *, uint32_t); 71 int (*addr_remove)(iplink_srv_t *, uint32_t); 76 72 } iplink_ops_t; 77 73
Note:
See TracChangeset
for help on using the changeset viewer.