1 /****************************************************************************
2 **+-----------------------------------------------------------------------+**
3 **| |**
4 **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |**
5 **| All rights reserved. |**
6 **| |**
7 **| Redistribution and use in source and binary forms, with or without |**
8 **| modification, are permitted provided that the following conditions |**
9 **| are met: |**
10 **| |**
11 **| * Redistributions of source code must retain the above copyright |**
12 **| notice, this list of conditions and the following disclaimer. |**
13 **| * Redistributions in binary form must reproduce the above copyright |**
14 **| notice, this list of conditions and the following disclaimer in |**
15 **| the documentation and/or other materials provided with the |**
16 **| distribution. |**
17 **| * Neither the name Texas Instruments nor the names of its |**
18 **| contributors may be used to endorse or promote products derived |**
19 **| from this software without specific prior written permission. |**
20 **| |**
21 **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |**
22 **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |**
23 **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
24 **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |**
25 **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
26 **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |**
27 **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
28 **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
29 **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |**
30 **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
31 **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |**
32 **| |**
33 **+-----------------------------------------------------------------------+**
34 ****************************************************************************/
35
36 /*
37 * file osClsfr.c
38 */
39
40 #include "osAdapter.h"
41 #include "srcApi.h"
42
43 #define ETHERNET_HEADER_SIZE 14
44
45 /************************************************************************
46 * os_txClassifier *
47 ************************************************************************
48 DESCRIPTION: the function demonstrate qos classification from UDP port
49 number.
50
51 INPUT: pData - void pointer to Msdu.
52
53 OUTPUT:
54
55 RETURN: OK on success, NOK otherwise
56
57 ************************************************************************/
58
59
os_txClassifier(mem_MSDU_T * pMsdu,UINT8 * pQosClassifierTable)60 TI_STATUS os_txClassifier(mem_MSDU_T *pMsdu,UINT8 *pQosClassifierTable)
61 {
62 UINT8 i;
63 UINT8 *pUdpHeader;
64 UINT8 *pIpHeader;
65 UINT8 ipHeaderLen;
66 UINT16 dstPortNum;
67 UINT32 ipAddr;
68 NWIF_CLSFR_ENTRY *pCt;
69
70 pCt = (NWIF_CLSFR_ENTRY *)pQosClassifierTable;
71 /*pEthHeader = (EthernetHeader_t*)(memMgr_BufData(pMsdu->firstBDPtr)+memMgr_BufOffset(pMsdu->firstBDPtr));*/
72 pIpHeader = (UINT8 *)(memMgr_BufData(pMsdu->firstBDPtr)+memMgr_BufOffset(pMsdu->firstBDPtr)) + ETHERNET_HEADER_SIZE;
73 ipHeaderLen = ((*(unsigned char*)pIpHeader & 0x0f) * 4);
74 pUdpHeader = pIpHeader + ipHeaderLen;
75
76 dstPortNum = *((UINT16 *)(pUdpHeader + 2));
77 ipAddr = *((UINT32 *)(pIpHeader + 16));
78
79 dstPortNum = ((dstPortNum >> 8) | (dstPortNum << 8));
80
81
82 pMsdu->qosTag = 0;
83 for(i = 0; i < NWIF_MAX_QOS_CONNS; i++ )
84 {
85 if ((pCt[i].ip == ipAddr) && (pCt[i].port == dstPortNum) )
86 {
87 pMsdu->qosTag = (UINT8)pCt[i].pri;
88 /*printk(KERN_ALERT "Found classifier match for ip=0x%x, port=%d, prio=%d \n",ipAddr, dstPortNum, pCt[i].pri);*/
89 break;
90 }
91 }
92
93
94 return OK;
95
96 }
97
98 /************************************************************************
99 * os_txSetClassifier *
100 ************************************************************************
101 DESCRIPTION: the function demonstrate setting qos classification table.
102
103 INPUT: pData - void pointer to Msdu.
104
105 OUTPUT:
106
107 RETURN: OK on success, NOK otherwise
108
109 ************************************************************************/
osSend_ConfigTxClassifier(PTIWLN_ADAPTER_T pAdapter,UINT32 bufferLength,UINT8 * pQosClassifierBuffer)110 TI_STATUS osSend_ConfigTxClassifier(PTIWLN_ADAPTER_T pAdapter,UINT32 bufferLength, UINT8 *pQosClassifierBuffer)
111 {
112 NWIF_CLSFR_ENTRY *pSrc, *pDest;
113 UINT8 clsfrIndex;
114 UINT8 NumOfEntries;
115
116 if(bufferLength > NWIF_MAX_QOS_CONNS * sizeof(NWIF_CLSFR_ENTRY))
117 {
118 return NOK;
119 }
120
121 if((pAdapter == NULL) || (pQosClassifierBuffer == NULL))
122 {
123 return NOK;
124 }
125
126 pDest = (NWIF_CLSFR_ENTRY *)(pAdapter->qosClassifierTable);
127 pSrc = (NWIF_CLSFR_ENTRY *)pQosClassifierBuffer;
128
129 NumOfEntries = bufferLength / sizeof(NWIF_CLSFR_ENTRY);
130 for(clsfrIndex = 0; clsfrIndex <NumOfEntries ; clsfrIndex++)
131 {
132 pDest[clsfrIndex].ip = pSrc[clsfrIndex].ip;
133 pDest[clsfrIndex].port = pSrc[clsfrIndex].port;
134 pDest[clsfrIndex].pri = pSrc[clsfrIndex].pri;
135 }
136
137 return OK;
138
139 }
140
141
142
143
144
145