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

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

?? spantask.c

?? 基于vxworks操作系統(tǒng),Tornado2.0平臺(tái),生成樹STP源碼.直接在其對(duì)應(yīng)的設(shè)備中添加即可.
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
/* spanTask.c - Spanning Tree task code */

/* Copyright 2001 Wind River Systems, Inc. */
/* Copyright 1998-2000 Wind River Systems, Inc. */
/* Copyright 1999 Wind River Systems, Inc. */
/* Copyright 1998-1999 XACT, Inc. */

#include "copyright_wrs.h"
 
/*
Modification history
--------------------
01v,07feb02,kw  Added support for muxError() return calls.
01u,18apr01,kc  Replaced "extern" with "IMPORT".
01t,16apr01,kc  Fixed PR #2175, changed spanInit() to return OK/ERROR (was TRUE/FALSE).
01s,12feb01,rkw PR #2045
01r,22feb01,kw  Must validate the values to the STP formalus and accept what
                the root bridge is telling us for timer values.
01q,22feb01,kw  Do not check the STP version on recevied packets.
01p,10dec00,ajw Changes to comments for refgen web pages
01o,07Dec00,ba  protocol_enable is set by calling oemArchIfaceSTPEnable.
01n,16nov00,kw  Ran thru lint.
01m,06nov00,kw  Removed a unused value 'state' in Recv Task.
01l,09oct00,kw  netTupleGet called with invalid argument.
01k,25sep00,kw  Make sure the port_info[x].designated_root is inited to 
                a large value so that any other stp will win. This appeared
                in the bcm5600 switch because memory was zeroed.
01j,25sep00,kw  Changed Identifer from long long to a structure for
                Little Endian issues.
01j,24sep00,kw  Make sure the Bridge Priority value is in correct byte order.
01i,24sep00,kw  Fixed up the comments for the muxTkSend calls.
01h,07sep00,kw  Remove the Swapi headers for rfc1493 header file.
01g,30jul00,kw  Minor code clean up, have the stpTimerTask exit after 25 errors.
01f,26jul00,kw  Convert from zero index base scalars to 1 based index.
01e,26Mar00,kw  Now uses the agEnd device.
01d,09Mas99,kp  Fixed a PR#1154 Throw away config BPDU also when its ID is not 0
01c,21Sep99,kw  Fixed a PR#854 Not able to send packets.
01b,17Sep99,kw  Added the support for BL2 PR#713
01a,09Sep99,kw  Changed TX/RX processing for port number PR#793
*/

/*
DESCRIPTION
The routines in this midule are used to port Spanning Tree Algorithm and 
Protocol.  
Edit this file when porting Spanning Tree to another platform.
*/


/*lint -save -e773 */
/* includes */
#include <stp/types.h>

#include <msgQLib.h>
#include <end.h>
#include <muxLib.h>
#include <muxTkLib.h>
#include <netBufLib.h>
#include <errnoLib.h>
#include <drv/timer/timerDev.h>
#include <stp/llcLib.h>
#include <ioctl.h>

#include <stp/spantree.h>
#include <stp/spanglob.h>

#include <apcfg.h>
#include <wlanproto.h>
#include <vxdrv.h>
/*lint -restore */

/* defines */
#define FORCE_PRIORITY_ZERO 0
#define SPAN_BUFSIZ         128

#define glong(l) ( (((uchar_t *)(l))[0] << 24) | \
                   (((uchar_t *)(l))[1] << 16) | \
                   (((uchar_t *)(l))[2] << 8 ) | \
                   ((uchar_t *)(l))[3] )

#define slong(l,v) { ((uchar_t *)(l))[0] = (uchar_t)((ulong_t)(v)>>24); \
                     ((uchar_t *)(l))[1] = (uchar_t)((ulong_t)(v)>>16); \
                     ((uchar_t *)(l))[2] = (uchar_t)((ulong_t)(v)>>8);  \
                     ((uchar_t *)(l))[3] = (uchar_t)((ulong_t)(v)); }

#define gshort(s)  (ushort_t)( (((uchar_t *)(s))[0] << 8) | \
                      ((uchar_t *)(s))[1])

