* are the two addresses the same? currently a "scopeless" check returns: 1 * if same, 0 if not */
| 4648 | * if same, 0 if not |
| 4649 | */ |
| 4650 | int |
| 4651 | sctp_cmpaddr(struct sockaddr *sa1, struct sockaddr *sa2) |
| 4652 | { |
| 4653 | |
| 4654 | /* must be valid */ |
| 4655 | if (sa1 == NULL || sa2 == NULL) |
| 4656 | return (0); |
| 4657 | |
| 4658 | /* must be the same family */ |
| 4659 | if (sa1->sa_family != sa2->sa_family) |
| 4660 | return (0); |
| 4661 | |
| 4662 | switch (sa1->sa_family) { |
| 4663 | #ifdef INET6 |
| 4664 | case AF_INET6: |
| 4665 | { |
| 4666 | /* IPv6 addresses */ |
| 4667 | struct sockaddr_in6 *sin6_1, *sin6_2; |
| 4668 | |
| 4669 | sin6_1 = (struct sockaddr_in6 *)sa1; |
| 4670 | sin6_2 = (struct sockaddr_in6 *)sa2; |
| 4671 | return (SCTP6_ARE_ADDR_EQUAL(sin6_1, |
| 4672 | sin6_2)); |
| 4673 | } |
| 4674 | #endif |
| 4675 | #ifdef INET |
| 4676 | case AF_INET: |
| 4677 | { |
| 4678 | /* IPv4 addresses */ |
| 4679 | struct sockaddr_in *sin_1, *sin_2; |
| 4680 | |
| 4681 | sin_1 = (struct sockaddr_in *)sa1; |
| 4682 | sin_2 = (struct sockaddr_in *)sa2; |
| 4683 | return (sin_1->sin_addr.s_addr == sin_2->sin_addr.s_addr); |
| 4684 | } |
| 4685 | #endif |
| 4686 | default: |
| 4687 | /* we don't do these... */ |
| 4688 | return (0); |
| 4689 | } |
| 4690 | } |
| 4691 | |
| 4692 | void |
| 4693 | sctp_print_address(struct sockaddr *sa) |
no test coverage detected