Changeset f023251 in mainline
- Timestamp:
- 2013-09-29T21:06:10Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e948fde
- Parents:
- 13be2583
- Location:
- uspace
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/ping/ping.c
r13be2583 rf023251 271 271 } 272 272 273 uint16_t af= inet_addr_get(&dest_addr, &dest, NULL);274 if ( af != AF_INET) {273 ip_ver_t ver = inet_addr_get(&dest_addr, &dest, NULL); 274 if (ver != ip_v4) { 275 275 printf("Destination '%s' is not an IPv4 address.\n", 276 276 argv[optind]); -
uspace/app/ping6/ping6.c
r13be2583 rf023251 271 271 } 272 272 273 uint16_t af= inet_addr_get(&dest_addr, NULL, &dest);274 if ( af != AF_INET6) {273 ip_ver_t ver = inet_addr_get(&dest_addr, NULL, &dest); 274 if (ver != ip_v6) { 275 275 printf("Destination '%s' is not an IPv6 address.\n", 276 276 argv[optind]); -
uspace/lib/c/generic/inet/addr.c
r13be2583 rf023251 33 33 */ 34 34 35 #include <assert.h> 35 36 #include <errno.h> 36 37 #include <unistd.h> … … 59 60 60 61 static const inet_addr_t inet_addr_any_addr = { 61 . family = AF_INET,62 .version = ip_v4, 62 63 .addr = 0 63 64 }; 64 65 65 66 static const inet_addr_t inet_addr_any_addr6 = { 66 . family = AF_INET6,67 .version = ip_v6, 67 68 .addr6 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} 68 69 }; … … 150 151 void inet_addr(inet_addr_t *addr, uint8_t a, uint8_t b, uint8_t c, uint8_t d) 151 152 { 152 addr-> family = AF_INET;153 addr->version = ip_v4; 153 154 addr->addr = ((addr32_t) a << 24) | ((addr32_t) b << 16) | 154 155 ((addr32_t) c << 8) | ((addr32_t) d); … … 158 159 uint8_t prefix) 159 160 { 160 naddr-> family = AF_INET;161 naddr->version = ip_v4; 161 162 naddr->addr = ((addr32_t) a << 24) | ((addr32_t) b << 16) | 162 163 ((addr32_t) c << 8) | ((addr32_t) d); … … 167 168 uint16_t d, uint16_t e, uint16_t f, uint16_t g, uint16_t h) 168 169 { 169 addr-> family = AF_INET6;170 addr->version = ip_v6; 170 171 addr->addr6[0] = (a >> 8) & 0xff; 171 172 addr->addr6[1] = a & 0xff; … … 189 190 uint16_t d, uint16_t e, uint16_t f, uint16_t g, uint16_t h, uint8_t prefix) 190 191 { 191 naddr-> family = AF_INET6;192 naddr->version = ip_v6; 192 193 naddr->addr6[0] = (a >> 8) & 0xff; 193 194 naddr->addr6[1] = a & 0xff; … … 209 210 } 210 211 211 /** Parse network address family.212 * 213 * @param text Network address in common notation.214 * @param af Place to store network address family.212 /** Determine address version. 213 * 214 * @param text Address in common notation. 215 * @param af Place to store address version. 215 216 * 216 217 * @return EOK on success, EINVAL if input is not in valid format. 217 218 * 218 219 */ 219 int inet_addr_family(const char *text, uint16_t *af)220 static int inet_addr_version(const char *text, ip_ver_t *ver) 220 221 { 221 222 char *dot = str_chr(text, '.'); 222 223 if (dot != NULL) { 223 * af = AF_INET;224 *ver = ip_v4; 224 225 return EOK; 225 226 } 226 227 227 228 char *collon = str_chr(text, ':'); 228 229 if (collon != NULL) { 229 * af = AF_INET6;230 *ver = ip_v6; 230 231 return EOK; 231 232 } 232 233 233 234 return EINVAL; 234 235 } 235 236 237 static int ipver_af(ip_ver_t ver) 238 { 239 switch (ver) { 240 case ip_any: 241 return AF_NONE; 242 case ip_v4: 243 return AF_INET; 244 case ip_v6: 245 return AF_INET6; 246 default: 247 assert(false); 248 return EINVAL; 249 } 250 } 251 236 252 void inet_naddr_addr(const inet_naddr_t *naddr, inet_addr_t *addr) 237 253 { 238 addr-> family = naddr->family;254 addr->version = naddr->version; 239 255 memcpy(addr->addr6, naddr->addr6, 16); 240 256 } … … 243 259 inet_naddr_t *naddr) 244 260 { 245 naddr-> family = addr->family;261 naddr->version = addr->version; 246 262 memcpy(naddr->addr6, addr->addr6, 16); 247 263 naddr->prefix = prefix; … … 250 266 void inet_addr_any(inet_addr_t *addr) 251 267 { 252 addr-> family = AF_NONE;268 addr->version = ip_any; 253 269 memset(addr->addr6, 0, 16); 254 270 } … … 256 272 void inet_naddr_any(inet_naddr_t *naddr) 257 273 { 258 naddr-> family = AF_NONE;274 naddr->version = ip_any; 259 275 memset(naddr->addr6, 0, 16); 260 276 naddr->prefix = 0; … … 263 279 int inet_addr_compare(const inet_addr_t *a, const inet_addr_t *b) 264 280 { 265 if (a-> family != b->family)281 if (a->version != b->version) 266 282 return 0; 267 268 switch (a-> family) {269 case AF_INET:283 284 switch (a->version) { 285 case ip_v4: 270 286 return (a->addr == b->addr); 271 case AF_INET6:287 case ip_v6: 272 288 return addr128_compare(a->addr6, b->addr6); 273 289 default: … … 278 294 int inet_addr_is_any(const inet_addr_t *addr) 279 295 { 280 return ((addr-> family == 0) ||296 return ((addr->version == ip_any) || 281 297 (inet_addr_compare(addr, &inet_addr_any_addr)) || 282 298 (inet_addr_compare(addr, &inet_addr_any_addr6))); … … 285 301 int inet_naddr_compare(const inet_naddr_t *naddr, const inet_addr_t *addr) 286 302 { 287 if (naddr-> family != addr->family)303 if (naddr->version != addr->version) 288 304 return 0; 289 305 290 switch (naddr-> family) {291 case AF_INET:306 switch (naddr->version) { 307 case ip_v4: 292 308 return (naddr->addr == addr->addr); 293 case AF_INET6:309 case ip_v6: 294 310 return addr128_compare(naddr->addr6, addr->addr6); 295 311 default: … … 300 316 int inet_naddr_compare_mask(const inet_naddr_t *naddr, const inet_addr_t *addr) 301 317 { 302 if (naddr-> family != addr->family)318 if (naddr->version != addr->version) 303 319 return 0; 304 305 switch (naddr-> family) {306 case AF_INET:320 321 switch (naddr->version) { 322 case ip_v4: 307 323 if (naddr->prefix > 32) 308 324 return 0; 309 325 310 326 addr32_t mask = 311 327 BIT_RANGE(addr32_t, 31, 31 - (naddr->prefix - 1)); 312 328 return ((naddr->addr & mask) == (addr->addr & mask)); 313 case AF_INET6:329 case ip_v6: 314 330 if (naddr->prefix > 128) 315 331 return 0; … … 352 368 int inet_addr_parse(const char *text, inet_addr_t *addr) 353 369 { 354 int rc = inet_addr_ family(text, &addr->family);370 int rc = inet_addr_version(text, &addr->version); 355 371 if (rc != EOK) 356 372 return rc; 357 373 358 374 uint8_t buf[16]; 359 rc = inet_pton( addr->family, text, buf);375 rc = inet_pton(ipver_af(addr->version), text, buf); 360 376 if (rc != EOK) 361 377 return rc; 362 378 363 switch (addr-> family) {364 case AF_INET:379 switch (addr->version) { 380 case ip_v4: 365 381 addr->addr = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | 366 382 buf[3]; 367 383 break; 368 case AF_INET6:384 case ip_v6: 369 385 memcpy(addr->addr6, buf, 16); 370 386 break; … … 392 408 *slash = 0; 393 409 394 int rc = inet_addr_ family(text, &naddr->family);410 int rc = inet_addr_version(text, &naddr->version); 395 411 if (rc != EOK) 396 412 return rc; 397 413 398 414 uint8_t buf[16]; 399 rc = inet_pton( naddr->family, text, buf);415 rc = inet_pton(ipver_af(naddr->version), text, buf); 400 416 *slash = '/'; 401 417 … … 406 422 uint8_t prefix; 407 423 408 switch (naddr-> family) {409 case AF_INET:424 switch (naddr->version) { 425 case ip_v4: 410 426 prefix = strtoul(slash, &slash, 10); 411 427 if (prefix > 32) … … 417 433 418 434 break; 419 case AF_INET6:435 case ip_v6: 420 436 prefix = strtoul(slash, &slash, 10); 421 437 if (prefix > 128) … … 447 463 int rc = 0; 448 464 449 switch (addr-> family) {450 case AF_NONE:465 switch (addr->version) { 466 case ip_any: 451 467 rc = asprintf(bufp, "none"); 452 468 break; 453 case AF_INET:469 case ip_v4: 454 470 rc = asprintf(bufp, "%u.%u.%u.%u", (addr->addr >> 24) & 0xff, 455 471 (addr->addr >> 16) & 0xff, (addr->addr >> 8) & 0xff, 456 472 addr->addr & 0xff); 457 473 break; 458 case AF_INET6:474 case ip_v6: 459 475 *bufp = (char *) malloc(INET6_ADDRSTRLEN); 460 476 if (*bufp == NULL) … … 487 503 char prefix[INET_PREFIXSTRSIZE]; 488 504 489 switch (naddr-> family) {490 case AF_NONE:505 switch (naddr->version) { 506 case ip_any: 491 507 rc = asprintf(bufp, "none"); 492 508 break; 493 case AF_INET:509 case ip_v4: 494 510 rc = asprintf(bufp, "%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 495 511 "/%" PRIu8, (naddr->addr >> 24) & 0xff, … … 497 513 naddr->addr & 0xff, naddr->prefix); 498 514 break; 499 case AF_INET6:515 case ip_v6: 500 516 *bufp = (char *) malloc(INET6_ADDRSTRLEN + INET_PREFIXSTRSIZE); 501 517 if (*bufp == NULL) … … 529 545 } 530 546 531 uint16_t inet_addr_get(const inet_addr_t *addr, addr32_t *v4, addr128_t *v6)532 { 533 switch (addr-> family) {534 case AF_INET:547 ip_ver_t inet_addr_get(const inet_addr_t *addr, addr32_t *v4, addr128_t *v6) 548 { 549 switch (addr->version) { 550 case ip_v4: 535 551 if (v4 != NULL) 536 552 *v4 = addr->addr; 537 538 break; 539 case AF_INET6: 553 break; 554 case ip_v6: 540 555 if (v6 != NULL) 541 556 memcpy(*v6, addr->addr6, 16); 542 543 break; 544 } 545 546 return addr->family; 547 } 548 549 uint16_t inet_naddr_get(const inet_naddr_t *naddr, addr32_t *v4, addr128_t *v6, 557 break; 558 default: 559 assert(false); 560 break; 561 } 562 563 return addr->version; 564 } 565 566 ip_ver_t inet_naddr_get(const inet_naddr_t *naddr, addr32_t *v4, addr128_t *v6, 550 567 uint8_t *prefix) 551 568 { 552 switch (naddr-> family) {553 case AF_INET:569 switch (naddr->version) { 570 case ip_v4: 554 571 if (v4 != NULL) 555 572 *v4 = naddr->addr; 556 557 573 if (prefix != NULL) 558 574 *prefix = naddr->prefix; 559 560 break; 561 case AF_INET6: 575 break; 576 case ip_v6: 562 577 if (v6 != NULL) 563 578 memcpy(*v6, naddr->addr6, 16); 564 565 579 if (prefix != NULL) 566 580 *prefix = naddr->prefix; 567 568 break; 569 } 570 571 return naddr->family; 581 break; 582 default: 583 assert(false); 584 break; 585 } 586 587 return naddr->version; 572 588 } 573 589 574 590 void inet_addr_set(addr32_t v4, inet_addr_t *addr) 575 591 { 576 addr-> family = AF_INET;592 addr->version = ip_v4; 577 593 addr->addr = v4; 578 594 } … … 580 596 void inet_naddr_set(addr32_t v4, uint8_t prefix, inet_naddr_t *naddr) 581 597 { 582 naddr-> family = AF_INET;598 naddr->version = ip_v4; 583 599 naddr->addr = v4; 584 600 naddr->prefix = prefix; … … 587 603 void inet_sockaddr_in_addr(const sockaddr_in_t *sockaddr_in, inet_addr_t *addr) 588 604 { 589 addr-> family = AF_INET;605 addr->version = ip_v4; 590 606 addr->addr = uint32_t_be2host(sockaddr_in->sin_addr.s_addr); 591 607 } … … 593 609 void inet_addr_set6(addr128_t v6, inet_addr_t *addr) 594 610 { 595 addr-> family = AF_INET6;611 addr->version = ip_v6; 596 612 memcpy(addr->addr6, v6, 16); 597 613 } … … 599 615 void inet_naddr_set6(addr128_t v6, uint8_t prefix, inet_naddr_t *naddr) 600 616 { 601 naddr-> family = AF_INET6;617 naddr->version = ip_v6; 602 618 memcpy(naddr->addr6, v6, 16); 603 619 naddr->prefix = prefix; … … 607 623 inet_addr_t *addr) 608 624 { 609 addr-> family = AF_INET6;625 addr->version = ip_v6; 610 626 addr128_t_be2host(sockaddr_in6->sin6_addr.s6_addr, addr->addr6); 611 627 } … … 614 630 sockaddr_in_t *sockaddr_in, sockaddr_in6_t *sockaddr_in6) 615 631 { 616 switch (addr-> family) {617 case AF_INET:632 switch (addr->version) { 633 case ip_v4: 618 634 if (sockaddr_in != NULL) { 619 635 sockaddr_in->sin_family = AF_INET; 620 636 sockaddr_in->sin_addr.s_addr = host2uint32_t_be(addr->addr); 621 637 } 622 623 break; 624 case AF_INET6: 638 break; 639 case ip_v6: 625 640 if (sockaddr_in6 != NULL) { 626 641 sockaddr_in6->sin6_family = AF_INET6; 627 642 host2addr128_t_be(addr->addr6, sockaddr_in6->sin6_addr.s6_addr); 628 643 } 629 630 break; 631 } 632 633 return addr->family; 644 break; 645 default: 646 assert(false); 647 break; 648 } 649 650 return ipver_af(addr->version); 634 651 } 635 652 -
uspace/lib/c/include/inet/addr.h
r13be2583 rf023251 44 44 typedef uint8_t addr128_t[16]; 45 45 46 typedef enum { 47 /** Any IP protocol version */ 48 ip_any, 49 /** IPv4 */ 50 ip_v4, 51 /** IPv6 */ 52 ip_v6 53 } ip_ver_t; 54 46 55 /** Node address */ 47 56 typedef struct { 48 uint16_t family; 57 /** IP version */ 58 ip_ver_t version; 49 59 union { 50 60 addr32_t addr; … … 55 65 /** Network address */ 56 66 typedef struct { 57 /** Address family*/58 uint16_t family;67 /** IP version */ 68 ip_ver_t version; 59 69 60 70 /** Address */ … … 91 101 uint16_t, uint16_t, uint16_t, uint16_t, uint8_t); 92 102 93 extern int inet_addr_family(const char *, uint16_t *);94 103 extern void inet_naddr_addr(const inet_naddr_t *, inet_addr_t *); 95 104 extern void inet_addr_naddr(const inet_addr_t *, uint8_t, inet_naddr_t *); … … 110 119 extern int inet_naddr_format(const inet_naddr_t *, char **); 111 120 112 extern uint16_t inet_addr_get(const inet_addr_t *, addr32_t *, addr128_t *);113 extern uint16_t inet_naddr_get(const inet_naddr_t *, addr32_t *, addr128_t *,121 extern ip_ver_t inet_addr_get(const inet_addr_t *, addr32_t *, addr128_t *); 122 extern ip_ver_t inet_naddr_get(const inet_naddr_t *, addr32_t *, addr128_t *, 114 123 uint8_t *); 115 124 -
uspace/srv/net/dhcp/dhcp.c
r13be2583 rf023251 231 231 memset(offer, 0, sizeof(*offer)); 232 232 233 yiaddr.family = AF_INET; 234 yiaddr.addr = uint32_t_be2host(hdr->yiaddr); 233 inet_addr_set(uint32_t_be2host(hdr->yiaddr), &yiaddr); 235 234 rc = inet_addr_format(&yiaddr, &saddr); 236 235 if (rc != EOK) … … 240 239 free(saddr); 241 240 242 siaddr.family = AF_INET; 243 siaddr.addr = uint32_t_be2host(hdr->siaddr); 241 inet_addr_set(uint32_t_be2host(hdr->siaddr), &siaddr); 244 242 rc = inet_addr_format(&siaddr, &saddr); 245 243 if (rc != EOK) … … 249 247 free(saddr); 250 248 251 giaddr.family = AF_INET; 252 giaddr.addr = uint32_t_be2host(hdr->giaddr); 249 inet_addr_set(uint32_t_be2host(hdr->giaddr), &giaddr); 253 250 rc = inet_addr_format(&giaddr, &saddr); 254 251 if (rc != EOK) … … 258 255 free(saddr); 259 256 260 offer->oaddr.family = AF_INET; 261 offer->oaddr.addr = yiaddr.addr; 257 inet_naddr_set(yiaddr.addr, 0, &offer->oaddr); 262 258 263 259 msgb = (uint8_t *)msg; … … 299 295 if (opt_len != 4) 300 296 return EINVAL; 301 offer->srv_addr.family = AF_INET;302 offer->srv_addr.addr = dhcp_uint32_decode(&msgb[i]);297 inet_addr_set(dhcp_uint32_decode(&msgb[i]), 298 &offer->srv_addr); 303 299 have_server_id = true; 304 300 break; … … 306 302 if (opt_len != 4) 307 303 return EINVAL; 308 offer->router.family = AF_INET;309 offer->router.addr = dhcp_uint32_decode(&msgb[i]);304 inet_addr_set(dhcp_uint32_decode(&msgb[i]), 305 &offer->router); 310 306 break; 311 307 case opt_dns_server: 312 308 if (opt_len != 4) 313 309 return EINVAL; 314 offer->dns_server.family = AF_INET;315 offer->dns_server.addr = dhcp_uint32_decode(&msgb[i]);310 inet_addr_set(dhcp_uint32_decode(&msgb[i]), 311 &offer->dns_server); 316 312 break; 317 313 case opt_end: … … 379 375 380 376 if (offer->router.addr != 0) { 381 defr.family = AF_INET; 382 defr.addr = 0; 383 defr.prefix = 0; 377 inet_naddr_set(0, 0, &defr); 384 378 385 379 rc = inetcfg_sroute_create("dhcpdef", &defr, &offer->router, &sroute_id); -
uspace/srv/net/ethip/arp.c
r13be2583 rf023251 73 73 74 74 addr32_t laddr_v4; 75 uint16_t laddr_af= inet_addr_get(&laddr->addr, &laddr_v4, NULL);76 if (laddr_ af != AF_INET)75 ip_ver_t laddr_ver = inet_addr_get(&laddr->addr, &laddr_v4, NULL); 76 if (laddr_ver != ip_v4) 77 77 return; 78 78 -
uspace/srv/net/ethip/ethip_nic.c
r13be2583 rf023251 354 354 355 355 list_foreach(nic->addr_list, link, ethip_link_addr_t, laddr) { 356 uint16_t af= inet_addr_get(&laddr->addr, NULL, NULL);357 if ( af == AF_INET6)356 ip_ver_t ver = inet_addr_get(&laddr->addr, NULL, NULL); 357 if (ver == ip_v6) 358 358 count++; 359 359 } … … 373 373 list_foreach(nic->addr_list, link, ethip_link_addr_t, laddr) { 374 374 addr128_t v6; 375 uint16_t af= inet_addr_get(&laddr->addr, NULL, &v6);376 if ( af != AF_INET6)375 ip_ver_t ver = inet_addr_get(&laddr->addr, NULL, &v6); 376 if (ver != ip_v6) 377 377 continue; 378 378 -
uspace/srv/net/inetsrv/addrobj.c
r13be2583 rf023251 218 218 inet_addr_t lsrc_addr; 219 219 inet_naddr_addr(&addr->naddr, &lsrc_addr); 220 220 221 221 addr32_t lsrc_v4; 222 222 addr128_t lsrc_v6; 223 uint16_t lsrc_af= inet_addr_get(&lsrc_addr, &lsrc_v4, &lsrc_v6);224 223 ip_ver_t lsrc_ver = inet_addr_get(&lsrc_addr, &lsrc_v4, &lsrc_v6); 224 225 225 addr32_t ldest_v4; 226 226 addr128_t ldest_v6; 227 uint16_t ldest_af= inet_addr_get(ldest, &ldest_v4, &ldest_v6);228 229 if (lsrc_ af != ldest_af)227 ip_ver_t ldest_ver = inet_addr_get(ldest, &ldest_v4, &ldest_v6); 228 229 if (lsrc_ver != ldest_ver) 230 230 return EINVAL; 231 231 232 232 int rc; 233 233 addr48_t ldest_mac; 234 235 switch (ldest_ af) {236 case AF_INET:234 235 switch (ldest_ver) { 236 case ip_v4: 237 237 return inet_link_send_dgram(addr->ilink, lsrc_v4, ldest_v4, 238 238 dgram, proto, ttl, df); 239 case AF_INET6:239 case ip_v6: 240 240 /* 241 241 * Translate local destination IPv6 address. … … 244 244 if (rc != EOK) 245 245 return rc; 246 246 247 247 return inet_link_send_dgram6(addr->ilink, ldest_mac, dgram, 248 248 proto, ttl, df); 249 } 250 249 default: 250 assert(false); 251 break; 252 } 253 251 254 return ENOTSUP; 252 255 } -
uspace/srv/net/inetsrv/icmp.c
r13be2583 rf023251 123 123 { 124 124 log_msg(LOG_DEFAULT, LVL_DEBUG, "icmp_recv_echo_reply()"); 125 125 126 126 if (dgram->size < sizeof(icmp_echo_t)) 127 127 return EINVAL; 128 128 129 129 icmp_echo_t *reply = (icmp_echo_t *) dgram->data; 130 130 131 131 inetping_sdu_t sdu; 132 133 uint16_t family= inet_addr_get(&dgram->src, &sdu.src, NULL);134 if ( family != AF_INET)132 133 ip_ver_t ver = inet_addr_get(&dgram->src, &sdu.src, NULL); 134 if (ver != ip_v4) 135 135 return EINVAL; 136 137 family= inet_addr_get(&dgram->dest, &sdu.dest, NULL);138 if ( family != AF_INET)136 137 ver = inet_addr_get(&dgram->dest, &sdu.dest, NULL); 138 if (ver != ip_v4) 139 139 return EINVAL; 140 140 141 141 sdu.seq_no = uint16_t_be2host(reply->seq_no); 142 142 sdu.data = reply + sizeof(icmp_echo_t); 143 143 sdu.size = dgram->size - sizeof(icmp_echo_t); 144 144 145 145 uint16_t ident = uint16_t_be2host(reply->ident); 146 146 … … 154 154 if (rdata == NULL) 155 155 return ENOMEM; 156 156 157 157 icmp_echo_t *request = (icmp_echo_t *) rdata; 158 158 159 159 request->type = ICMP_ECHO_REQUEST; 160 160 request->code = 0; … … 162 162 request->ident = host2uint16_t_be(ident); 163 163 request->seq_no = host2uint16_t_be(sdu->seq_no); 164 164 165 165 memcpy(rdata + sizeof(icmp_echo_t), sdu->data, sdu->size); 166 166 167 167 uint16_t checksum = inet_checksum_calc(INET_CHECKSUM_INIT, rdata, rsize); 168 168 request->checksum = host2uint16_t_be(checksum); 169 169 170 170 inet_dgram_t dgram; 171 171 172 172 inet_addr_set(sdu->src, &dgram.src); 173 173 inet_addr_set(sdu->dest, &dgram.dest); 174 174 175 175 dgram.iplink = 0; 176 176 dgram.tos = ICMP_TOS; 177 177 dgram.data = rdata; 178 178 dgram.size = rsize; 179 179 180 180 int rc = inet_route_packet(&dgram, IP_PROTO_ICMP, INET_TTL_MAX, 0); 181 181 182 182 free(rdata); 183 183 return rc; -
uspace/srv/net/inetsrv/icmpv6.c
r13be2583 rf023251 59 59 60 60 addr128_t src_v6; 61 uint16_t src_af= inet_addr_get(&dgram->src, NULL, &src_v6);61 ip_ver_t src_ver = inet_addr_get(&dgram->src, NULL, &src_v6); 62 62 63 63 addr128_t dest_v6; 64 uint16_t dest_af= inet_addr_get(&dgram->dest, NULL, &dest_v6);65 66 if ((src_ af != dest_af) || (src_af != AF_INET6))64 ip_ver_t dest_ver = inet_addr_get(&dgram->dest, NULL, &dest_v6); 65 66 if ((src_ver != dest_ver) || (src_ver != ip_v6)) 67 67 return EINVAL; 68 68 … … 118 118 inetping6_sdu_t sdu; 119 119 120 uint16_t src_af= inet_addr_get(&dgram->src, NULL, &sdu.src);121 uint16_t dest_af= inet_addr_get(&dgram->dest, NULL, &sdu.dest);122 123 if ((src_ af != dest_af) || (src_af != AF_INET6))120 ip_ver_t src_ver = inet_addr_get(&dgram->src, NULL, &sdu.src); 121 ip_ver_t dest_ver = inet_addr_get(&dgram->dest, NULL, &sdu.dest); 122 123 if ((src_ver != dest_ver) || (src_ver != ip_v6)) 124 124 return EINVAL; 125 125 -
uspace/srv/net/inetsrv/inet_link.c
r13be2583 rf023251 294 294 { 295 295 addr32_t src_v4; 296 uint16_t src_af= inet_addr_get(&dgram->src, &src_v4, NULL);297 if (src_ af != AF_INET)296 ip_ver_t src_ver = inet_addr_get(&dgram->src, &src_v4, NULL); 297 if (src_ver != ip_v4) 298 298 return EINVAL; 299 299 300 300 addr32_t dest_v4; 301 uint16_t dest_af= inet_addr_get(&dgram->dest, &dest_v4, NULL);302 if (dest_ af != AF_INET)301 ip_ver_t dest_ver = inet_addr_get(&dgram->dest, &dest_v4, NULL); 302 if (dest_ver != ip_v4) 303 303 return EINVAL; 304 304 … … 369 369 { 370 370 addr128_t src_v6; 371 uint16_t src_af= inet_addr_get(&dgram->src, NULL, &src_v6);372 if (src_ af != AF_INET6)371 ip_ver_t src_ver = inet_addr_get(&dgram->src, NULL, &src_v6); 372 if (src_ver != ip_v6) 373 373 return EINVAL; 374 374 375 375 addr128_t dest_v6; 376 uint16_t dest_af= inet_addr_get(&dgram->dest, NULL, &dest_v6);377 if (dest_ af != AF_INET6)376 ip_ver_t dest_ver = inet_addr_get(&dgram->dest, NULL, &dest_v6); 377 if (dest_ver != ip_v6) 378 378 return EINVAL; 379 379 -
uspace/srv/net/inetsrv/inetping.c
r13be2583 rf023251 72 72 return rc; 73 73 74 uint16_t family= inet_addr_get(&local_addr, local, NULL);75 if ( family != AF_INET)74 ip_ver_t ver = inet_addr_get(&local_addr, local, NULL); 75 if (ver != ip_v4) 76 76 return EINVAL; 77 77 -
uspace/srv/net/inetsrv/inetping6.c
r13be2583 rf023251 72 72 return rc; 73 73 74 uint16_t family= inet_addr_get(&local_addr, NULL, local);75 if ( family != AF_INET6)74 ip_ver_t ver = inet_addr_get(&local_addr, NULL, local); 75 if (ver != ip_v6) 76 76 return EINVAL; 77 77 -
uspace/srv/net/inetsrv/inetsrv.c
r13be2583 rf023251 63 63 64 64 static inet_naddr_t solicited_node_mask = { 65 . family = AF_INET6,65 .version = ip_v6, 66 66 .addr6 = {0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0xff, 0, 0, 0}, 67 67 .prefix = 104 … … 69 69 70 70 static inet_addr_t broadcast4_all_hosts = { 71 . family = AF_INET,71 .version = ip_v4, 72 72 .addr = 0xffffffff 73 73 }; 74 74 75 75 static inet_addr_t multicast_all_nodes = { 76 . family = AF_INET6,76 .version = ip_v6, 77 77 .addr6 = {0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01} 78 78 }; … … 180 180 181 181 if (dgram->iplink != 0) { 182 /* XXX TODO - IPv6 */ 182 183 log_msg(LOG_DEFAULT, LVL_DEBUG, "dgram directly to iplink %zu", 183 184 dgram->iplink); … … 187 188 return ENOENT; 188 189 189 if (dgram->src. family != AF_INET||190 dgram->dest. family != AF_INET)190 if (dgram->src.version != ip_v4 || 191 dgram->dest.version != ip_v4) 191 192 return EINVAL; 192 193 … … 225 226 226 227 /* Take source address from the address object */ 227 if (remote->family == AF_INET && remote->addr == 0xffffffff) { 228 local->family = AF_INET; 228 if (remote->version == ip_v4 && remote->addr == 0xffffffff) { 229 /* XXX TODO - IPv6 */ 230 local->version = ip_v4; 229 231 local->addr = 0; 230 232 return EOK; 231 233 } 234 232 235 inet_naddr_addr(&dir.aobj->naddr, local); 233 236 return EOK; -
uspace/srv/net/inetsrv/pdu.c
r13be2583 rf023251 533 533 int ndp_pdu_decode(inet_dgram_t *dgram, ndp_packet_t *ndp) 534 534 { 535 uint16_t src_af= inet_addr_get(&dgram->src, NULL,535 ip_ver_t src_ver = inet_addr_get(&dgram->src, NULL, 536 536 &ndp->sender_proto_addr); 537 if (src_ af != AF_INET6)537 if (src_ver != ip_v6) 538 538 return EINVAL; 539 539 -
uspace/srv/net/inetsrv/sroute.c
r13be2583 rf023251 95 95 inet_sroute_t *inet_sroute_find(inet_addr_t *addr) 96 96 { 97 uint16_t addr_af= inet_addr_get(addr, NULL, NULL);97 ip_ver_t addr_ver = inet_addr_get(addr, NULL, NULL); 98 98 99 99 inet_sroute_t *best = NULL; … … 104 104 list_foreach(sroute_list, sroute_list, inet_sroute_t, sroute) { 105 105 uint8_t dest_bits; 106 uint16_t dest_af= inet_naddr_get(&sroute->dest, NULL, NULL,106 ip_ver_t dest_ver = inet_naddr_get(&sroute->dest, NULL, NULL, 107 107 &dest_bits); 108 108 109 109 /* Skip comparison with different address family */ 110 if (addr_ af != dest_af)110 if (addr_ver != dest_ver) 111 111 continue; 112 112 -
uspace/srv/net/tcp/pdu.c
r13be2583 rf023251 145 145 } 146 146 147 static uint16_t tcp_phdr_setup(tcp_pdu_t *pdu, tcp_phdr_t *phdr,147 static ip_ver_t tcp_phdr_setup(tcp_pdu_t *pdu, tcp_phdr_t *phdr, 148 148 tcp_phdr6_t *phdr6) 149 149 { 150 150 addr32_t src_v4; 151 151 addr128_t src_v6; 152 uint16_t src_ af= inet_addr_get(&pdu->src, &src_v4, &src_v6);153 152 uint16_t src_ver = inet_addr_get(&pdu->src, &src_v4, &src_v6); 153 154 154 addr32_t dest_v4; 155 155 addr128_t dest_v6; 156 uint16_t dest_ af= inet_addr_get(&pdu->dest, &dest_v4, &dest_v6);157 158 assert(src_ af == dest_af);159 160 switch (src_ af) {161 case AF_INET:156 uint16_t dest_ver = inet_addr_get(&pdu->dest, &dest_v4, &dest_v6); 157 158 assert(src_ver == dest_ver); 159 160 switch (src_ver) { 161 case ip_v4: 162 162 phdr->src = host2uint32_t_be(src_v4); 163 163 phdr->dest = host2uint32_t_be(dest_v4); … … 167 167 host2uint16_t_be(pdu->header_size + pdu->text_size); 168 168 break; 169 case AF_INET6:169 case ip_v6: 170 170 host2addr128_t_be(src_v6, phdr6->src); 171 171 host2addr128_t_be(dest_v6, phdr6->dest); … … 178 178 assert(false); 179 179 } 180 181 return src_ af;180 181 return src_ver; 182 182 } 183 183 … … 266 266 tcp_phdr_t phdr; 267 267 tcp_phdr6_t phdr6; 268 269 uint16_t af= tcp_phdr_setup(pdu, &phdr, &phdr6);270 switch ( af) {271 case AF_INET:268 269 ip_ver_t ver = tcp_phdr_setup(pdu, &phdr, &phdr6); 270 switch (ver) { 271 case ip_v4: 272 272 cs_phdr = tcp_checksum_calc(TCP_CHECKSUM_INIT, (void *) &phdr, 273 273 sizeof(tcp_phdr_t)); 274 274 break; 275 case AF_INET6:275 case ip_v6: 276 276 cs_phdr = tcp_checksum_calc(TCP_CHECKSUM_INIT, (void *) &phdr6, 277 277 sizeof(tcp_phdr6_t)); … … 280 280 assert(false); 281 281 } 282 282 283 283 cs_headers = tcp_checksum_calc(cs_phdr, pdu->header, pdu->header_size); 284 284 return tcp_checksum_calc(cs_headers, pdu->text, pdu->text_size); -
uspace/srv/net/udp/pdu.c
r13be2583 rf023251 85 85 } 86 86 87 static uint16_t udp_phdr_setup(udp_pdu_t *pdu, udp_phdr_t *phdr,87 static ip_ver_t udp_phdr_setup(udp_pdu_t *pdu, udp_phdr_t *phdr, 88 88 udp_phdr6_t *phdr6) 89 89 { 90 90 addr32_t src_v4; 91 91 addr128_t src_v6; 92 uint16_t src_af= inet_addr_get(&pdu->src, &src_v4, &src_v6);93 92 ip_ver_t src_ver = inet_addr_get(&pdu->src, &src_v4, &src_v6); 93 94 94 addr32_t dest_v4; 95 95 addr128_t dest_v6; 96 uint16_t dest_af= inet_addr_get(&pdu->dest, &dest_v4, &dest_v6);97 98 assert(src_ af == dest_af);99 100 switch (src_ af) {101 case AF_INET:96 ip_ver_t dest_ver = inet_addr_get(&pdu->dest, &dest_v4, &dest_v6); 97 98 assert(src_ver == dest_ver); 99 100 switch (src_ver) { 101 case ip_v4: 102 102 phdr->src_addr = host2uint32_t_be(src_v4); 103 103 phdr->dest_addr = host2uint32_t_be(dest_v4); … … 106 106 phdr->udp_length = host2uint16_t_be(pdu->data_size); 107 107 break; 108 case AF_INET6:108 case ip_v6: 109 109 host2addr128_t_be(src_v6, phdr6->src_addr); 110 110 host2addr128_t_be(dest_v6, phdr6->dest_addr); … … 116 116 assert(false); 117 117 } 118 119 return src_ af;118 119 return src_ver; 120 120 } 121 121 … … 136 136 udp_phdr_t phdr; 137 137 udp_phdr6_t phdr6; 138 139 uint16_t af= udp_phdr_setup(pdu, &phdr, &phdr6);140 switch ( af) {141 case AF_INET:138 139 ip_ver_t ver = udp_phdr_setup(pdu, &phdr, &phdr6); 140 switch (ver) { 141 case ip_v4: 142 142 cs_phdr = udp_checksum_calc(UDP_CHECKSUM_INIT, (void *) &phdr, 143 143 sizeof(udp_phdr_t)); 144 144 break; 145 case AF_INET6:145 case ip_v6: 146 146 cs_phdr = udp_checksum_calc(UDP_CHECKSUM_INIT, (void *) &phdr6, 147 147 sizeof(udp_phdr6_t)); … … 150 150 assert(false); 151 151 } 152 152 153 153 return udp_checksum_calc(cs_phdr, pdu->data, pdu->data_size); 154 154 }
Note:
See TracChangeset
for help on using the changeset viewer.