diff options
author | Frank Blaschka <Frank.Blaschka@de.ibm.com> | 2007-01-08 11:29:34 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-01-09 02:18:31 -0500 |
commit | 95c78c8bfe8d0b49a43f392b9a74e2f9e89765ab (patch) | |
tree | ae7d3675c5426fecf582dabb84ec45100bd213a1 /drivers/s390/net/qeth_main.c | |
parent | f35723ec48ca60f2f3493ea40d63a9bc5b585c28 (diff) |
s390: qeth driver fixes: VLAN hdr, perf stats
From: Ursula Braun <braunu@de.ibm.com>
- VLAN header reordering did not work on packets
received through qeth interface in layer 2 mode.
This caused dhcpcd not to work with VLAN devices.
- set qeth performance statistics initally inactive
Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/s390/net/qeth_main.c')
-rw-r--r-- | drivers/s390/net/qeth_main.c | 21 |
1 files changed, 3 insertions, 18 deletions
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index f17d7cfb4207..015dc4c9fc16 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -1074,7 +1074,7 @@ qeth_set_intial_options(struct qeth_card *card) | |||
1074 | card->options.layer2 = 1; | 1074 | card->options.layer2 = 1; |
1075 | else | 1075 | else |
1076 | card->options.layer2 = 0; | 1076 | card->options.layer2 = 0; |
1077 | card->options.performance_stats = 1; | 1077 | card->options.performance_stats = 0; |
1078 | } | 1078 | } |
1079 | 1079 | ||
1080 | /** | 1080 | /** |
@@ -2466,32 +2466,17 @@ qeth_rebuild_skb_fake_ll(struct qeth_card *card, struct sk_buff *skb, | |||
2466 | qeth_rebuild_skb_fake_ll_eth(card, skb, hdr); | 2466 | qeth_rebuild_skb_fake_ll_eth(card, skb, hdr); |
2467 | } | 2467 | } |
2468 | 2468 | ||
2469 | static inline __u16 | 2469 | static inline void |
2470 | qeth_layer2_rebuild_skb(struct qeth_card *card, struct sk_buff *skb, | 2470 | qeth_layer2_rebuild_skb(struct qeth_card *card, struct sk_buff *skb, |
2471 | struct qeth_hdr *hdr) | 2471 | struct qeth_hdr *hdr) |
2472 | { | 2472 | { |
2473 | unsigned short vlan_id = 0; | ||
2474 | #ifdef CONFIG_QETH_VLAN | ||
2475 | struct vlan_hdr *vhdr; | ||
2476 | #endif | ||
2477 | |||
2478 | skb->pkt_type = PACKET_HOST; | 2473 | skb->pkt_type = PACKET_HOST; |
2479 | skb->protocol = qeth_type_trans(skb, skb->dev); | 2474 | skb->protocol = qeth_type_trans(skb, skb->dev); |
2480 | if (card->options.checksum_type == NO_CHECKSUMMING) | 2475 | if (card->options.checksum_type == NO_CHECKSUMMING) |
2481 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 2476 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
2482 | else | 2477 | else |
2483 | skb->ip_summed = CHECKSUM_NONE; | 2478 | skb->ip_summed = CHECKSUM_NONE; |
2484 | #ifdef CONFIG_QETH_VLAN | ||
2485 | if (hdr->hdr.l2.flags[2] & (QETH_LAYER2_FLAG_VLAN)) { | ||
2486 | vhdr = (struct vlan_hdr *) skb->data; | ||
2487 | skb->protocol = | ||
2488 | __constant_htons(vhdr->h_vlan_encapsulated_proto); | ||
2489 | vlan_id = hdr->hdr.l2.vlan_id; | ||
2490 | skb_pull(skb, VLAN_HLEN); | ||
2491 | } | ||
2492 | #endif | ||
2493 | *((__u32 *)skb->cb) = ++card->seqno.pkt_seqno; | 2479 | *((__u32 *)skb->cb) = ++card->seqno.pkt_seqno; |
2494 | return vlan_id; | ||
2495 | } | 2480 | } |
2496 | 2481 | ||
2497 | static inline __u16 | 2482 | static inline __u16 |
@@ -2570,7 +2555,7 @@ qeth_process_inbound_buffer(struct qeth_card *card, | |||
2570 | &offset, &hdr))) { | 2555 | &offset, &hdr))) { |
2571 | skb->dev = card->dev; | 2556 | skb->dev = card->dev; |
2572 | if (hdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) | 2557 | if (hdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) |
2573 | vlan_tag = qeth_layer2_rebuild_skb(card, skb, hdr); | 2558 | qeth_layer2_rebuild_skb(card, skb, hdr); |
2574 | else if (hdr->hdr.l3.id == QETH_HEADER_TYPE_LAYER3) | 2559 | else if (hdr->hdr.l3.id == QETH_HEADER_TYPE_LAYER3) |
2575 | vlan_tag = qeth_rebuild_skb(card, skb, hdr); | 2560 | vlan_tag = qeth_rebuild_skb(card, skb, hdr); |
2576 | else { /*in case of OSN*/ | 2561 | else { /*in case of OSN*/ |