]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Make listen queue configurable
authorpcarana <pc.moreno2099@gmail.com>
Wed, 20 Mar 2019 18:52:31 +0000 (12:52 -0600)
committerpcarana <pc.moreno2099@gmail.com>
Wed, 20 Mar 2019 18:52:31 +0000 (12:52 -0600)
src/configuration.c
src/configuration.h
src/rtr/rtr.c

index d6ac72ecaa7ba41891810e1375affaf6f1948062..31925932d000d548494fad40e903c3215e0e69e1 100644 (file)
@@ -13,6 +13,7 @@
 #define OPTNAME_LISTEN         "listen"
 #define OPTNAME_LISTEN_ADDRESS "address"
 #define OPTNAME_LISTEN_PORT    "port"
+#define OPTNAME_LISTEN_QUEUE   "queue"
 #define OPTNAME_VRPS   "vrps"
 #define OPTNAME_VRPS_LOCATION  "location"
 #define OPTNAME_VRPS_CHECK_INTERVAL    "checkInterval"
@@ -23,6 +24,7 @@
 
 #define DEFAULT_ADDR           NULL
 #define DEFAULT_PORT           "323"
+#define DEFAULT_QUEUE          10
 #define DEFAULT_VRPS_LOCATION          NULL
 #define DEFAULT_VRPS_CHECK_INTERVAL    60
 #define DEFAULT_REFRESH_INTERVAL               3600
 #define MIN_EXPIRE_INTERVAL            600
 #define MAX_EXPIRE_INTERVAL            172800
 
+/* Range values for other params */
+#define MIN_LISTEN_QUEUE               1
+#define MAX_LISTEN_QUEUE               SOMAXCONN
+
 struct rtr_config {
        /** The listener address of the RTR server. */
        struct addrinfo *address;
@@ -46,6 +52,8 @@ struct rtr_config {
        char *port;
        /** VRPs (Validated ROA Payload) location */
        char *vrps_location;
+       /** Maximum accepted client connections */
+       int queue;
        /** Interval used to look for updates at VRPs location */
        int vrps_check_interval;
        /** Intervals use at RTR v1 End of data PDU **/
@@ -99,19 +107,19 @@ config_cleanup(void)
 }
 
 static int
-load_interval(json_t *parent, char const *name, int default_value,
+load_range(json_t *parent, char const *name, int default_value,
     int *result, int min_value, int max_value)
 {
        int error;
 
        error = json_get_int(parent, name, default_value, result);
        if (error) {
-               err(error, "Invalid value for interval '%s'", name);
+               err(error, "Invalid value for '%s'", name);
                return error;
        }
 
        if (*result < min_value || max_value < *result) {
-               err(-EINVAL, "Interval '%s' (%d) out of range, must be from %d to %d",
+               err(-EINVAL, "'%s' (%d) out of range, must be from %d to %d",
                    name, *result, min_value, max_value);
                return -EINVAL;
        }
@@ -128,6 +136,7 @@ handle_json(json_t *root)
        char const *address;
        char const *port;
        char const *vrps_location;
+       int queue;
        int vrps_check_interval;
        int refresh_interval;
        int retry_interval;
@@ -157,9 +166,17 @@ handle_json(json_t *root)
                if (error)
                        return error;
 
+               error = load_range(listen, OPTNAME_LISTEN_QUEUE,
+                   DEFAULT_QUEUE, &queue,
+                   MIN_LISTEN_QUEUE, MAX_LISTEN_QUEUE);
+               if (error)
+                       return error;
+               config.queue = queue;
+
        } else {
                address = DEFAULT_ADDR;
                port = DEFAULT_PORT;
+               config.queue = DEFAULT_QUEUE;
        }
 
        vrps = json_object_get(root, OPTNAME_VRPS);
@@ -182,7 +199,7 @@ handle_json(json_t *root)
                 * The cache MUST rate-limit Serial Notifies to no more frequently than
                 * one per minute.
                 */
-               error = load_interval(vrps, OPTNAME_VRPS_CHECK_INTERVAL,
+               error = load_range(vrps, OPTNAME_VRPS_CHECK_INTERVAL,
                    DEFAULT_VRPS_CHECK_INTERVAL, &vrps_check_interval,
                    MIN_VRPS_CHECK_INTERVAL, MAX_VRPS_CHECK_INTERVAL);
                if (error)
@@ -205,19 +222,19 @@ handle_json(json_t *root)
                        return -EINVAL;
                }
 
-               error = load_interval(interval, OPTNAME_RTR_INTERVAL_REFRESH,
+               error = load_range(interval, OPTNAME_RTR_INTERVAL_REFRESH,
                    DEFAULT_REFRESH_INTERVAL, &refresh_interval,
                    MIN_REFRESH_INTERVAL, MAX_REFRESH_INTERVAL);
                if (error)
                        return error;
 
-               error = load_interval(interval, OPTNAME_RTR_INTERVAL_RETRY,
+               error = load_range(interval, OPTNAME_RTR_INTERVAL_RETRY,
                    DEFAULT_RETRY_INTERVAL, &retry_interval,
                    MIN_RETRY_INTERVAL, MAX_RETRY_INTERVAL);
                if (error)
                        return error;
 
-               error = load_interval(interval, OPTNAME_RTR_INTERVAL_EXPIRE,
+               error = load_range(interval, OPTNAME_RTR_INTERVAL_EXPIRE,
                    DEFAULT_EXPIRE_INTERVAL, &expire_interval,
                    MIN_EXPIRE_INTERVAL, MAX_EXPIRE_INTERVAL);
                if (error)
@@ -319,6 +336,12 @@ config_get_vrps_location(void)
        return config.vrps_location;
 }
 
+int
+config_get_server_queue(void)
+{
+       return config.queue;
+}
+
 int
 config_get_vrps_check_interval(void)
 {
index 3474f68f7db96b7d6449e3400dd5ca1812f5bf43..18145363386f9709a970ae42cc9aeab79ab5dbe9 100644 (file)
@@ -9,6 +9,7 @@ void config_cleanup(void);
 struct addrinfo const *config_get_server_addrinfo(void);
 char const *config_get_server_port(void);
 char const *config_get_vrps_location(void);
+int config_get_server_queue(void);
 int config_get_vrps_check_interval(void);
 int config_get_refresh_interval(void);
 int config_get_retry_interval(void);
index 1822f995785f849c3243cb5b77a8ab558f6c8cd1..d1c661832c0ca1036bb13823bf2783b40485a8d7 100644 (file)
@@ -168,8 +168,7 @@ handle_client_connections(int server_fd)
        struct thread_param *arg;
        pthread_t thread;
 
-       /* TODO (review) 5 should be configurable. */
-       listen(server_fd, 5);
+       listen(server_fd, config_get_server_queue());
 
        sizeof_client_addr = sizeof(client_addr);