]>
git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - drivers/staging/otus/wrap_pkt.c
2 * Copyright (c) 2007-2008 Atheros Communications Inc.
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 /* Module Name : wrap_pkt.c */
20 /* This module contains wrapper functions for packet handling */
23 /* Platform dependent. */
25 /************************************************************************/
30 #include <linux/netlink.h>
31 #include <linux/gfp.h>
32 #include <net/iw_handler.h>
35 /* extern struct zsWdsStruct wds[ZM_WDS_PORT_NUMBER]; */
36 extern struct zsVapStruct vap
[ZM_VAP_PORT_NUMBER
];
40 void zfLnxRecv80211(zdev_t
*dev
, zbuf_t
*buf
, struct zsAdditionInfo
*addInfo
)
46 struct usbdrv_private
*macp
= dev
->ml_priv
;
48 /* frameCtrl = zmw_buf_readb(dev, buf, 0); */
49 frameCtrl
= *(u8_t
*)((u8_t
*)buf
->data
);
50 frameType
= frameCtrl
& 0xf;
51 frameSubtype
= frameCtrl
& 0xf0;
53 if ((frameType
== 0x0) && (macp
->forwardMgmt
)) {
54 switch (frameSubtype
) {
59 skb1
= skb_copy(buf
, GFP_ATOMIC
);
62 skb_reset_mac_header(skb1
);
63 skb1
->ip_summed
= CHECKSUM_NONE
;
64 skb1
->pkt_type
= PACKET_OTHERHOST
;
66 skb1
->protocol
= __constant_htons(0x0019);
75 zfiRecv80211(dev
, buf
, addInfo
);
79 #define ZM_AVOID_UDP_LARGE_PACKET_FAIL
80 void zfLnxRecvEth(zdev_t
*dev
, zbuf_t
*buf
, u16_t port
)
82 struct usbdrv_private
*macp
= dev
->ml_priv
;
83 #ifdef ZM_AVOID_UDP_LARGE_PACKET_FAIL
86 /* new_buf = dev_alloc_skb(2048); */
87 new_buf
= dev_alloc_skb(buf
->len
);
89 skb_reset_tail_pointer(new_buf
);
91 skb_put(new_buf
, buf
->len
);
92 memcpy(new_buf
->data
, buf
->data
, buf
->len
);
95 dev_kfree_skb_any(buf
);
99 new_buf
->protocol
= eth_type_trans(new_buf
, dev
);
102 if (vap
[0].dev
!= NULL
) {
103 new_buf
->dev
= vap
[0].dev
;
104 new_buf
->protocol
= eth_type_trans(new_buf
, vap
[0].dev
);
107 new_buf
->protocol
= eth_type_trans(new_buf
, dev
);
111 new_buf
->ip_summed
= CHECKSUM_NONE
;
112 dev
->last_rx
= jiffies
;
114 switch (netif_rx(new_buf
))
118 buf
->protocol
= eth_type_trans(buf
, dev
);
121 if (vap
[0].dev
!= NULL
) {
122 buf
->dev
= vap
[0].dev
;
123 buf
->protocol
= eth_type_trans(buf
, vap
[0].dev
);
126 buf
->protocol
= eth_type_trans(buf
, dev
);
130 buf
->ip_summed
= CHECKSUM_NONE
;
131 dev
->last_rx
= jiffies
;
133 switch (netif_rx(buf
))
139 macp
->drv_stats
.net_stats
.rx_packets
++;
140 macp
->drv_stats
.net_stats
.rx_bytes
+= buf
->len
;
147 /* Leave an empty line below to remove warning message on some compiler */