Skip to content

Commit

Permalink
[PMTUd] adjust all values around new transports
Browse files Browse the repository at this point in the history
Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
  • Loading branch information
fabbione committed Dec 19, 2016
1 parent 3c62178 commit 0bb931a
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 16 deletions.
2 changes: 1 addition & 1 deletion libknet/internals.h
Expand Up @@ -31,7 +31,6 @@ typedef void *knet_transport_link_t; /* per link transport handle */
typedef void *knet_transport_t; /* per knet_h transport handle */
struct knet_transport_ops; /* Forward because of circular dependancy */


struct knet_listener {
int sock;
struct sockaddr_storage address;
Expand Down Expand Up @@ -65,6 +64,7 @@ struct knet_link {
uint8_t received_pong;
struct timespec ping_last;
/* used by PMTUD thread as temp per-link variables and should always contain the onwire_len value! */
uint32_t proto_overhead;
struct timespec pmtud_last;
uint32_t last_ping_size;
uint32_t last_good_mtu;
Expand Down
4 changes: 4 additions & 0 deletions libknet/link.c
Expand Up @@ -157,6 +157,10 @@ int knet_link_set_config(knet_handle_t knet_h, uint16_t host_id, uint8_t link_id
exit_unlock:
if (!err) {
link->transport_type = transport;
if ((knet_h->transport_ops[link->transport_type]) &&
(knet_h->transport_ops[link->transport_type]->link_get_mtu_overhead)) {
link->proto_overhead = knet_h->transport_ops[link->transport_type]->link_get_mtu_overhead(link->transport);
}
link->configured = 1;
link->pong_count = KNET_LINK_DEFAULT_PONG_COUNT;
link->has_valid_mtu = 0;
Expand Down
22 changes: 7 additions & 15 deletions libknet/threads_pmtud.c
Expand Up @@ -41,28 +41,20 @@ static int _handle_check_link_pmtud(knet_handle_t knet_h, struct knet_host *dst_
failsafe = 0;
pad_len = 0;

/*
* FIXME: proto overhead should be included in overhead_len
*/
if ((knet_h->transport_ops[dst_link->transport_type]) &&
(knet_h->transport_ops[dst_link->transport_type]->link_get_mtu_overhead)) {
dst_link->last_bad_mtu = knet_h->transport_ops[dst_link->transport_type]->link_get_mtu_overhead(dst_link->transport);
} else {
dst_link->last_bad_mtu = 0;
}
dst_link->last_bad_mtu = 0;

knet_h->pmtudbuf->khp_pmtud_link = dst_link->link_id;

switch (dst_link->dst_addr.ss_family) {
case AF_INET6:
max_mtu_len = KNET_PMTUD_SIZE_V6;
overhead_len = KNET_PMTUD_OVERHEAD_V6;
dst_link->last_good_mtu = dst_link->last_ping_size + KNET_PMTUD_OVERHEAD_V6;
overhead_len = KNET_PMTUD_OVERHEAD_V6 + dst_link->proto_overhead;
dst_link->last_good_mtu = dst_link->last_ping_size + overhead_len;
break;
case AF_INET:
max_mtu_len = KNET_PMTUD_SIZE_V4;
overhead_len = KNET_PMTUD_OVERHEAD_V4;
dst_link->last_good_mtu = dst_link->last_ping_size + KNET_PMTUD_OVERHEAD_V6;
overhead_len = KNET_PMTUD_OVERHEAD_V4 + dst_link->proto_overhead;
dst_link->last_good_mtu = dst_link->last_ping_size + overhead_len;
break;
default:
log_debug(knet_h, KNET_SUB_PMTUD_T, "PMTUD aborted, unknown protocol");
Expand Down Expand Up @@ -277,10 +269,10 @@ static int _handle_check_pmtud(knet_handle_t knet_h, struct knet_host *dst_host,

switch (dst_link->dst_addr.ss_family) {
case AF_INET6:
dst_link->status.proto_overhead = KNET_PMTUD_OVERHEAD_V6 + KNET_HEADER_ALL_SIZE + knet_h->sec_header_size;
dst_link->status.proto_overhead = KNET_PMTUD_OVERHEAD_V6 + dst_link->proto_overhead + KNET_HEADER_ALL_SIZE + knet_h->sec_header_size;
break;
case AF_INET:
dst_link->status.proto_overhead = KNET_PMTUD_OVERHEAD_V4 + KNET_HEADER_ALL_SIZE + knet_h->sec_header_size;
dst_link->status.proto_overhead = KNET_PMTUD_OVERHEAD_V4 + dst_link->proto_overhead + KNET_HEADER_ALL_SIZE + knet_h->sec_header_size;
break;
}

Expand Down

0 comments on commit 0bb931a

Please sign in to comment.