]> git.proxmox.com Git - mirror_corosync.git/commitdiff
qnetd: Make proper support for ipv4/6
authorJan Friesse <jfriesse@redhat.com>
Wed, 16 Dec 2015 17:19:24 +0000 (18:19 +0100)
committerJan Friesse <jfriesse@redhat.com>
Tue, 28 Jun 2016 11:58:39 +0000 (13:58 +0200)
- Add option for forcing ip version 4 or 6
- Choose new default port. It's now 5403. Exactly one less than used by
  corosync.
- Fix compiler warning

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
qdevices/corosync-qnetd.c
qdevices/nss-sock.c
qdevices/qnet-config.h
qdevices/qnetd-client-net.c

index f98cc6f5c861af2d2bdebdac6864b1571954c9bb..317d789b8762c3f7056dd00143bf4714338ea2ea 100644 (file)
@@ -218,14 +218,14 @@ static void
 usage(void)
 {
 
-       printf("usage: %s [-df] [-l listen_addr] [-p listen_port] [-s tls]\n", QNETD_PROGRAM_NAME);
+       printf("usage: %s [-46df] [-l listen_addr] [-p listen_port] [-s tls]\n", QNETD_PROGRAM_NAME);
        printf("%14s[-c client_cert_required] [-m max_clients]\n", "");
 }
 
 static void
 cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port, int *foreground,
     int *debug_log, int *bump_log_priority, enum tlv_tls_supported *tls_supported,
-    int *client_cert_required, size_t *max_clients)
+    int *client_cert_required, size_t *max_clients, PRIntn *address_family)
 {
        int ch;
        char *ep;
@@ -239,9 +239,16 @@ cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port,
        *tls_supported = QNETD_DEFAULT_TLS_SUPPORTED;
        *client_cert_required = QNETD_DEFAULT_TLS_CLIENT_CERT_REQUIRED;
        *max_clients = QNETD_DEFAULT_MAX_CLIENTS;
+       *address_family = PR_AF_UNSPEC;
 
-       while ((ch = getopt(argc, argv, "fdc:l:m:p:s:")) != -1) {
+       while ((ch = getopt(argc, argv, "46fdc:l:m:p:s:")) != -1) {
                switch (ch) {
+               case '4':
+                       *address_family = PR_AF_INET;
+                       break;
+               case '6':
+                       *address_family = PR_AF_INET6;
+                       break;
                case 'f':
                        *foreground = 1;
                        break;
@@ -305,9 +312,10 @@ main(int argc, char *argv[])
        enum tlv_tls_supported tls_supported;
        int client_cert_required;
        size_t max_clients;
+       PRIntn address_family;
 
        cli_parse(argc, argv, &host_addr, &host_port, &foreground, &debug_log, &bump_log_priority,
-           &tls_supported, &client_cert_required, &max_clients);
+           &tls_supported, &client_cert_required, &max_clients, &address_family);
 
        if (foreground) {
                qnetd_log_init(QNETD_LOG_TARGET_STDERR);
@@ -354,7 +362,7 @@ main(int argc, char *argv[])
 
        qnetd_log_printf(LOG_DEBUG, "Creating listening socket");
        instance.server.socket = nss_sock_create_listen_socket(instance.host_addr,
-           instance.host_port, PR_AF_INET6);
+           instance.host_port, address_family);
        if (instance.server.socket == NULL) {
                qnetd_err_nss();
        }
index 32fb3024c578e903b2f4627b7dc1e4c2e92145fb..5ba5a0a68a9c5ce42599320dd1937e2516211d80 100644 (file)
@@ -110,8 +110,8 @@ nss_sock_create_socket(PRIntn af, int reuse_addr)
 
 /*
  * Create listen socket and bind it to address. hostname can be NULL and then
- * any address is used. Address family (af) can be ether PR_AF_INET6 or
- * PR_AF_INET.
+ * any address is used. Address family (af) can be ether PR_AF_INET6,
+ * PR_AF_INET or PR_AF_UNSPEC.
  */
 PRFileDesc *
 nss_sock_create_listen_socket(const char *hostname, uint16_t port, PRIntn af)
@@ -119,7 +119,6 @@ nss_sock_create_listen_socket(const char *hostname, uint16_t port, PRIntn af)
        PRNetAddr addr;
        PRFileDesc *sock;
        PRAddrInfo *addr_info;
-       PRIntn tmp_af;
        void *addr_iter;
 
        sock = NULL;
@@ -130,6 +129,9 @@ nss_sock_create_listen_socket(const char *hostname, uint16_t port, PRIntn af)
                if (PR_InitializeNetAddr(PR_IpAddrAny, port, &addr) != PR_SUCCESS) {
                        return (NULL);
                }
+               if (af == PR_AF_UNSPEC) {
+                       af = PR_AF_INET6;
+               }
                addr.raw.family = af;
 
                sock = nss_sock_create_socket(af, 1);
@@ -143,11 +145,7 @@ nss_sock_create_listen_socket(const char *hostname, uint16_t port, PRIntn af)
                        return (NULL);
                }
        } else {
-               tmp_af = PR_AF_UNSPEC;
-               if (af == PR_AF_INET)
-                       tmp_af = PR_AF_INET;
-
-               addr_info = PR_GetAddrInfoByName(hostname, tmp_af, PR_AI_ADDRCONFIG);
+               addr_info = PR_GetAddrInfoByName(hostname, af, PR_AI_ADDRCONFIG);
                if (addr_info == NULL) {
                        return (NULL);
                }
@@ -156,8 +154,8 @@ nss_sock_create_listen_socket(const char *hostname, uint16_t port, PRIntn af)
 
                while ((addr_iter = PR_EnumerateAddrInfo(addr_iter, addr_info, port,
                    &addr)) != NULL) {
-                       if (addr.raw.family == af) {
-                               sock = nss_sock_create_socket(af, 1);
+                       if (af == PR_AF_UNSPEC || addr.raw.family == af) {
+                               sock = nss_sock_create_socket(addr.raw.family, 1);
                                if (sock == NULL) {
                                        continue ;
                                }
index 43a6eb4c458fa64c65a43b4c7430752cfa630ce5..552cf6252471663c5e18e5cfb770d009029e3275 100644 (file)
@@ -47,7 +47,7 @@ extern "C" {
  */
 
 #define QNETD_PROGRAM_NAME                     "corosync-qnetd"
-#define QNETD_DEFAULT_HOST_PORT                        4433
+#define QNETD_DEFAULT_HOST_PORT                        5403
 #define QNETD_LISTEN_BACKLOG                   10
 #define QNETD_MAX_CLIENT_SEND_BUFFERS          10
 #define QNETD_MAX_CLIENT_SEND_SIZE             (1 << 15)
index a30830fb79c74e92e7ea2da0af050a52e0d3af2a..85ce8cb99d36092963c7b1c75e1679f3085b2c5a 100644 (file)
@@ -40,6 +40,7 @@
 #include "qnetd-log.h"
 #include "qnetd-client-net.h"
 #include "qnetd-client-send.h"
+#include "qnetd-client-msg-received.h"
 
 static int
 qnetd_client_net_write_finished(struct qnetd_instance *instance, struct qnetd_client *client)