I have a requirement to mark certain traffic originating from some Windows 2003 servers with a certain DSCP value.
Unfortunately in this situation neither marking the traffic on a router or upgrading to Windows 2008 are options that we can take.
I have spent some time with tcmon and tccom and I am so close to getting this working. On a full patched and up to date XP virtual machine, I have figured out how to script TCCOM (used process explorer for the variables and the word 2003 vba object explorer to figure out the api). The script runs on boot and sets up the flows properly without a problem on my XP VM.
But on windows 2003 server, I can not add a flow at all either via a script or using the tcmon gui. It simply says "unknown error" (when scripted it gives the error code 80004005).
I have tried the following to resolve this:
- made sure qos packet scheduler installed
- installed the visual basic runtime sp6
- tried uninstalling/reinstalling tcmon/tccom several times
- tried on several 2003 test servers and virtual machines
- I found this which explains how to write a C program to talk to the traffic control api but that seems like overkill if I can get tccom working. The tcmonlite program on this page doesn't quite do what I need.
Has anyone managed to get tcmon/tccom working on Windows 2003 at all?
For anyone who is interested, here is my script (vbscript) with an example flow (not what I am actually doing). It makes a flow and adds a filter that applies DSCP 32 to traffic from 192.168.10.0/24 going to 192.168.20.0/24 tcp port 80.
option explicit
dim client
set client = wscript.createobject("TrafficControl.Client")
dim sInterface
sInterface = "AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport"
dim ifce
set ifce = getInterface(client,sInterface)
dim flowSpec
set flowSpec = ifce.CreateFlowSpec
dim filterSpec
set filterSpec = ifce.CreateFilterSpec(2)
clearAllFlows client
flowSpec.Parameters("TX_FRIENDLY_NAME") = "From Vbscript"
flowSpec.Parameters("TX_DCLASS") = 40
flowSpec.Parameters("TX_TOKEN_RATE") = -1
flowSpec.Parameters("TX_SERVICE_TYPE") = 1
filterSpec.Parameters("PROTOCOL_ID_MASK") =0
filterSpec.Parameters("PROTOCOL_ID") = 0
filterSpec.Parameters("DEST_PORT_MASK") = 65535
filterSpec.Parameters("SOURCE_PORT_MASK") = 0
filterSpec.Parameters("DEST_PORT") = 80
filterSpec.Parameters("SOURCE_PORT") = 0
filterSpec.Parameters("DEST_ADDRESS_MASK") = "255.255.255.0"
filterSpec.Parameters("SOURCE_ADDRESS_MASK") = "255.255.255.0"
filterSpec.Parameters("DEST_ADDRESS") = "192.168.20.0"
filterSpec.Parameters("SOURCE_ADDRESS") = "192.168.10.0"
dim newFlow
set newFlow = ifce.CreateFlow(flowSpec,1,"Flow obj from vbscript")
newFlow.CreateFilter filterSpec
function getInterface(oClient,sIntName)
dim oInterface
for each oInterface in oClient.interfaces
if oInterface.Name = sIntName then
set getInterface = oInterface
end if
Next
end function
sub clearAllFlows(oClient)
dim oInterface, oFlow
for each oInterface in client.interfaces
for each oFlow in oInterface.flows
oFlow.delete
Next
Next
end sub
0 Answers