NDIS: Dynamically changing the MTU size

Hi

I am currently working on a NDIS driver where I need to dynamically change
the MTU size based on current network conditions. Are there any suggestions
out there on the best way to achieve this? (I don’t want to do the
segmentation myself, as the IP stack is more than capable of doing it for
me)

I look forward to any help that can be offered!

Mark


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Mark,
I looked at this some time back.
The problem seemed to be that the protocol stacks assume that the
MTU is an invariant property of the adapter. i.e. They query the MTU
once at first load and assume that it never changes thereafter.

You could experiment with NdisMIndicateStatus, to see if you can
coerce the protocols into re-reading the MTU, but there may be
hard coded assumptions in them, and I’d bet on you not getting
the same response from all protocols, or even from the same
protocols on different windows versions. (And what works on
Windows will probably not work on Linux or Beos, etc)

Another possibility would be to advertise your minimal MTU to the
protocols, and combine any pending to the same destination into one
larger frame if conditions are suitable. This is not as bad as it
seems, as you will probably only combine when the network is busy
(and frames are hanging about waiting to be sent) so you get the
benefit when you most need it. Of course, you then need to unpack
them when they arrive, which is what you wanted to avoid in the
first place…

Regards,
Evan

-----Original Message-----
From: Mark Riley [mailto:xxxxx@NSINE.com]
Sent: 27 June 2001 10:26
To: NT Developers Interest List
Subject: [ntdev] NDIS: Dynamically changing the MTU size

Hi

I am currently working on a NDIS driver where I need to dynamically change
the MTU size based on current network conditions. Are there any suggestions
out there on the best way to achieve this? (I don’t want to do the
segmentation myself, as the IP stack is more than capable of doing it for
me)

I look forward to any help that can be offered!

Mark


You are currently subscribed to ntdev as: xxxxx@eicon.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Mark,

what Evan wrote is right and what you want isn’t easy. If you’re concerned
only on IP, try to read RFC about PMTU protocol. I already forgot details
and RFC number but it might help. NT IP stack supports it if not disabled
(some registry value). Other possibility is to configure given IP adapter
using IOCTLs. I can’t recall if MTU can be set this way. It is probably
un(der)documented, try to examine all DDK headers named tdi*.h.

Best regards,

Michal Vodicka
Veridicom
(RKK - Skytale)
[WWW: http://www.veridicom.com , http://www.skytale.com]


From: Mark Riley[SMTP:xxxxx@NSINE.com]
Reply To: NT Developers Interest List
Sent: Wednesday, June 27, 2001 11:25 AM
To: NT Developers Interest List
Subject: [ntdev] NDIS: Dynamically changing the MTU size

Hi

I am currently working on a NDIS driver where I need to dynamically change
the MTU size based on current network conditions. Are there any
suggestions
out there on the best way to achieve this? (I don’t want to do the
segmentation myself, as the IP stack is more than capable of doing it for
me)

I look forward to any help that can be offered!

Mark


You are currently subscribed to ntdev as: xxxxx@rkk.cz
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Hi Evan

yes, I think you’ve confirmed my worst fears - particularly since different
nodes will require different MTUs. Therefore assuming that the ip stack can
cope with this by some gentle coercion does seem to be a little optimistic.
However, your suggested technique of advertising a minimal MTU to the upper
protocols, followed by combination where necessary, does seem a viable,
albeit fiddly, solution.

thanks for your help

Mark

-----Original Message-----
From: Evan Lloyd [mailto:xxxxx@eicon.com]
Sent: 27 June 2001 17:20
To: NT Developers Interest List
Subject: [ntdev] RE: NDIS: Dynamically changing the MTU size

Mark,
I looked at this some time back.
The problem seemed to be that the protocol stacks assume that the
MTU is an invariant property of the adapter. i.e. They query the MTU
once at first load and assume that it never changes thereafter.

You could experiment with NdisMIndicateStatus, to see if you can
coerce the protocols into re-reading the MTU, but there may be
hard coded assumptions in them, and I’d bet on you not getting
the same response from all protocols, or even from the same
protocols on different windows versions. (And what works on
Windows will probably not work on Linux or Beos, etc)

Another possibility would be to advertise your minimal MTU to the
protocols, and combine any pending to the same destination into one
larger frame if conditions are suitable. This is not as bad as it
seems, as you will probably only combine when the network is busy
(and frames are hanging about waiting to be sent) so you get the
benefit when you most need it. Of course, you then need to unpack
them when they arrive, which is what you wanted to avoid in the
first place…

Regards,
Evan

-----Original Message-----
From: Mark Riley [mailto:xxxxx@NSINE.com]
Sent: 27 June 2001 10:26
To: NT Developers Interest List
Subject: [ntdev] NDIS: Dynamically changing the MTU size

Hi

I am currently working on a NDIS driver where I need to dynamically change
the MTU size based on current network conditions. Are there any suggestions
out there on the best way to achieve this? (I don’t want to do the
segmentation myself, as the IP stack is more than capable of doing it for
me)

I look forward to any help that can be offered!

Mark


You are currently subscribed to ntdev as: xxxxx@eicon.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: xxxxx@nsine.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com