Merge branch 'mysql'
[slapos.git] / component / kumo / kumofs-0.4.13_ipv6support_multiiplistenfix.patch
1 # Author: Guillaume BOTTEX
2 # Feature added: support for IPv6
3 # Bug fixed: https://github.com/etolabo/kumofs/issues#issue/8
4 diff --git a/src/logic/boot.cc b/src/logic/boot.cc
5 index d0a4c32..c197a30 100644
6 --- a/src/logic/boot.cc
7 +++ b/src/logic/boot.cc
8 @@ -29,6 +29,12 @@ scoped_listen_tcp::scoped_listen_tcp(struct sockaddr_in addr) :
9         m_addr(addr),
10         m_sock(listen(m_addr)) { }
11  
12 +#ifdef KUMO_IPV6
13 +scoped_listen_tcp::scoped_listen_tcp(struct sockaddr_in6 addr) :
14 +       m_addr(addr),
15 +       m_sock(listen(m_addr)) { }
16 +#endif
17 +
18  scoped_listen_tcp::~scoped_listen_tcp()
19  {
20         ::close(m_sock);
21 @@ -37,7 +43,11 @@ scoped_listen_tcp::~scoped_listen_tcp()
22  
23  int scoped_listen_tcp::listen(const rpc::address& addr)
24  {
25 +#ifdef KUMO_IPV6
26 +       int lsock = socket(PF_INET6, SOCK_STREAM, 0);
27 +#else
28         int lsock = socket(PF_INET, SOCK_STREAM, 0);
29 +#endif
30         if(lsock < 0) {
31                 throw std::runtime_error("socket failed");
32         }
33 @@ -152,7 +162,11 @@ void rpc_args::convert()
34  void cluster_args::convert()
35  {
36         cluster_addr = rpc::address(cluster_addr_in);
37 -       cluster_addr_in.sin_addr.s_addr = INADDR_ANY;  // listen any
38 +#ifdef KUMO_IPV6
39 +       // cluster_addr_in.sin6_addr = in6addr_any;  // listen any
40 +#else
41 +       // cluster_addr_in.sin_addr.s_addr = INADDR_ANY;  // listen any
42 +#endif
43         cluster_lsock = scoped_listen_tcp::listen(
44                         rpc::address(cluster_addr_in));
45         rpc_args::convert();
46 diff --git a/src/logic/boot.h b/src/logic/boot.h
47 index 5d09549..e0e6ac1 100644
48 --- a/src/logic/boot.h
49 +++ b/src/logic/boot.h
50 @@ -31,6 +31,9 @@ namespace kumo {
51  class scoped_listen_tcp {
52  public:
53         scoped_listen_tcp(struct sockaddr_in addr);
54 +#ifdef KUMO_IPV6
55 +       scoped_listen_tcp(struct sockaddr_in6 addr);
56 +#endif
57         ~scoped_listen_tcp();
58  
59  public:
60 @@ -110,7 +113,11 @@ struct cluster_args : rpc_args {
61         virtual void set_basic_args();
62         virtual void show_usage();
63  
64 +#ifdef KUMO_IPV6
65 +       struct sockaddr_in6 cluster_addr_in;
66 +#else
67         struct sockaddr_in cluster_addr_in;
68 +#endif
69         rpc::address cluster_addr;  // convert
70         int cluster_lsock;  // convert
71  
72 diff --git a/src/logic/gateway/main.cc b/src/logic/gateway/main.cc
73 index 8829d6b..7faf81a 100644
74 --- a/src/logic/gateway/main.cc
75 +++ b/src/logic/gateway/main.cc
76 @@ -30,8 +30,13 @@ using namespace kumo;
77  
78  struct arg_t : rpc_args {
79  
80 +#ifdef KUMO_IPV6
81 +       sockaddr_in6 manager1_in;
82 +       sockaddr_in6 manager2_in;
83 +#else
84         sockaddr_in manager1_in;
85         sockaddr_in manager2_in;
86 +#endif
87         bool manager2_set;
88         rpc::address manager1;  // convert
89         rpc::address manager2;  // convert
90 @@ -48,15 +53,27 @@ struct arg_t : rpc_args {
91         std::string local_cache;
92  
93         bool mctext_set;
94 +#ifdef KUMO_IPV6
95 +       sockaddr_in6 mctext_addr_in;
96 +#else
97         sockaddr_in mctext_addr_in;
98 +#endif
99         int mctext_lsock;  // convert
100  
101         bool mcbin_set;
102 +#ifdef KUMO_IPV6
103 +       sockaddr_in6 mcbin_addr_in;
104 +#else
105         sockaddr_in mcbin_addr_in;
106 +#endif
107         int mcbin_lsock;  // convert
108  
109         bool cloudy_set;
110 +#ifdef KUMO_IPV6
111 +       sockaddr_in6 cloudy_addr_in;
112 +#else
113         sockaddr_in cloudy_addr_in;
114 +#endif
115         int cloudy_lsock;  // convert
116  
117         bool mc_save_flag;
118 diff --git a/src/logic/manager/main.cc b/src/logic/manager/main.cc
119 index 5847ae0..63f948a 100644
120 --- a/src/logic/manager/main.cc
121 +++ b/src/logic/manager/main.cc
122 @@ -27,7 +27,11 @@ struct arg_t : cluster_args {
123         bool auto_replace;
124  
125         bool partner_set;
126 +#ifdef KUMO_IPV6
127 +       struct sockaddr_in6 partner_in;
128 +#else
129         struct sockaddr_in partner_in;
130 +#endif
131         rpc::address partner;  // convert
132  
133         virtual void convert()
134 diff --git a/src/logic/server/main.cc b/src/logic/server/main.cc
135 index cd92e46..5d87120 100644
136 --- a/src/logic/server/main.cc
137 +++ b/src/logic/server/main.cc
138 @@ -25,8 +25,13 @@ struct arg_t : cluster_args {
139  
140         std::string dbpath;
141  
142 +#ifdef KUMO_IPV6
143 +       sockaddr_in6 manager1_in;
144 +       sockaddr_in6 manager2_in;
145 +#else
146         sockaddr_in manager1_in;
147         sockaddr_in manager2_in;
148 +#endif
149         bool manager2_set;
150         rpc::address manager1;  // convert
151         rpc::address manager2;  // convert
152 diff --git a/src/logic/server/mod_replace_stream.cc b/src/logic/server/mod_replace_stream.cc
153 index 091ebc9..25ee736 100644
154 --- a/src/logic/server/mod_replace_stream.cc
155 +++ b/src/logic/server/mod_replace_stream.cc
156 @@ -104,7 +104,11 @@ RPC_IMPL(mod_replace_stream_t, ReplaceOffer, req, z, response)
157  
158         using namespace mp::placeholders;
159         m_stream_core->connect(
160 +#ifdef KUMO_IPV6
161 +                       PF_INET6, SOCK_STREAM, 0,
162 +#else
163                         PF_INET, SOCK_STREAM, 0,
164 +#endif
165                         (sockaddr*)addrbuf, sizeof(addrbuf),
166                         net->connect_timeout_msec(),
167                         mp::bind(&mod_replace_stream_t::stream_connected, this, _1, _2));
168 diff --git a/src/rpc/client_tmpl.h b/src/rpc/client_tmpl.h
169 index 8424677..173a308 100644
170 --- a/src/rpc/client_tmpl.h
171 +++ b/src/rpc/client_tmpl.h
172 @@ -159,7 +159,11 @@ bool client_tmpl<Transport, Session>::async_connect(
173         addr.getaddr((sockaddr*)&addrbuf);
174  
175         using namespace mp::placeholders;
176 +#ifdef KUMO_IPV6
177 +       wavy::connect(PF_INET6, SOCK_STREAM, 0,
178 +#else
179         wavy::connect(PF_INET, SOCK_STREAM, 0,
180 +#endif
181                         (sockaddr*)addrbuf, sizeof(addrbuf),
182                         m_connect_timeout_msec,
183                         mp::bind(