#define sshort(s,v) { ((uchar_t *)(s))[0] = (uchar_t)((v)>>8); \
                      ((uchar_t *)(s))[1] = (uchar_t)(v); }


#define SPAN_MSG_COUNT      128

#define SPAN_ON                     0xfefefefe
#define SPAN_OFF                    0xfdfdfdfd
#define SPAN_TIMER_TICK             0xfcfcfcfc
#define SPAN_RX_BPDU                0xfbfbfbfb
#define SPAN_PORT_ENABLE            0xfafafafa
#define SPAN_PORT_DISABLE           0xf9f9f9f9
#define SPAN_PROTO_ENABLE           0xf8f8f8f8
#define SPAN_PROTO_DISABLE          0xf7f7f7f7
#define SPAN_PRIO_CHANGE            0xf6f6f6f6
#define SPAN_PORT_PRIO_CHANGE       0xf5f5f5f5
#define SPAN_UPDATE_BRIDGE          0xf4f4f4f4
#define SPAN_PORT_PATH_COST_CHANGE  0xf3f3f3f3
#define AE_DEVICE_NAME "ae"
#define AE_DEVICE_UNIT 1
/* typedefs */

typedef struct {
    void        * pCookie;      /* The MUX Bind ID. */
    ulong_t       qtag;
    uchar_t       mac[6];       /* MAC address  */
    ushort_t      filler;
} muxInfo_t;

typedef struct
{
    Boolean     spanInitialized;
    Boolean     spanState;
    ulong_t     numPorts;
    NET_POOL_ID pNetPool;       /* Pool structure pointer. */
    CL_POOL_ID  pClPoolId;      /* Pool structure pointer. */
    Identifier  bridge_id;
    muxInfo_t   * muxInfo;
    char        * portBitList;
} SPAN_DRV_CTRL;

typedef struct
{
    ulong_t   code;
    void* data;
    ulong_t   extra;
} span_msg_t;

/********* DEBUG MACROS *********/

#define dbgEnable
#ifdef  dbgEnable

#define STP_DEBUG_OFF	0x0000
#define STP_DEBUG_LINK	0x0001
#define STP_RXPDU		0x0002
#define STP_TXPDU		0x0004
#define STP_PORT_STATE  0x0008
#define STP_RX_SIGNAL   0x0010
#define STP_AG_WARNING  0x0020

int stpDebug = STP_DEBUG_OFF;
#define dbgPrintf(lvl, _x) if (lvl & stpDebug) {printf _x;}

#else /* dbgEnable */
#define dbgPrintf(lvl, _x)
#endif /* dbgEnable */

/* forward declarations */

LOCAL BOOL spanRecv(void *pCookie, long type, M_BLK_ID pMblk, LL_HDR_INFO *	pLinkHdrInfo, void *pSpare);
LOCAL void spanErrorRtn(END_OBJ* pEnd, END_ERR* pError, void * pSpare);
LOCAL BOOL spanTxShutdownRtn(void * pCookie, void * pSpare);
LOCAL BOOL spanTxRestartRtn(void * pCookie, void * pSpare);

LOCAL STATUS  stpTimerTask(char * appName, void * arg1, void * arg2);
LOCAL STATUS  stpRecvTask(char * appName, void * arg1, void * arg2);
LOCAL void span_process(Bpdu_header_t * bpdu, ulong_t port);

STATUS No_of_ports;

/* globals */

#undef DEBUGGER_SYNC
#ifdef DEBUGGER_SYNC
SEM_ID span_debug_sync_sem;
#endif

LOCAL SEM_ID span_task_sem;

LOCAL Config_bpdu     span_Config_bpdu;
LOCAL Tcn_bpdu        span_Tcn_bpdu;
LOCAL void    * Span_Queue;
LOCAL SPAN_DRV_CTRL * SpanDrvCtrl;

/* network buffers configuration */

LOCAL M_CL_CONFIG spanMclConfig =
{                               /* mBlk configuration table */
    0, 0, NULL, 0
};

LOCAL CL_DESC spanClDescTbl[] =
{                               /* network cluster pool configuration table */
    /* 
     * clusterSize      num             memArea         memSize
     * -----------      ----            -------         -------
     */
    {SPAN_BUFSIZ, 0, NULL, 0}
};

