Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.3
corosync.14288
0013-bsc#1163460-totemip-Add-support-for-sin6_s...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0013-bsc#1163460-totemip-Add-support-for-sin6_scope_id.patch of Package corosync.14288
From 36938e24a8d03f9b8fc97768ed08df36e63f61d0 Mon Sep 17 00:00:00 2001 From: liangxin1300 <XLiang@suse.com> Date: Mon, 17 Feb 2020 22:24:31 +0800 Subject: [PATCH] totemip: Add support for sin6_scope_id sin6_scope_id was not present in totemip structure making impossible to use link-local ipv6 address. Patch adds sin6_scope_id and changes convert/copy functions to use it (formally also comparator functions should be changed, but it seems to cause more harm and it is not really needed). This makes corosync work with link-local addresses fine for both UDPU and UDP transport as long as interface specification is used (so fe80::xxxx:xxxx:xxxx:xxxx%eth0). (backported from master 934c47ed4384daf2819c26306bebba3225807499) Signed-off-by: liangxin1300 <XLiang@suse.com> Reviewed-by: Jan Friesse <jfriesse@redhat.com> --- exec/totemip.c | 15 +++++++++++---- include/corosync/coroapi.h | 1 + include/corosync/totem/totemip.h | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/exec/totemip.c b/exec/totemip.c index 28a88365..d8130831 100644 --- a/exec/totemip.c +++ b/exec/totemip.c @@ -247,7 +247,7 @@ int totemip_totemip_to_sockaddr_convert(struct totem_ip_address *ip_addr, #endif sin->sin6_family = ip_addr->family; sin->sin6_port = ntohs(port); - sin->sin6_scope_id = 2; + sin->sin6_scope_id = ip_addr->sin6_scope_id; memcpy(&sin->sin6_addr, ip_addr->addr, sizeof(struct in6_addr)); *addrlen = sizeof(struct sockaddr_in6); @@ -282,10 +282,13 @@ int totemip_parse(struct totem_ip_address *totemip, const char *addr, int family sa6 = (struct sockaddr_in6 *)ainfo->ai_addr; totemip->family = ainfo->ai_family; - if (ainfo->ai_family == AF_INET) + if (ainfo->ai_family == AF_INET) { memcpy(totemip->addr, &sa->sin_addr, sizeof(struct in_addr)); - else + totemip->sin6_scope_id = 0; + } else { memcpy(totemip->addr, &sa6->sin6_addr, sizeof(struct in6_addr)); + totemip->sin6_scope_id = sa6->sin6_scope_id; + } freeaddrinfo(ainfo); return 0; @@ -304,6 +307,7 @@ int totemip_sockaddr_to_totemip_convert(const struct sockaddr_storage *saddr, const struct sockaddr_in *sin = (const struct sockaddr_in *)saddr; memcpy(ip_addr->addr, &sin->sin_addr, sizeof(struct in_addr)); + ip_addr->sin6_scope_id = 0; ret = 0; } @@ -312,7 +316,7 @@ int totemip_sockaddr_to_totemip_convert(const struct sockaddr_storage *saddr, = (const struct sockaddr_in6 *)saddr; memcpy(ip_addr->addr, &sin->sin6_addr, sizeof(struct in6_addr)); - + ip_addr->sin6_scope_id = sin->sin6_scope_id; ret = 0; } return ret; @@ -445,6 +449,9 @@ int totemip_iface_check(struct totem_ip_address *bindnet, if (addr_len == 0) continue ; + if (bindnet->sin6_scope_id != 0 && bindnet->sin6_scope_id != if_addr->interface_num) + continue; + totemip_copy(&bn_netaddr, bindnet); totemip_copy(&if_netaddr, &if_addr->ip_addr); diff --git a/include/corosync/coroapi.h b/include/corosync/coroapi.h index 7e1f27cb..00173001 100644 --- a/include/corosync/coroapi.h +++ b/include/corosync/coroapi.h @@ -112,6 +112,7 @@ struct totem_ip_address { unsigned int nodeid; unsigned short family; unsigned char addr[TOTEMIP_ADDRLEN]; + unsigned int sin6_scope_id; } __attribute__((packed)); #endif diff --git a/include/corosync/totem/totemip.h b/include/corosync/totem/totemip.h index 0168e66c..2ae0e03e 100644 --- a/include/corosync/totem/totemip.h +++ b/include/corosync/totem/totemip.h @@ -65,6 +65,7 @@ struct totem_ip_address unsigned int nodeid; unsigned short family; unsigned char addr[TOTEMIP_ADDRLEN]; + unsigned int sin6_scope_id; } __attribute__((packed)); struct totem_ip_if_address -- 2.21.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor