コード例 #1
0
ファイル: Runtime.hpp プロジェクト: jondo/pureImage
/*inline*/ Arguments Runtime::CopyArguments (
    const Arguments& src,
    const pI_bool copy_data /*= pI_TRUE*/) const
{

    Arguments retval;

    for (pI_size lv = 0; lv < src.size(); ++lv) {
        retval.push_back (CopyArgument (src[lv], copy_data));
    }

    return retval;
} // Arguments Runtime::CopyArguments (...) const
コード例 #2
0
BOOLEAN CopyArgumentGroup(_Out_ OVS_ARGUMENT_GROUP* pDest, _In_ const OVS_ARGUMENT_GROUP* pSource, UINT16 argsMore)
{
    OVS_CHECK(pDest);
    OVS_CHECK(pSource);

    AllocateArgumentsToGroup(pSource->count + argsMore, pDest);

    pDest->count = pSource->count + argsMore;
    pDest->groupSize = pSource->groupSize;

    for (UINT i = 0; i < pSource->count; ++i)
    {
        if (!CopyArgument(pDest->args + i, pSource->args + i))
        {
            return FALSE;
        }
    }

    return TRUE;
}
コード例 #3
0
static OVS_ARGUMENT* _CreateSetActionArg(const OVS_ARGUMENT* pArgument)
{
    const OVS_ARGUMENT_GROUP* pGroupArg = NULL;
    OVS_ARGTYPE argType = OVS_ARGTYPE_INVALID;

    OVS_CHECK(IsArgTypeGroup(pArgument->type));
    pGroupArg = pArgument->data;

    OVS_CHECK(pGroupArg->count == 1);
    pArgument = pGroupArg->args;
    argType = pArgument->type;

    switch (argType)
    {
    case OVS_ARGTYPE_PI_IPV4_TUNNEL:
    {
        OVS_ARGUMENT* pArg = _CreateIpv4TunnelGroup(pArgument->data);
        return pArg;
    }
        break;

    default:
    {
        OVS_ARGUMENT* pPacketInfoArg = KZAlloc(sizeof(OVS_ARGUMENT));
        if (!pPacketInfoArg)
        {
            DEBUGP(LOG_ERROR, "could not alloc key arg\n");
            return NULL;
        }

        CopyArgument(pPacketInfoArg, pArgument);

        return pPacketInfoArg;
    }
        break;
    }
}
コード例 #4
0
static BOOLEAN _CreateActionsArgsToList(const OVS_ARGUMENT_GROUP* pArgGroup, OVS_ARGUMENT_SLIST_ENTRY** ppArgList)
{
    BOOLEAN ok = TRUE;

    for (UINT i = 0; i < pArgGroup->count; ++i)
    {
        const OVS_ARGUMENT* pArg = pArgGroup->args + i;
        OVS_ARGTYPE argType = pArg->type;

        switch (argType)
        {
        case OVS_ARGTYPE_ACTION_SETINFO_GROUP:
        {
            OVS_ARGUMENT_GROUP* pSetGroup = NULL;
            OVS_ARGUMENT* pPacketInfoArg = NULL, *pSetArg = NULL;

            pPacketInfoArg = _CreateSetActionArg(pArg);
            if (!pPacketInfoArg)
            {
                return FALSE;
            }

            pSetGroup = KZAlloc(sizeof(OVS_ARGUMENT_GROUP));
            if (!pSetGroup)
            {
                return FALSE;
            }

            pSetGroup->args = pPacketInfoArg;
            pSetGroup->count = 1;
            pSetGroup->groupSize = pPacketInfoArg->length + OVS_ARGUMENT_HEADER_SIZE;

            pSetArg = KZAlloc(sizeof(OVS_ARGUMENT));
            pSetArg->data = pSetGroup;
            pSetArg->type = OVS_ARGTYPE_ACTION_SETINFO_GROUP;
            pSetArg->length = pSetGroup->groupSize + OVS_ARGUMENT_GROUP_HEADER_SIZE;

            if (!AppendArgumentToList(pSetArg, ppArgList))
            {
                return FALSE;
            }
        }
            break;

        case OVS_ARGTYPE_ACTION_SAMPLE_GROUP:
            ok = _SampleActionToList(pArg->data, ppArgList);
            if (!ok)
            {
                return FALSE;
            }

            break;

        case OVS_ARGTYPE_ACTION_UPCALL_GROUP:
        {
            OVS_ARGUMENT_GROUP* pUpcallGroup = NULL;
            OVS_ARGUMENT* pUpcallArg = NULL;
            BOOLEAN ok = TRUE;

            pUpcallGroup = KZAlloc(sizeof(OVS_ARGUMENT_GROUP));
            if (NULL == pUpcallGroup)
            {
                return FALSE;
            }

            ok = CopyArgumentGroup(pUpcallGroup, pArg->data, /*actionsToAdd*/0);
            if (!ok)
            {
                DestroyArgumentGroup(pUpcallGroup);
                return FALSE;
            }

            pUpcallArg = CreateArgumentFromGroup(argType, pUpcallGroup);

            if (!AppendArgumentToList(pUpcallArg, ppArgList))
            {
                return FALSE;
            }
        }
            break;

        default:
        {
            OVS_ARGUMENT* pDestArg = KAlloc(sizeof(OVS_ARGUMENT));
            if (!pDestArg)
            {
                return FALSE;
            }

            CopyArgument(pDestArg, pArg);

            if (!AppendArgumentToList(pDestArg, ppArgList))
            {
                return FALSE;
            }
        }
            break;
        }
    }

    return TRUE;
}