亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? zl5011xpacketloopback.c

?? Zalink50114----TDMoIP芯片驅(qū)動(dòng)源碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
         /* the header for the loopback Tx has now been set, so mark the
            context as in use to prevent it from being changed */
         zl5011xParams->wanIf.plaCurrent.context[context].state = ZL5011X_STATE_INIT;
      }
   }

   /* free up the memory allocated for the headers */
   if (layer2and3Header != NULL)
   {
      free(layer2and3Header);
   }

   return(status);
}

/******************************************************************************

 Function:
   zl5011xLoopbackUpdateIPChecksum

 Description:
   In IPv4 mode, the checksum needs to be presented to the device, based on the
   length and the identification fields being zero for the partial checksum.
   This function, amends the checksum based on these fields being zero.

 Inputs:
    layer2and3Header  Pointer to the zl5011xLanTxSetLayer2and3HeaderS structure.
    par               Pointer to the zl5011xPacketLoopbackConfigS structure.

 Outputs:
    None

 Returns:
    zlStatusE

 Remarks:
   The PTX uses the length field from a seperate register in the control
   header. The value in the header itself is as set by the calling function
   - and as used for calculating the checksum. So, change this field to
   zero and re-calculate the checksum.

******************************************************************************/

zlStatusE zl5011xLoopbackUpdateIPChecksum(zl5011xLanTxSetLayer2and3HeaderS *layer2and3Header,
      zl5011xPacketLoopbackConfigS * par)
{
   zlStatusE status = ZL5011X_OK;
   Uint16T chkChange;
   Uint8T tempArray[2];

   ZL5011X_TRACE(ZL5011X_INIT_FN_ID,
         "zl5011xLoopbackUpdateIPChecksum:",
         0, 0, 0, 0, 0, 0);

   chkChange = 0;

   if (status == ZL5011X_OK)
   {
      /* change the length field to 0 */
      status = zl5011xPacketChangeField(layer2and3Header->header.txLowData,
            layer2and3Header->header.layer3LengthPos,
            0, 0xffff, &chkChange);
   }

   if (status == ZL5011X_OK)
   {
      /* extract the identification fields, so that they can be reset to 0 for
         the purpose of the checksum */
      tempArray[0] = layer2and3Header->header.txLowData[layer2and3Header->header.layer3LengthPos +
            (ZL5011X_PKT_IPV4_IDENT_POS - ZL5011X_PKT_IPV4_LEN_POS)];
      tempArray[1] = layer2and3Header->header.txLowData[layer2and3Header->header.layer3LengthPos +
            (ZL5011X_PKT_IPV4_IDENT_POS - ZL5011X_PKT_IPV4_LEN_POS) + 1];

      /* change the identification field to 0 */
      status = zl5011xPacketChangeField(tempArray, 0, 0, 0xffff, &chkChange);
   }

   /* update the IPv4 checksum in the header */
   if (status == ZL5011X_OK)
   {
      status = zl5011xPacketUpdateChecksum(layer2and3Header->header.txLowData,
            layer2and3Header->header.layer3ChecksumPos, chkChange);
   }

   /* invert the checksum in the header as required for the partial checksum */
   if (status == ZL5011X_OK)
   {
      status = zl5011xPacketInvertChecksum(layer2and3Header->header.txLowData,
            layer2and3Header->header.layer3ChecksumPos);
   }

   return(status);
}

/******************************************************************************

 Function:
    zl5011xLoopbackCopyHeaders

 Description:
    The primary intention of this function is to copy the header arrays across
    from the array passed in, to the low headers as required to program
    the device.

 Inputs:
    layer2and3Header  Pointer to the zl5011xLanTxSetLayer2and3HeaderS structure.
    par               Pointer to the zl5011xPacketLoopbackConfigS structure.

 Outputs:
    None

 Returns:
    zlStatusE

 Remarks:

******************************************************************************/

zlStatusE zl5011xLoopbackCopyHeaders(zl5011xLanTxSetLayer2and3HeaderS *layer2and3Header,
      zl5011xPacketLoopbackConfigS * par)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T n;

   ZL5011X_TRACE(ZL5011X_INIT_FN_ID,
         "zl5011xLoopbackCopyHeaders:",
         0, 0, 0, 0, 0, 0);

   for (n = 0; n < layer2and3Header->header.txLowLength; n++)
   {
      layer2and3Header->header.txLowData[n] = par->header[n];
   }

   return(status);
}

/******************************************************************************

 Function:
    zl5011xPacketRxLoopback

 Description:
    Sets up the packet Rx for unmatched packets.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   matchedProtocol   enable loopback for packets passing the protocol match, but
                  failing to be classified.
   unmatchedProtocol enable loopback for packets not passing the protocol match

 Outputs:
   None

 Returns:
    zlStatusE

 Remarks:

******************************************************************************/

