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;
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
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
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