mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-01 18:09:41 +00:00
Add IPv6 Support To chan_iax2
This patch adds IPv6 support to chan_iax2. Yay! (closes issue ASTERISK-22025) Patches: iax2-ipv6-v5-reviewboard.diff by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2660/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@400567 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -297,6 +297,37 @@ cleanup:
|
||||
return res_cnt;
|
||||
}
|
||||
|
||||
int ast_sockaddr_apply_netmask(const struct ast_sockaddr *addr, const struct ast_sockaddr *netmask,
|
||||
struct ast_sockaddr *result)
|
||||
{
|
||||
int res = 0;
|
||||
|
||||
if (ast_sockaddr_is_ipv4(addr)) {
|
||||
struct sockaddr_in result4 = { 0, };
|
||||
struct sockaddr_in *addr4 = (struct sockaddr_in *) &addr->ss;
|
||||
struct sockaddr_in *mask4 = (struct sockaddr_in *) &netmask->ss;
|
||||
result4.sin_family = AF_INET;
|
||||
result4.sin_addr.s_addr = addr4->sin_addr.s_addr & mask4->sin_addr.s_addr;
|
||||
ast_sockaddr_from_sin(result, &result4);
|
||||
} else if (ast_sockaddr_is_ipv6(addr)) {
|
||||
struct sockaddr_in6 result6 = { 0, };
|
||||
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) &addr->ss;
|
||||
struct sockaddr_in6 *mask6 = (struct sockaddr_in6 *) &netmask->ss;
|
||||
int i;
|
||||
result6.sin6_family = AF_INET6;
|
||||
for (i = 0; i < 4; ++i) {
|
||||
V6_WORD(&result6, i) = V6_WORD(addr6, i) & V6_WORD(mask6, i);
|
||||
}
|
||||
memcpy(&result->ss, &result6, sizeof(result6));
|
||||
result->len = sizeof(result6);
|
||||
} else {
|
||||
/* Unsupported address scheme */
|
||||
res = -1;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
int ast_sockaddr_cmp(const struct ast_sockaddr *a, const struct ast_sockaddr *b)
|
||||
{
|
||||
const struct ast_sockaddr *a_tmp, *b_tmp;
|
||||
|
Reference in New Issue
Block a user