На виртуальной машине win2k16 я пытаюсь программно установить произвольные значения Dscp с помощью API QoS2.
Роль Qwave (Quality Audio Video Experience устанавливается из диспетчера сервера).
тот же код (см. ниже) - работает на виртуальной машине Windows 10, но не работает на виртуальной машине Windows 2016.Все API возвращают Успех, но значение Dscp устанавливается на «ноль», когда я проверяю wireshark.
Мой код выглядит примерно так:
1. Step 1: LoadLibrary(qwave.dll)
2. Step 2: GetProcAddress - QOSCreateHandle, QOSAddSocketToFlow, QOSSetFlow, QOSRemoveSocketFromFlow, QOSCloseHandle
3. Step 3: Use QWave APIs to set Dscp (code below)
int SetDscpWithQWave(SOCKET fd, // Accepted SOCKET fd
struct sockaddr *remoteAddr,
int dscpValueToSet)
{
Bool ret = FALSE;
QOS_VERSION version;
DWORD priority;
HANDLE qwaveQoSHandle = NULL;
QOS_FLOWID qwaveQoSFlowID = 0;
// Initialize the QoS version parameter
version.MajorVersion = 1;
version.MinorVersion = 0;
ret = qwaveQoSCreateHandleFn(&version, &qwaveQoSHandle);
if (!ret) {
Warning("QOSCreateHandle failed to create handle with error %d\n", GetLastError());
return ret;
}
ret = qwaveQoSAddSocketToFlowFn(qwaveQoSHandle,
fd,
remoteAddr,
QOSTrafficTypeExcellentEffort,
QOS_NON_ADAPTIVE_FLOW,
&qwaveQoSFlowID);
if (!ret) {
Warning("QOSAddSocketToFlow failed to add a flow with error %d\n", GetLastError());
return ret;
}
priority = dscpValueToSet;
ret =qwaveQoSSetFlowFn(qwaveQoSHandle,
qwaveQoSFlowID,
QOSSetOutgoingDSCPValue,
sizeof(priority),
&priority,
0,
NULL);
if (!ret) {
Warning("QOSSetFlow failed to add a flow with error %d\n",
GetLastError());
return ret;
}
return ret;
}
- Этот же код работает наВиртуальная машина Windows 10 - значение Dscp установлено в порядке.
- На виртуальной машине Win2016 - все вызовы API QOS выполняются успешно.Но значение Dscp устанавливается в «ноль», если я проверяю wireshark.
- Вместо загрузки «qwave.dll» - я пытался статически связывать в qwave.lib и вызывать функции QOS * напрямую - не повезло,то же самое наблюдение.
Я что-то упускаю здесь очевидное?
Тот факт, что тот же код работает на виртуальной машине Windows10, но не на виртуальной машине Win2k16, заставляет меня думать, что мне не хватает некоторой конфигурации - ноне удалось найти что-либо в документах MSDN.
Спасибо!