/*++

Copyright (c) 1998  Microsoft Corporation

Module Name:

    qos.c

Abstract:

    IP QOS Command dispatcher.

Revision History:

--*/

#include "precomp.h"

#pragma hdrstop

//
// Declare and Init Global Variables for QOS Extension
//

#ifdef ALLOW_CHILD_HELPERS
PIP_CONTEXT_TABLE_ENTRY g_QosContextTable  = NULL;
DWORD                   g_dwNumQosContexts = 0;
#endif

//
// The table of Add, Delete, Set, Show Commands for QOS
//

//
// The commands are prefix-matched with the command-line, in sequential
// order. So a command like 'ADD INTERFACE FLOW' must come before
// the command 'ADD INTERFACE' in the table.
//

CMD_ENTRY  g_QosAddCmdTable[] = {
/* CREATE_CMD_ENTRY(QOS_ADD_FILTER_TO_FLOW, HandleQosAttachFilterToFlow),*/
    CREATE_CMD_ENTRY(QOS_ADD_QOSOBJECT_ON_FLOW, HandleQosAddQosObjectOnIfFlow),
    CREATE_CMD_ENTRY(QOS_ADD_FLOWSPEC_ON_FLOW, HandleQosAddFlowspecOnIfFlow),
    CREATE_CMD_ENTRY(QOS_ADD_FLOW_ON_IF, HandleQosAddFlowOnIf),
    CREATE_CMD_ENTRY(QOS_ADD_IF, HandleQosAddIf),
    CREATE_CMD_ENTRY(QOS_ADD_DSRULE, HandleQosAddDsRule),
    CREATE_CMD_ENTRY(QOS_ADD_SDMODE, HandleQosAddSdMode),
    CREATE_CMD_ENTRY(QOS_ADD_FLOWSPEC, HandleQosAddFlowspec),
#ifdef ALLOW_CHILD_HELPERS
    CREATE_CMD_ENTRY(ADD_HELPER, HandleQosAddHelper),
#endif
};

CMD_ENTRY  g_QosDelCmdTable[] = {
/* CREATE_CMD_ENTRY(QOS_DEL_FILTER_FROM_FLOW, HandleQosDetachFilterFromFlow),*/
    CREATE_CMD_ENTRY(QOS_DEL_QOSOBJECT_ON_FLOW, HandleQosDelQosObjectOnIfFlow),
    CREATE_CMD_ENTRY(QOS_DEL_FLOWSPEC_ON_FLOW, HandleQosDelFlowspecOnIfFlow),
    CREATE_CMD_ENTRY(QOS_DEL_FLOW_ON_IF, HandleQosDelFlowOnIf),
    CREATE_CMD_ENTRY(QOS_DEL_IF, HandleQosDelIf),
    CREATE_CMD_ENTRY(QOS_DEL_DSRULE, HandleQosDelDsRule),
    CREATE_CMD_ENTRY(QOS_DEL_SDMODE, HandleQosDelQosObject),
    CREATE_CMD_ENTRY(QOS_DEL_QOSOBJECT, HandleQosDelQosObject),
    CREATE_CMD_ENTRY(QOS_DEL_FLOWSPEC, HandleQosDelFlowspec),
#ifdef ALLOW_CHILD_HELPERS
    CREATE_CMD_ENTRY(DEL_HELPER, HandleQosDelHelper),
#endif
};

CMD_ENTRY  g_QosSetCmdTable[] = {
/* CREATE_CMD_ENTRY(QOS_SET_FILTER_ON_FLOW, HandleQosModifyFilterOnFlow),*/
/* CREATE_CMD_ENTRY(QOS_SET_IF, HandleQosSetIf), */
   CREATE_CMD_ENTRY(QOS_SET_GLOBAL, HandleQosSetGlobal)
};

CMD_ENTRY  g_QosShowCmdTable[] = {
/* CREATE_CMD_ENTRY(QOS_SHOW_FILTER_ON_FLOW, HandleQosShowFilterOnFlow),*/
    CREATE_CMD_ENTRY(QOS_SHOW_FLOW_ON_IF, HandleQosShowFlowOnIf),
    CREATE_CMD_ENTRY(QOS_SHOW_IF, HandleQosShowIf),
    CREATE_CMD_ENTRY(QOS_SHOW_DSMAP, HandleQosShowDsMap),
    CREATE_CMD_ENTRY(QOS_SHOW_SDMODE, HandleQosShowSdMode),
    CREATE_CMD_ENTRY(QOS_SHOW_QOSOBJECT, HandleQosShowQosObject),
    CREATE_CMD_ENTRY(QOS_SHOW_FLOWSPEC, HandleQosShowFlowspec),
    CREATE_CMD_ENTRY(QOS_SHOW_GLOBAL, HandleQosShowGlobal),
#ifdef ALLOW_CHILD_HELPERS
    CREATE_CMD_ENTRY(SHOW_HELPER, HandleQosShowHelper),
#endif
};

CMD_GROUP_ENTRY g_QosCmdGroups[] = 
{
    CREATE_CMD_GROUP_ENTRY(GROUP_ADD, g_QosAddCmdTable),
    CREATE_CMD_GROUP_ENTRY(GROUP_DELETE, g_QosDelCmdTable),
    CREATE_CMD_GROUP_ENTRY(GROUP_SET, g_QosSetCmdTable),
    CREATE_CMD_GROUP_ENTRY(GROUP_SHOW, g_QosShowCmdTable),
};

ULONG   g_ulQosNumGroups = sizeof(g_QosCmdGroups)/sizeof(CMD_GROUP_ENTRY);

CMD_ENTRY g_QosCmds[] =
{
    CREATE_CMD_ENTRY(INSTALL, HandleQosInstall),
    CREATE_CMD_ENTRY(UNINSTALL, HandleQosUninstall),
};

ULONG g_ulQosNumTopCmds = sizeof(g_QosCmds)/sizeof(CMD_ENTRY);