pMTU discovery

Bernhard Schmidt berni at birkenwald.de
Thu May 31 05:44:20 EDT 2012


Hi,

we're currently testing OpenConnect 3.20 against our new shiny ASA Beta 
which finally does IPv6 transport. However, when we do use that, we have 
MTU problems on the link. The official AnyConnect client works fine.

In the server side debug we see this for AnyConnect over IPv6:

...input: 'X-CSTP-Base-MTU: 1500'
Processing CSTP header line: 'X-CSTP-Base-MTU: 1500'
webvpn_cstp_parse_request_field()
[...]
webvpn_cstp_parse_request_field()
...input: 'X-CSTP-MTU: 1379'
Processing CSTP header line: 'X-CSTP-MTU: 1379'
webvpn_cstp_parse_request_field()
[...]
Iphdr=40 base-mtu=1500 def-mtu=1500 conf-mtu=1406
tcp-mss = 1380
path-mtu = 1380(mss)
mtu = 1380(path-mtu) - 12(opts) - 5(ssl) - 8(cstp) = 1355
tls-mtu = 1355(mtu) - 20(mac) = 1335
DTLS Block size = 16
mtu = 1500(base-mtu) - 40(ip) - 8(udp) - 13(dtlshdr) - 16(dtlsiv) = 1423
mod-mtu = 1423(mtu) & 0xfff0(complement) = 1408
dtls-mtu = 1408(mod-mtu) - 1(cdtp) - 20(mac) - 1(pad) = 1386
computed tls-mtu=1335 dtls-mtu=1386 conf-mtu=1406
DTLS enabled for intf=4 (Public)
tls-mtu=1335 dtls-mtu=1386
[...]
Sending X-CSTP-MTU: 1335
Sending X-DTLS-MTU: 1386

And for AnyConnect over IPv4:

...input: 'X-CSTP-MTU: 1399'
Processing CSTP header line: 'X-CSTP-MTU: 1399'
webvpn_cstp_parse_request_field()
...input: 'X-CSTP-Base-MTU: 1500'
Processing CSTP header line: 'X-CSTP-Base-MTU: 1500'
webvpn_cstp_parse_request_field()

[...]
Iphdr=20 base-mtu=1500 def-mtu=1500 conf-mtu=1406
tcp-mss = 1380
path-mtu = 1380(mss)
mtu = 1380(path-mtu) - 12(opts) - 5(ssl) - 8(cstp) = 1355
tls-mtu = 1355(mtu) - 20(mac) = 1335
DTLS Block size = 16
mtu = 1500(base-mtu) - 20(ip) - 8(udp) - 13(dtlshdr) - 16(dtlsiv) = 1443
mod-mtu = 1443(mtu) & 0xfff0(complement) = 1440
dtls-mtu = 1440(mod-mtu) - 1(cdtp) - 20(mac) - 1(pad) = 1418
computed tls-mtu=1335 dtls-mtu=1418 conf-mtu=1406
DTLS enabled for intf=4 (Public)
tls-mtu=1335 dtls-mtu=1418
[...]
Sending X-CSTP-MTU: 1335
Sending X-DTLS-MTU: 1418



But OpenConnect (regardless of IPv4 or IPv6)

...input: 'X-CSTP-MTU: 1406'
Processing CSTP header line: 'X-CSTP-MTU: 1406'
webvpn_cstp_parse_request_field()
[...]
Computing the legacy svc_mtu
Default svc_mtu=1406
tls-mtu=1406 dtls-mtu=0
Legacy mode so default dtls mtu to tls mtu
[...]
Sending X-CSTP-MTU: 1406



a) I'm assuming the ASA is calculating this from the Base-MTU, which is 
a field openconnect is not sending. We haven't tried this on 
MTU-challenged paths yet, is AnyConnect just guessing or actively 
measuring this?

b) Does anyone have more details? Might sending Base-MTU additionally be 
enough?

Thanks,
Bernhard



More information about the openconnect-devel mailing list