zlStatusE zl5011xPacketRxLoopback(zl5011xParamsS *zl5011xParams,
      zl5011xPacketLoopbackConfigS *par, zl5011xBooleanE unmatchedProtocol)
{
   zlStatusE status = ZL5011X_OK;
   zl5011xLanRxSetProtocolMatchS protocolMatch;
   zl5011xLanRxSetContextMatchS contextMatch;
   Uint32T matchNum;

   ZL5011X_TRACE(ZL5011X_INIT_FN_ID,
         "zl5011xPacketRxLoopback: unmatched %d",
         unmatchedProtocol, 0, 0, 0, 0, 0);

   /* initialise the context match settings */
   status = zl5011xLanRxSetContextMatchStructInit(zl5011xParams, &contextMatch);

   if (status == ZL5011X_OK)
   {
      if (par->protocolType == ZL5011X_LOOPBACK_ETHERNET)
      {
         contextMatch.output.classifyHeaderOffset = ZL5011X_PKT_ETHERNET_HDR_LEN - ZL5011X_PKT_ETHERTYPE_LEN;
      }

      contextMatch.output.classifyFlow = ZL5011X_FLOW_PKT_PKT;
      contextMatch.output.classifyMpid = ZL5011X_LOOPBACK_CONTEXT_NUMBER;
      contextMatch.output.classifyLengthFromPacket = ZL5011X_TRUE;
   }

   if (unmatchedProtocol == ZL5011X_TRUE)
   {
      /* setup a classification entry for the last protocol match */
      matchNum = ZL5011X_PKC_NUM_CLASSIFY_ENTRIES - 1;
      contextMatch.match.protocolMatchNum = ZL5011X_PKC_NUM_PROTOCOL_ENTRIES - 1;

      if (status == ZL5011X_OK)
      {
         /* reserve the classification entry - to mark it as in use */
         status = zl5011xPkcClassifyGetFreeEntry(zl5011xParams, &matchNum);
      }

      if (status == ZL5011X_OK)
      {
         status = zl5011xPkcClassifySetContextMatch(zl5011xParams, ZL5011X_LOOPBACK_CONTEXT_NUMBER,
               matchNum, &contextMatch.match, &contextMatch.output);
      }

      /* setup the last protocol match, in order to match any packets that do not
         match any of the other protocol entries, to allow them to be sent back
         out of the packet Tx */

      if (status == ZL5011X_OK)
      {
         matchNum = ZL5011X_PKC_NUM_PROTOCOL_ENTRIES - 1;
         status = zl5011xPkcProtocolGetFreeEntry(zl5011xParams, &matchNum);
      }

      if (status == ZL5011X_OK)
      {
         /* set up defaults for the protocol match settings */
         status = zl5011xLanRxSetProtocolMatchStructInit(zl5011xParams, &protocolMatch);
      }

      if (status == ZL5011X_OK)
      {
         protocolMatch.output.discardUdpCheckFails = ZL5011X_FALSE;
         protocolMatch.output.protocolIpv4 = ZL5011X_FALSE;

         status = zl5011xPkcProtocolSetMatch(zl5011xParams, ZL5011X_PKC_NUM_PROTOCOL_ENTRIES - 1,
               &protocolMatch.match, &protocolMatch.output);
      }

      if (status == ZL5011X_OK)
      {
         status = zl5011xPkcProtocolEnableEntry(zl5011xParams, ZL5011X_PKC_NUM_PROTOCOL_ENTRIES - 1);
      }
   }

   return(status);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久这里只有精品首页| 日韩一卡二卡三卡四卡| 色欧美88888久久久久久影院| 成人精品免费视频| 欧美精品成人一区二区三区四区| 欧美国产成人精品| 亚洲一区影音先锋| 国产成a人亚洲精| 欧美日韩日日骚| 国产精品丝袜久久久久久app| 一区二区三区丝袜| 成人性生交大片| 欧美一区二区三区人| 国产精品国产三级国产aⅴ入口 | 亚洲综合丁香婷婷六月香| 毛片一区二区三区| 欧美亚洲国产怡红院影院| 久久美女高清视频| 婷婷成人综合网| 99精品欧美一区| 久久久久国色av免费看影院| 午夜日韩在线电影| 91国产免费看| 一区二区三区欧美日韩| 成人av影视在线观看| 欧美tk丨vk视频| 欧美96一区二区免费视频| 欧美日本精品一区二区三区| 一区二区三区精品视频| 色8久久人人97超碰香蕉987| 亚洲综合色婷婷| 91福利在线免费观看| 亚洲欧美欧美一区二区三区| 91一区在线观看| 亚洲一区二区欧美激情| 久久精品在线免费观看| 蜜臀99久久精品久久久久久软件| 欧美一级免费大片| 国产精品一区二区你懂的| 日韩午夜在线播放| 国产精品一区三区| 国产女主播一区| 99re这里只有精品首页| 亚洲你懂的在线视频| 欧美性xxxxxxxx| 日本不卡1234视频| 亚洲精品一区二区三区福利| 播五月开心婷婷综合| 性做久久久久久久免费看| 26uuu亚洲综合色| 91丨porny丨在线| 秋霞电影网一区二区| 中文字幕一区不卡| 精品99999| 欧美三级一区二区| 国产成人精品一区二区三区四区| 一区二区三区电影在线播| 久久久噜噜噜久噜久久综合| 欧美午夜一区二区三区免费大片| 久久aⅴ国产欧美74aaa| 另类小说视频一区二区| 视频一区视频二区中文字幕| 国产精品网曝门| 国产欧美一区二区精品性色超碰| 欧美男生操女生| 欧美日韩综合不卡| 欧美日韩三级视频| 日本久久一区二区三区| 99久久99久久久精品齐齐| 夫妻av一区二区| 极品少妇一区二区三区精品视频| 亚洲成人免费看| 天堂蜜桃91精品| 亚洲成人你懂的| 亚洲国产综合91精品麻豆| 亚洲综合男人的天堂| 亚洲自拍欧美精品| 香蕉乱码成人久久天堂爱免费| 亚洲高清视频中文字幕| 日韩激情视频网站| 狠狠久久亚洲欧美| 不卡的av电影在线观看| 一本色道久久综合精品竹菊| 欧美视频在线播放| 91麻豆精品国产91久久久资源速度| 欧美一二三在线| 国产日韩欧美亚洲| 伊人色综合久久天天人手人婷| 午夜精品爽啪视频| 国产高清亚洲一区| 在线观看91视频| 国产三级欧美三级日产三级99| 亚洲情趣在线观看| 久久99久久久久| www.亚洲色图.com| 日韩欧美一级二级三级久久久| 国产精品蜜臀在线观看| 亚洲成人777| 91丝袜美腿高跟国产极品老师| 欧美高清www午色夜在线视频| 国产精品毛片大码女人| 日韩av一二三| 欧美写真视频网站| 亚洲色图20p| 99精品久久99久久久久| 亚洲精品在线三区| 亚洲午夜久久久久久久久电影网| 成人免费视频视频在线观看免费 | 亚洲综合av网| 99精品欧美一区二区三区综合在线| 欧美日韩精品欧美日韩精品一综合| 国产精品无圣光一区二区| 免费不卡在线视频| 欧美日韩电影一区| 亚洲一区二区三区四区中文字幕| 成人在线视频首页| 国产婷婷一区二区| 国产精品66部| 国产精品久久久久一区二区三区| 日本不卡高清视频| 欧美精品三级在线观看| 亚洲高清不卡在线| 欧美裸体bbwbbwbbw| 视频一区在线播放| 日韩丝袜美女视频| 国产麻豆欧美日韩一区| 久久久久久久久久久电影| 国产在线精品免费av| 国产精品色呦呦| 欧美影视一区二区三区| 偷拍日韩校园综合在线| 日韩精品一区二区在线| 国产精品中文字幕一区二区三区| 亚洲国产成人一区二区三区| 色成人在线视频| 美国欧美日韩国产在线播放| 欧美精品一区二区三区蜜桃| 国产福利一区二区三区视频| 国产区在线观看成人精品| 91在线精品一区二区三区| 亚洲精品成人少妇| 欧美美女视频在线观看| 国产精品白丝av| 亚洲高清免费视频| 久久午夜免费电影| 欧美日韩精品高清| 成人av在线观| 国产99久久久国产精品潘金| 亚洲一区二区三区四区五区中文 | 美女性感视频久久| 亚洲国产视频a| 亚洲欧美偷拍另类a∨色屁股| 精品美女一区二区| 欧美日韩国产色站一区二区三区| 成人性色生活片免费看爆迷你毛片| 午夜视频久久久久久| 亚洲精品国产精品乱码不99| 2023国产精品自拍| 欧美一区二区视频在线观看2020 | 国产精品美女www爽爽爽| 欧美一区三区二区| 日韩一二三区视频| 欧美日韩精品一二三区| 在线看一区二区| 欧美日韩一区不卡| 欧美日韩免费高清一区色橹橹| 91在线观看高清| 在线一区二区三区做爰视频网站| 99久久精品国产一区| 在线观看一区日韩| 色嗨嗨av一区二区三区| 欧美在线小视频| 777奇米成人网| 精品国产精品网麻豆系列| 精品国产一二三区| 国产精品伦理一区二区| 一区二区三区小说| 亚洲综合久久久| 久久精品国产99国产精品| 激情五月播播久久久精品| 成人涩涩免费视频| 欧美日韩亚洲综合在线| 精品国产在天天线2019| 一区二区三区在线视频观看58| 亚洲电影一区二区| 国产在线乱码一区二区三区| 99久久精品国产观看| 欧美一区二区三区电影| 中文字幕巨乱亚洲| 麻豆成人91精品二区三区| 99re这里都是精品| 日韩欧美激情一区| 亚洲亚洲人成综合网络| 成人动漫中文字幕| 欧美va亚洲va香蕉在线| 亚洲丝袜制服诱惑| 国产成人免费视频网站| 日韩一区二区三区四区| 亚洲男同1069视频| www.欧美色图|