]> git.meshlink.io Git - meshlink/commitdiff
Allow setting the UTCP clock granularity.
authorGuus Sliepen <guus@meshlink.io>
Tue, 31 Mar 2020 09:22:35 +0000 (11:22 +0200)
committerGuus Sliepen <guus@meshlink.io>
Tue, 31 Mar 2020 09:22:35 +0000 (11:22 +0200)
This sets the granularity to 10 ms by default, and adds the function
meshlink_set_scheduling_granularity() to be able to change it.

src/meshlink++.h
src/meshlink.c
src/meshlink.h
src/meshlink.sym

index 93020661b922b21b1c1b43dbc2e7dd105f65138d..98ccf5b3d10f309a69f7cdfa316ea42c6c401e7b 100644 (file)
@@ -619,6 +619,18 @@ public:
                meshlink_set_invitation_timeout(handle, timeout);
        }
 
+       /// Set the scheduling granularity of the application
+       /** This should be set to the effective scheduling granularity for the application.
+        *  This depends on the scheduling granularity of the operating system, the application's
+        *  process priority and whether it is running as realtime or not.
+        *  The default value is 10000 (10 milliseconds).
+        *
+        *  @param granularity  The scheduling granularity of the application in microseconds.
+        */
+       void set_granularity(long granularity) {
+               meshlink_set_scheduling_granularity(handle, granularity);
+       }
+
        /// Invite another node into the mesh.
        /** This function generates an invitation that can be used by another node to join the same mesh as the local node.
         *  The generated invitation is a string containing a URL.
index 3242bc267d625a34686e06804cb4efa925fcd652..ef46a952ef49343d5ac250c82d581f783147d20a 100644 (file)
@@ -4162,6 +4162,15 @@ void meshlink_set_external_address_discovery_url(struct meshlink_handle *mesh, c
        pthread_mutex_unlock(&mesh->mutex);
 }
 
+void meshlink_set_scheduling_granularity(struct meshlink_handle *mesh, long granularity) {
+       if(!mesh || granularity < 0) {
+               meshlink_errno = EINVAL;
+               return;
+       }
+
+       utcp_set_clock_granularity(granularity);
+}
+
 void handle_network_change(meshlink_handle_t *mesh, bool online) {
        (void)online;
 
@@ -4189,6 +4198,7 @@ void call_error_cb(meshlink_handle_t *mesh, meshlink_errno_t meshlink_errno) {
 
 static void __attribute__((constructor)) meshlink_init(void) {
        crypto_init();
+       utcp_set_clock_granularity(10000);
 }
 
 static void __attribute__((destructor)) meshlink_exit(void) {
index 5390c4e8645c9e30ce0db49162f0b9e016f5850e..6a50eb66f1b3a54776e6c5c5ce191570631a6aee 100644 (file)
@@ -1608,6 +1608,18 @@ extern void meshlink_set_inviter_commits_first(struct meshlink_handle *mesh, boo
  */
 extern void meshlink_set_external_address_discovery_url(struct meshlink_handle *mesh, const char *url);
 
+/// Set the scheduling granularity of the application
+/** This should be set to the effective scheduling granularity for the application.
+ *  This depends on the scheduling granularity of the operating system, the application's
+ *  process priority and whether it is running as realtime or not.
+ *  The default value is 10000 (10 milliseconds).
+ *
+ *  \memberof meshlink_handle
+ *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param granularity  The scheduling granularity of the application in microseconds.
+ */
+extern void meshlink_set_scheduling_granularity(struct meshlink_handle *mesh, long granularity);
+
 #ifdef __cplusplus
 }
 #endif
index 57eea5e528f7d2a5ea6372a68771828c04acbce2..16a659ee1e8198ecc375478f410be779bea6d96e 100644 (file)
@@ -18,6 +18,7 @@ meshlink_channel_aio_receive
 meshlink_channel_aio_send
 meshlink_channel_close
 meshlink_channel_get_flags
+meshlink_channel_get_mss
 meshlink_channel_get_recvq
 meshlink_channel_get_sendq
 meshlink_channel_open
@@ -82,6 +83,7 @@ meshlink_set_node_pmtu_cb
 meshlink_set_node_status_cb
 meshlink_set_port
 meshlink_set_receive_cb
+meshlink_set_scheduling_granularity
 meshlink_sign
 meshlink_start
 meshlink_stop