]> git.proxmox.com Git - mirror_kronosnet.git/commitdiff
[PMTUd] extend internal rerun API to allow full PMTUd reset
authorFabio M. Di Nitto <fdinitto@redhat.com>
Tue, 28 May 2019 03:35:24 +0000 (05:35 +0200)
committerFabio M. Di Nitto <fdinitto@redhat.com>
Tue, 28 May 2019 03:35:24 +0000 (05:35 +0200)
Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
libknet/handle.c
libknet/threads_common.c
libknet/threads_common.h
libknet/transport_udp.c

index 1090eedc2e511a54dc3d98e5496a07a348b85ccb..d4f7c47eb19de5e68c43e3a0c1b2ecea8417f907 100644 (file)
@@ -1407,7 +1407,7 @@ int knet_handle_crypto(knet_handle_t knet_h, struct knet_handle_crypto_cfg *knet
 
 exit_unlock:
        if (!err) {
-               force_pmtud_run(knet_h, KNET_SUB_CRYPTO);
+               force_pmtud_run(knet_h, KNET_SUB_CRYPTO, 1);
        }
        pthread_rwlock_unlock(&knet_h->global_rwlock);
        errno = err ? savederrno : 0;
index a5342a13fa8f4302eb501da5d3655abae5450592..affc04d323be7775c2c8870a018e43471896c7ed 100644 (file)
@@ -157,8 +157,17 @@ int wait_all_threads_status(knet_handle_t knet_h, uint8_t status)
        return 0;
 }
 
-void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem)
+void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem, uint8_t reset_mtu)
 {
+       if (reset_mtu) {
+               log_debug(knet_h, subsystem, "PMTUd has been reset to default");
+               knet_h->data_mtu = KNET_PMTUD_MIN_MTU_V4 - KNET_HEADER_ALL_SIZE - knet_h->sec_header_size;
+               if (knet_h->pmtud_notify_fn) {
+                       knet_h->pmtud_notify_fn(knet_h->pmtud_notify_fn_private_data,
+                                               knet_h->data_mtu);
+               }
+       }
+
        /*
         * we can only try to take a lock here. This part of the code
         * can be invoked by any thread, including PMTUd that is already
index 33781ffbf5413b5143a63251c45453799003b764..f5bff8d2877158f238fde24064322902725fcf2c 100644 (file)
@@ -43,6 +43,6 @@ int shutdown_in_progress(knet_handle_t knet_h);
 int get_global_wrlock(knet_handle_t knet_h);
 int set_thread_status(knet_handle_t knet_h, uint8_t thread_id, uint8_t status);
 int wait_all_threads_status(knet_handle_t knet_h, uint8_t status);
-void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem);
+void force_pmtud_run(knet_handle_t knet_h, uint8_t subsystem, uint8_t reset_mtu);
 
 #endif
index 1df086fe5d6821c9977ab379af3264d80fb3fb9a..3537ec34cae4c12a7a3329a5ddf8f20ecd9ebdbd 100644 (file)
@@ -340,7 +340,7 @@ static int read_errs_from_sock(knet_handle_t knet_h, int sockfd)
                                                                        pthread_mutex_unlock(&knet_h->kmtu_mutex);
                                                                }
 
-                                                               force_pmtud_run(knet_h, KNET_SUB_TRANSP_UDP);
+                                                               force_pmtud_run(knet_h, KNET_SUB_TRANSP_UDP, 0);
                                                        }
                                                        /*
                                                         * those errors are way too noisy