- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
What I really want is my actual bandwidth available, taking into account any limit imposed through the Mobile Bandwidth Module (or programmatically). I thought that the problem might be that I had no limits set, but even after setting a limit the same problem persists.
Thanks!
-Arian
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If you can post a small re-producer/code segment by which you are trying to achieve this, we will be happy toforwardit to our technical team for further analysis.
Lexi S.
IntelSoftware NetworkSupport
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
CapabilityClass myCapabilities = new CapabilityClass();
BandwidthInstance myBandwidth;
...
myBandwidth = (BandwidthInstance)myCapabilities.GetInstance("Bandwidth");
...
Console.WriteLine(myBandwidth.LimitRx.GetValue());
This causes the aforementioned exception to occur.
As for your other statement, "you can limit your own application bandwidth, but not someone else's" I'm a bit confused. It appears that this is exactly what is done by the Mobile Bandwidth Module. This tool (included with the SDK) allows you set limits on applications, processes, and sessions. Obviously these are not all owned by the same process, so how is this possible?
Regardless though, my main point is to be able to read my effective allowed bandwidth taking into account limits (whether imposed by the same application or by the included SDK tool).
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The comment about setting bandwidth limits for applications is from within the code (i.e. using BandwidthInstance APIs and properties). In this case you cannot restrict someone else's bandwidth from within your application programmatically.
To see if there are any limits imposed onyour application, you can first call 'LimitedTx/LimitedRx' and if this is true, then call 'LimitTx/LimitRx'. To get transmit/receive rate for calling process,you can use 'RateRx/RateTx'.
Lexi S.
IntelSoftware NetworkSupport
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
double rx, tx;
if (myBandwidth.LimitedRx.GetValue())
{
rx = (double)1000 * myBandwidth.LimitRx.GetValue();
}
else rx = (double)1000 * myBandwidth.SystemRateRx.GetValue();
if (myBandwidth.LimitedTx.GetValue())
{
tx = (double)1000 * myBandwidth.LimitTx.GetValue();
}
else tx = (double)1000 * myBandwidth.SystemRateTx.GetValue();
When I run this code, CIntelMobileException: "Failure Getting Value" on the LimitedRx property. It turns out that the property is null (IsNull returns true). This complicates the code then by needing to check for IsNull each time.
The thing is, I *have* set a limit for the app in the Mobile Bandwidth Module application. It just doesn't seem to see it.
Thanks for your help so far!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Name: LimitRx, Null: True, Value: [null]
Name: LimitedRx, Null: True, Value: [null]
Name: PercentRx, Null: True, Value: [null]
Name: RateRx, Null: True, Value: [null]
Name: SystemRateRx, Null: False, Value: 1000000
Name: TheoreticalSystemRateRx, Null: False, Value: 1000000
I don't know if this helps or not, but I'm just confused as to all of the null properties, even with bandwidth limits in place. I have a Gigabit Ethernet adapter (virtual, within VMWare) setup. I have system limits and app-level limits applied. The limits definitely slow down Internet Explorer, so I know that the limits take effect.
Thanks again!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
First a note, the product has not been validated on Windows Server nor when running under VMWare. It has been validated on Windows XP. The differences in the OS and the runtime environment may be causing the NULL values.
Can you provide source code that demonstrates the output you posted? Another thing to try is to send some data over the socket you created and then run the test.
Thanks,
Lester Memmott
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
As for Server 2003 vs. XP, and VMWare vs. physical machine, I can give that a try and I'll update again. As I said though, the Mobile Bandwidth Module application seems to have no trouble running in this environment, and the limits affect Internet Explorer properly. It's just the SDK calls in the C# app that have the problem. Other than the MTA change, are there any other application settings to take into account?
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Also, I'm confused about some of the properties:
1. How is TheoreticalSystemRate different from SystemRate? Both seem to report max rate based on adapter speed (not throttled system rate set in Mobile Bandwidth Module).
2. Do I need to set the LimitedRx/Tx flag to true when I set LimitRx/Tx?
3. Does Adaptive make sense when you can just set a percentage? How would an adaptive percentage even make sense?
4. If I set both PercentRx and LimitRx, which takes precedence? (maybe that's where the Adaptive flag fits in...)
Thanks so much!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Console.WriteLine("Before PercentRx = " + (myBandwidth.PercentRx.IsNull() ? -1 : (int)myBandwidth.PercentRx.GetValue()));
// Set the initial values properly, or default to 0
brf.AllowedRx = myBandwidth.PercentRx.IsNull() ? 0 : (int)myBandwidth.PercentRx.GetValue();
if (brf.ShowDialog() == DialogResult.OK)
{
// Set the limit percentages
myBandwidth.PercentRx.SetValue((float)brf.AllowedRx );
Console.WriteLine("After PercentRx = " + (myBandwidth.PercentRx.IsNull() ? -1 : (int)myBandwidth.PercentRx.GetValue()));
}
I'm confused on several fronts. I feel like I must just not be understanding some fundamental concept at work here. For one thing, limits seem overly complicated. How do I just determine my current allowed bandwidth? Do I need to take into account LimitedRx, LimitRx, PercentRx, Adaptive, and TheoreticalSystemRateRx (and then again for Tx)?
Adaptive seems to make little sense. If I set a percentage, what does adaptive mean? It will already be a changing limit based on current speed. Wouldn't it make more sense to set a percentage?
I'm also confused about actual system bandwidth. I have a Gigabit Ethernet adapter and a wireless adapter. Even though the Gigabit adapter has no wire in it and I have an active wireless connection, my SystemRate and TheoreticalSystemRate both return numbers reflecting the disconnected Gigabit link.
Finally, if I set a limit in the Mobile Bandwidth Module tool, shouldn't the application be able to read that in the BandwidthInstance properties at runtime?
So, my problems are:
1) PercentRx/Tx doesn't stick
1.1) When must I set LimitedRx to true? How about Adaptive?
2) System rate seems to include disconnected adapters
3) Not clear how to get numeric system bandwidth, taking into account limits which may or may not be set
4) Limits set in SDK tool not reflected at runtime of app
Thanks!
-Arian
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm surprised by the need to do a download before a limit change is applied. In general I've seen cases where an initial data transfer needs to be made before the bandwidth control subsystem knows it is there and can have limits set on it. Once the first data transfer is done, limit changes should happen without any more data transfer to make them effective.
Regarding the other items:
1. How is TheoreticalSystemRate different from SystemRate? Both seem to report max rate based on adapter speed (not throttled system rate set in Mobile Bandwidth Module).
Answer: TheoreticalSystemRate is intended to show what the maximum bandwidth would be if all network adapters were used at the same time at their best throughput. If you only have one network adapter on your system currently active, this value would be the same as SystemRate
2. Do I need to set the LimitedRx/Tx flag to true when I set LimitRx/Tx?
Answer: Yes. The LimitedRx/Tx flag is effectively a way of turning limits on and off without having to reset the value of the limit.
3. Does Adaptive make sense when you can just set a percentage? How would an adaptive percentage even make sense?
Answer: In the current implementation we decided to separate out the following two concepts: 1) The limit value. 2)Whether it adjusts with link speed changes or not. For the first, you can set the value using the absolute value or using a percent-based value. Either way, it is represented underneath as an absolute value in the bandwidth control subsystem. For the second part, the limit value will adjust with link speed changes if it is made to be "adaptive". Use the Adaptive property to do it for the whole process or use the SetSessionAdaptive() to make it adaptive for just an individual socket.
4. If I set both PercentRx and LimitRx, which takes precedence? (maybe that's where the Adaptive flag fits in...)
Answer: Which ever you called last. They both set an absolute value in the bandwidth control subsystem.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
1) If I set limits in the Mobile Bandwidth Module, shouldn't those limits be reflected when I query the Limit properties in the app?
1.1) If I set a limit in that tool and in my code, is it last one wins, or does the SDK tool take precedence?
2) What's the recommended method of getting actual available bandwidth? It seems pretty complicated as I understand it. It seems that I must first check LimitRx/Tx, then either LimitedRx/Tx or TheoreticalSystemRateRx/Tx. This still doesn't take into account a 256kbps internet connection through a 100Mbps LAN adapter. Am I making it harder than it needs to be?
Thanks!
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page