LOCAL int    spanClDescTblNumEnt = (NELEMENTS(spanClDescTbl));

/* locals */

LOCAL char*  span_errmsg = "%s:%d Allocation Error\n";

char deviceName[22][4];  /*aaaa*/
int portNum[22];
int totalPort;
int bStpInit;
/*******************************************************************************
*
* stpQSend - 
*
* DESCRIPTION
*
* RETURNS
*   
* NOMANUAL
*/
LOCAL STATUS stpQSend
    (
    ulong_t code,
    void * data,
    ulong_t extra
    )
{
    span_msg_t  Message;

    if ( Span_Queue ) {
        Message.code    = code;
        Message.data    = data;
        Message.extra   = extra;
        return msgQSend(Span_Queue,
                    (void *) &Message, sizeof(span_msg_t),
                    NO_WAIT, MSG_PRI_NORMAL);
    }

    return ERROR;
}
  
/*******************************************************************************
* stpInit  - Spanning Tree: Startup, Initialization, etc.
*
* This routine initializes and starts SPAN
*
* INPUTS:
*
* RETURNS:
*
* ERRORS:
*
* ERRNO:
*
* NOMANUAL <this will be removed later>
*/
STATUS stpInit
    (
    char    * appName,
    void    * arg1,
    void    * arg2
    )
{
    END_OBJ * pEndObj;
    void    * pCookie;
    char      tName[16];
    ulong_t   port;
    int  i;

  	for(i = 0; i < MAX_REMOTE_WBR; i++) {    
    		WLAN_MACADDR  rAp;   
		WLAN_MACADDR    defaultRemoteWbrMacAddr = DEFAULT_REMOTE_AP_MACADDR;

        	apCfgRemoteWbrMacAddrGet(1, i, &rAp);
        	if (!A_MACADDR_COMP(&defaultRemoteWbrMacAddr, &rAp))
            		break;

 		totalPort++;
		portNum[totalPort]=0x10000+totalPort;
		memcpy(&deviceName[totalPort][0],"vp\0",3);
    	}

	memcpy(&deviceName[0][0],"ae\0",3);
	portNum[0]=1;
	totalPort++;
	bStpInit=1;

    SpanDrvCtrl = (SPAN_DRV_CTRL *) calloc(1, sizeof(SPAN_DRV_CTRL));
    if (!SpanDrvCtrl)
    {
        logMsg("SPAN could not allocate control structure.\n", 1, 2, 3, 4, 5, 6);
        return ERROR;
    }

    SpanDrvCtrl->numPorts = totalPort;

    No_of_ports = totalPort;

    /* PortFast/UplinkFast init */

    stPortFastInit();
    stUplinkFastInit();

    SpanDrvCtrl->muxInfo =
        (muxInfo_t *)calloc( SpanDrvCtrl->numPorts+1, sizeof(muxInfo_t) );
    if ( SpanDrvCtrl->muxInfo == NULL )
    {
        logMsg("calloc failed for muxInfo.\n",
               1, 2, 3, 4, 5, 6);
        cfree( (char *)SpanDrvCtrl );
        SpanDrvCtrl = NULL;
        return ERROR;
    }

    SpanDrvCtrl->muxInfo->filler = 0;

    if ( muxTkDrvCheck(AE_DEVICE_NAME) != 0 )
    {
        logMsg("Not an END Driver %s%d.\n",
               (int)AE_DEVICE_NAME, AE_DEVICE_UNIT, 3, 4, 5, 6);
        return ERROR;
    }

    pEndObj = endFindByName(AE_DEVICE_NAME, AE_DEVICE_UNIT);
    if (!pEndObj)
    {
        perror("spanTask: endFindByname Failed");
        cfree( (char *)SpanDrvCtrl->muxInfo );
        cfree( (char *)SpanDrvCtrl );
        SpanDrvCtrl = NULL;
        return ERROR;
    }
  
    /* Bind to sw0 driver, to get the base Bridge MAC address. */
    pCookie = (void *) muxBind( AE_DEVICE_NAME, AE_DEVICE_UNIT,
                NULL, NULL, NULL, NULL,
                STP_ETHER_TYPE, "STP802.1D", (void *) 0);

    if (!pCookie)
    {
        perror("spanTask: muxTkBind Failed");
        cfree( (char *)SpanDrvCtrl->muxInfo );
        cfree( (char *)SpanDrvCtrl );
        return ERROR;
    }
  
    /*
     * Retrive the MAC address for this device from swEnd device.
     * The Bridge priority value will be retrived later.
     */
    memset( (char *)&SpanDrvCtrl->bridge_id, 0, sizeof(Identifier) );

    muxIoctl( pCookie, EIOCGADDR, (caddr_t)SpanDrvCtrl->bridge_id.mac );

    /* Close binding to swEnd device. */
    muxUnbind( pCookie, STP_ETHER_TYPE, NULL );
             
    if (muxTkDrvCheck(AE_DEVICE_NAME) != 0)
    {
        perror("spanTask: Device is not an END driver");
        cfree( (char *)SpanDrvCtrl->muxInfo );
        cfree( (char *)SpanDrvCtrl );
        return ERROR;
    }

    if (muxTkDrvCheck("vp") != 0)
    {
        perror("spanTask: Device is not an END driver");
        cfree( (char *)SpanDrvCtrl->muxInfo );
        cfree( (char *)SpanDrvCtrl );
        return ERROR;
    }
 
    /* Allocate the SPAN data space. */
    if (!port_info)
    {
        int port_cnt;

        port_cnt = (int)(SpanDrvCtrl->numPorts + 1);

        port_info = (Port_data *) calloc((unsigned int)port_cnt, sizeof(Port_data));
        if (!port_info)
            printf(span_errmsg, __FILE__, __LINE__);

        config_bpdu = (Config_bpdu *) calloc((unsigned int)port_cnt, sizeof(Config_bpdu));
        if (!config_bpdu)
            printf(span_errmsg, __FILE__, __LINE__);

        tcn_bpdu = (Tcn_bpdu *) calloc((unsigned int)port_cnt, sizeof(Tcn_bpdu));
        if (!tcn_bpdu)
            printf(span_errmsg, __FILE__, __LINE__);

        message_age_timer = (Timer *) calloc((unsigned int)port_cnt, sizeof(Timer));
        if (!message_age_timer)
            printf(span_errmsg, __FILE__, __LINE__);

        forward_delay_timer = (Timer *) calloc((unsigned int)port_cnt, sizeof(Timer));
        if (!forward_delay_timer)
            printf(span_errmsg, __FILE__, __LINE__);

        hold_timer = (Timer *) calloc((unsigned int)port_cnt, sizeof(Timer));
        if (!hold_timer)
            printf(span_errmsg, __FILE__, __LINE__);
    }

    for(port = One; port <= SpanDrvCtrl->numPorts; port++)
    {  
        pEndObj = endFindByName(&(deviceName[port-1][0]), portNum[port-1]);
        if (!pEndObj)
        {
            perror("spanTask: endFindByName failed for 'ae' drivers");
            cfree( (char *)SpanDrvCtrl->muxInfo );
            cfree( (char *)SpanDrvCtrl );
            return ERROR;
        }
 
        /* Bind to the END driver. */
        SpanDrvCtrl->muxInfo[port].pCookie =
            (void *) muxBind( &(deviceName[port-1][0]), portNum[port-1],
                    spanRecv, spanTxShutdownRtn, spanTxRestartRtn, spanErrorRtn,
                    STP_ETHER_TYPE, "STP802.1D/D17", (void *)&port_info[port]);

        if (!SpanDrvCtrl->muxInfo[port].pCookie)
        {
            perror("spanTask: muxTkBind failed for 'ae' drivers");
            cfree( (char *)SpanDrvCtrl->muxInfo );
            cfree( (char *)SpanDrvCtrl );
            return ERROR;
        }

        /* Retrieve the MAC address from agN device. */
        muxIoctl( SpanDrvCtrl->muxInfo[port].pCookie, EIOCGADDR,
                (caddr_t)SpanDrvCtrl->muxInfo[port].mac );

        /* Get QTag Size. 
        muxIoctl( SpanDrvCtrl->muxInfo[port].pCookie, EIOCGQTAG,
                (char *)&SpanDrvCtrl->muxInfo[port].qtag );*/

        /* Leave the agN binding open, do not close */
    }
  
    if ((SpanDrvCtrl->pNetPool = calloc(1, sizeof(NET_POOL))) == NULL)
    {
        perror("spanTask: Could not allocate NetPool structure");
        cfree( (char *)SpanDrvCtrl->muxInfo );
        cfree( (char *)SpanDrvCtrl );
        return ERROR;
    }

    SpanDrvCtrl->spanInitialized = False;
    SpanDrvCtrl->spanState = False;

    spanClDescTbl[0].clNum = (int)(SpanDrvCtrl->numPorts + 4);
    spanMclConfig.mBlkNum = spanClDescTbl[0].clNum;
    spanMclConfig.clBlkNum = spanClDescTbl[0].clNum;

    spanMclConfig.memSize = (int)(
         ((unsigned int)spanMclConfig.mBlkNum * (MSIZE + sizeof(long))) +
         ((unsigned int)spanMclConfig.clBlkNum * (CL_BLK_SZ + sizeof(long))));

    spanMclConfig.memArea = (char *) memalign(sizeof(long),
                                          (unsigned int)spanMclConfig.memSize);
    if (spanMclConfig.memArea == NULL)
    {
        cfree( (char *)SpanDrvCtrl->pNetPool );
        cfree( (char *)SpanDrvCtrl->muxInfo );
        cfree( (char *)SpanDrvCtrl );
        return ERROR;
    }

    /*lint -save -e737 -e713 */
    spanClDescTbl[0].memSize =
        (spanClDescTbl[0].clNum * (SPAN_BUFSIZ + 8)) + sizeof(int);
    /*lint -restore */
 
    spanClDescTbl[0].memArea =
        (char *) cacheDmaMalloc((unsigned int)spanClDescTbl[0].memSize);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情文学综合网| 国产在线视频不卡二| 欧美精品一区二区蜜臀亚洲| av一二三不卡影片| 欧美a级理论片| 亚洲女人的天堂| 欧美精品一区二区三区视频| 在线视频综合导航| 成人午夜看片网址| 韩国精品主播一区二区在线观看| 一区二区三区欧美激情| 国产女人18水真多18精品一级做| 欧美区视频在线观看| 不卡的av电影在线观看| 精品一区二区三区在线播放| 亚洲成人免费看| 亚洲精品日韩综合观看成人91| 国产亚洲欧美日韩日本| 91精品国产品国语在线不卡| 欧美在线影院一区二区| 99久久婷婷国产综合精品电影| 国产一区二区三区电影在线观看| 日韩成人精品在线| 亚洲国产日韩在线一区模特| 国产精品色婷婷| 国产丝袜欧美中文另类| 久久尤物电影视频在线观看| 91精品国产综合久久久蜜臀图片 | 亚洲国产成人高清精品| 1000部国产精品成人观看| 国产日韩av一区二区| 久久亚洲二区三区| 久久综合久久鬼色中文字| 日韩欧美国产综合| 精品女同一区二区| 日韩精品一区二区三区老鸭窝| 欧美一区二区在线免费播放| 欧美精品少妇一区二区三区| 欧美三级视频在线观看| 欧美视频中文一区二区三区在线观看| 色94色欧美sute亚洲线路二| 色综合天天综合狠狠| 91亚洲大成网污www| 成人av资源站| 91视频国产资源| 在线精品国精品国产尤物884a| 色拍拍在线精品视频8848| 91高清视频免费看| 欧美日韩在线播放一区| 91精品欧美一区二区三区综合在| 欧美一区欧美二区| 亚洲精品在线一区二区| 久久久久一区二区三区四区| 国产欧美日韩亚州综合| 国产精品区一区二区三| 亚洲欧美国产77777| 亚洲777理论| 日韩av中文在线观看| 韩国女主播成人在线| 懂色av一区二区三区蜜臀| 97久久精品人人澡人人爽| 在线观看亚洲专区| 91精品国产色综合久久| 久久综合色之久久综合| 中文字幕高清一区| 夜夜精品视频一区二区| 日本系列欧美系列| 国产精品乡下勾搭老头1| 91麻豆国产精品久久| 欧美日韩精品一二三区| 久久综合久久久久88| 亚洲日本va午夜在线电影| 无码av中文一区二区三区桃花岛| 日本成人在线网站| 国产电影一区在线| 欧美在线一区二区| 亚洲精品在线三区| 亚洲精选一二三| 麻豆国产一区二区| 成人sese在线| 91精品国产一区二区| 国产精品蜜臀av| 日本视频一区二区| 91在线视频免费91| 日韩亚洲国产中文字幕欧美| 亚洲国产电影在线观看| 视频在线在亚洲| 成人免费精品视频| 欧美一区二区精美| 亚洲视频一区二区在线观看| 麻豆91精品91久久久的内涵| 白白色亚洲国产精品| 日韩一区二区在线看| 亚洲激情校园春色| 狠狠色综合色综合网络| 欧美午夜精品久久久久久超碰 | 久久精子c满五个校花| 亚洲国产综合色| 国产成人激情av| 777xxx欧美| 亚洲综合精品久久| 成人手机电影网| 久久综合一区二区| 日韩福利电影在线| 91久久国产最好的精华液| 久久精品视频一区二区三区| 五月天激情综合| 91黄色免费网站| 国产精品女上位| 国产精品一区在线观看乱码 | 日韩精品一区二区在线| 一区二区高清免费观看影视大全 | 欧美va亚洲va| 日韩高清不卡在线| 91热门视频在线观看| 中文字幕免费观看一区| 美国欧美日韩国产在线播放| 欧美日韩一区二区在线观看| 亚洲精品综合在线| 91亚洲资源网| 国产精品国产自产拍在线| 国产成人日日夜夜| 久久久久久影视| 国产一区二区三区免费| 精品国产一区二区在线观看| 日本中文字幕一区二区视频 | 欧美国产精品久久| 韩国av一区二区三区在线观看| 91精品久久久久久久91蜜桃| 天天色综合天天| 欧美日韩国产免费一区二区| 夜夜嗨av一区二区三区中文字幕| 99久久99久久精品免费看蜜桃| 国产精品日日摸夜夜摸av| 大桥未久av一区二区三区中文| 国产日韩欧美不卡在线| 国产麻豆精品久久一二三| 精品少妇一区二区| 国产一区日韩二区欧美三区| 精品sm捆绑视频| 国产风韵犹存在线视精品| 久久久久久久久岛国免费| 国产精品自拍av| 国产日韩欧美激情| gogo大胆日本视频一区| 亚洲精品乱码久久久久久黑人| 91福利在线导航| 天堂资源在线中文精品| 欧美精品日韩精品| 麻豆freexxxx性91精品| 国产亚洲综合av| 91视频在线看| 亚洲成av人片www| 日韩免费高清电影| 国产成人免费网站| 自拍偷拍亚洲激情| 欧美精三区欧美精三区| 久久99精品久久久久久国产越南| 欧美精品一区男女天堂| www.欧美亚洲| 亚洲一级不卡视频| 欧美不卡一二三| 不卡欧美aaaaa| 无吗不卡中文字幕| 久久久精品综合| 色94色欧美sute亚洲线路一ni| 丝袜国产日韩另类美女| 精品国产百合女同互慰| 波多野结衣中文字幕一区| 亚洲黄色尤物视频| 日韩精品中文字幕一区| 成人福利视频网站| 日韩综合小视频| 久久久99久久| 欧美日韩美少妇| 国产九九视频一区二区三区| 樱桃国产成人精品视频| 日韩一卡二卡三卡四卡| 国产91富婆露脸刺激对白| 亚洲午夜精品网| 国产亚洲女人久久久久毛片| 欧美特级限制片免费在线观看| 精品综合免费视频观看| 亚洲女子a中天字幕| 精品欧美一区二区久久 | 91在线云播放| 美女视频免费一区| 亚洲免费视频中文字幕| 精品国产免费人成在线观看| 欧美中文字幕一区二区三区| 国产乱色国产精品免费视频| 亚洲成人自拍网| 欧美国产日韩精品免费观看| 欧美精品一级二级| 93久久精品日日躁夜夜躁欧美| 精品一区二区三区在线播放视频| 一区二区三区精品视频| 欧美国产精品v| 精品国产1区二区| 欧美精品在线一区二区三区|