aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/bcm
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2010-11-01 09:53:58 -0400
committerStephen Hemminger <stephen.hemminger@vyatta.com>2010-11-01 09:53:58 -0400
commit7441698fe9eb0eb473cf1699d9cd8dd06dfeaf77 (patch)
tree75f6f04d2779d4900d3d02317c64c088a729268b /drivers/staging/bcm
parent6ba8fe77ddd3a25daa8409333295b90c26a43bae (diff)
beceem: remove ARP spoofing
Linux support NOARP flag, so the whole Arp spoofing routines are not needed. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Diffstat (limited to 'drivers/staging/bcm')
-rw-r--r--drivers/staging/bcm/Arp.c94
-rw-r--r--drivers/staging/bcm/Bcmnet.c3
-rw-r--r--drivers/staging/bcm/Makefile2
-rw-r--r--drivers/staging/bcm/Transmit.c15
4 files changed, 7 insertions, 107 deletions
diff --git a/drivers/staging/bcm/Arp.c b/drivers/staging/bcm/Arp.c
deleted file mode 100644
index 7cb25b30b5c..00000000000
--- a/drivers/staging/bcm/Arp.c
+++ /dev/null
@@ -1,94 +0,0 @@
1
2/*
3 * File Name: Arp.c
4 * Abstract: This file contains the routines for handling ARP PACKETS
5 */
6#include "headers.h"
7#define ARP_PKT_SIZE 60
8
9/* =========================================================================
10 * Function - reply_to_arp_request()
11 *
12 * Description - When this host tries to broadcast ARP request packet through
13 * the virtual interface (veth0), reply directly to upper layer.
14 * This function allocates a new skb for ARP reply packet,
15 * fills in the fields of the packet and then sends it to
16 * upper layer.
17 *
18 * Parameters - skb: Pointer to sk_buff structure of the ARP request pkt.
19 *
20 * Returns - None
21 * =========================================================================*/
22
23VOID
24reply_to_arp_request(struct sk_buff *skb)
25{
26 PMINI_ADAPTER Adapter;
27 struct ArpHeader *pArpHdr = NULL;
28 struct ethhdr *pethhdr = NULL;
29 UCHAR uiIPHdr[4];
30 /* Check for valid skb */
31 if(skb == NULL)
32 {
33 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0, "Invalid skb: Cannot reply to ARP request\n");
34 return;
35 }
36
37
38 Adapter = GET_BCM_ADAPTER(skb->dev);
39 /* Print the ARP Request Packet */
40 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, ARP_RESP, DBG_LVL_ALL, "ARP Packet Dump :");
41 BCM_DEBUG_PRINT_BUFFER(Adapter,DBG_TYPE_TX, ARP_RESP, DBG_LVL_ALL, (PUCHAR)(skb->data), skb->len);
42
43 /*
44 * Extract the Ethernet Header and Arp Payload including Header
45 */
46 pethhdr = (struct ethhdr *)skb->data;
47 pArpHdr = (struct ArpHeader *)(skb->data+ETH_HLEN);
48
49 if(Adapter->bETHCSEnabled)
50 {
51 if(memcmp(pethhdr->h_source, Adapter->dev->dev_addr, ETH_ALEN))
52 {
53 dev_kfree_skb(skb);
54 return;
55 }
56 }
57
58 // Set the Ethernet Header First.
59 memcpy(pethhdr->h_dest, pethhdr->h_source, ETH_ALEN);
60 if(!memcmp(pethhdr->h_source, Adapter->dev->dev_addr, ETH_ALEN))
61 {
62 pethhdr->h_source[5]++;
63 }
64
65 /* Set the reply to ARP Reply */
66 pArpHdr->arp.ar_op = ntohs(ARPOP_REPLY);
67
68 /* Set the HW Address properly */
69 memcpy(pArpHdr->ar_sha, pethhdr->h_source, ETH_ALEN);
70 memcpy(pArpHdr->ar_tha, pethhdr->h_dest, ETH_ALEN);
71
72 // Swapping the IP Adddress
73 memcpy(uiIPHdr,pArpHdr->ar_sip,4);
74 memcpy(pArpHdr->ar_sip,pArpHdr->ar_tip,4);
75 memcpy(pArpHdr->ar_tip,uiIPHdr,4);
76
77 /* Print the ARP Reply Packet */
78
79 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, ARP_RESP, DBG_LVL_ALL, "ARP REPLY PACKET: ");
80
81 /* Send the Packet to upper layer */
82 BCM_DEBUG_PRINT_BUFFER(Adapter,DBG_TYPE_TX, ARP_RESP, DBG_LVL_ALL, (PUCHAR)(skb->data), skb->len);
83
84 skb->protocol = eth_type_trans(skb,skb->dev);
85 skb->pkt_type = PACKET_HOST;
86
87// skb->mac.raw=skb->data+LEADER_SIZE;
88 skb_set_mac_header (skb, LEADER_SIZE);
89 netif_rx(skb);
90 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, ARP_RESP, DBG_LVL_ALL, "<=============\n");
91 return;
92}
93
94
diff --git a/drivers/staging/bcm/Bcmnet.c b/drivers/staging/bcm/Bcmnet.c
index 1f35cd3c287..908711d0447 100644
--- a/drivers/staging/bcm/Bcmnet.c
+++ b/drivers/staging/bcm/Bcmnet.c
@@ -124,6 +124,9 @@ int register_networkdev(PMINI_ADAPTER Adapter)
124 net->ethtool_ops = &bcm_ethtool_ops; 124 net->ethtool_ops = &bcm_ethtool_ops;
125 net->mtu = MTU_SIZE; /* 1400 Bytes */ 125 net->mtu = MTU_SIZE; /* 1400 Bytes */
126 net->tx_queue_len = TX_QLEN; 126 net->tx_queue_len = TX_QLEN;
127 net->flags |= IFF_NOARP;
128 net->flags &= ~(IFF_BROADCAST|IFF_MULTICAST);
129
127 netif_carrier_off(net); 130 netif_carrier_off(net);
128 131
129 SET_NETDEV_DEVTYPE(net, &wimax_type); 132 SET_NETDEV_DEVTYPE(net, &wimax_type);
diff --git a/drivers/staging/bcm/Makefile b/drivers/staging/bcm/Makefile
index 0050206b0fc..652b7f87737 100644
--- a/drivers/staging/bcm/Makefile
+++ b/drivers/staging/bcm/Makefile
@@ -6,7 +6,7 @@ obj-$(CONFIG_BCM_WIMAX) += bcm_wimax.o
6 6
7bcm_wimax-y := InterfaceDld.o InterfaceIdleMode.o InterfaceInit.o InterfaceRx.o \ 7bcm_wimax-y := InterfaceDld.o InterfaceIdleMode.o InterfaceInit.o InterfaceRx.o \
8 InterfaceIsr.o InterfaceMisc.o InterfaceTx.o \ 8 InterfaceIsr.o InterfaceMisc.o InterfaceTx.o \
9 Arp.o CmHost.o IPv6Protocol.o Qos.o Transmit.o\ 9 CmHost.o IPv6Protocol.o Qos.o Transmit.o\
10 Bcmnet.o DDRInit.o HandleControlPacket.o\ 10 Bcmnet.o DDRInit.o HandleControlPacket.o\
11 LeakyBucket.o Misc.o sort.o Bcmchar.o hostmibs.o PHSModule.o\ 11 LeakyBucket.o Misc.o sort.o Bcmchar.o hostmibs.o PHSModule.o\
12 led_control.o nvm.o vendorspecificextn.o 12 led_control.o nvm.o vendorspecificextn.o
diff --git a/drivers/staging/bcm/Transmit.c b/drivers/staging/bcm/Transmit.c
index 1f69625f241..4b94d822578 100644
--- a/drivers/staging/bcm/Transmit.c
+++ b/drivers/staging/bcm/Transmit.c
@@ -6,7 +6,7 @@
6digraph transmit1 { 6digraph transmit1 {
7node[shape=box] 7node[shape=box]
8edge[weight=5;color=red] 8edge[weight=5;color=red]
9bcm_transmit->reply_to_arp_request[label="ARP"] 9
10bcm_transmit->GetPacketQueueIndex[label="IP Packet"] 10bcm_transmit->GetPacketQueueIndex[label="IP Packet"]
11GetPacketQueueIndex->IpVersion4[label="IPV4"] 11GetPacketQueueIndex->IpVersion4[label="IPV4"]
12GetPacketQueueIndex->IpVersion6[label="IPV6"] 12GetPacketQueueIndex->IpVersion6[label="IPV6"]
@@ -63,17 +63,8 @@ netdev_tx_t bcm_transmit(struct sk_buff *skb, struct net_device *dev)
63 63
64 qindex = GetPacketQueueIndex(Adapter, skb); 64 qindex = GetPacketQueueIndex(Adapter, skb);
65 65
66 if (INVALID_QUEUE_INDEX==qindex) { 66 if (INVALID_QUEUE_INDEX==qindex)
67 if (ntohs(eth_hdr(skb)->h_proto) != ETH_ARP_FRAME) 67 goto drop;
68 goto drop;
69
70 /*
71 Reply directly to ARP request packet
72 ARP Spoofing only if NO ETH CS rule matches for it
73 */
74 reply_to_arp_request(skb);
75 return NETDEV_TX_OK;
76 }
77 68
78 if (Adapter->PackInfo[qindex].uiCurrentPacketsOnHost >= SF_MAX_ALLOWED_PACKETS_TO_BACKUP) 69 if (Adapter->PackInfo[qindex].uiCurrentPacketsOnHost >= SF_MAX_ALLOWED_PACKETS_TO_BACKUP)
79 return NETDEV_TX_BUSY; 70 return NETDEV_TX_BUSY;