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