mirror of
https://github.com/torvalds/linux.git
synced 2024-12-05 02:23:16 +00:00
a4c48a2691
Frank Pavlic <fpavlic@de.ibm.com> Connection hangs when using EDDP mode because sk_protocol is NULL when skb has been copied via skb_copy. This results in dropping packets. Also keep MAC address after recovery of Virtual NICs so that traffic can flow again and duplicate statements in qeth_dev_set_route_store removed. Signed-off-by: Ursula Braun <braunu@de.ibm.com> Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
85 lines
1.8 KiB
C
85 lines
1.8 KiB
C
/*
|
|
* linux/drivers/s390/net/qeth_eddp.h
|
|
*
|
|
* Header file for qeth enhanced device driver packing.
|
|
*
|
|
* Copyright 2004 IBM Corporation
|
|
*
|
|
* Author(s): Thomas Spatzier <tspat@de.ibm.com>
|
|
*
|
|
*/
|
|
#ifndef __QETH_EDDP_H__
|
|
#define __QETH_EDDP_H__
|
|
|
|
struct qeth_eddp_element {
|
|
u32 flags;
|
|
u32 length;
|
|
void *addr;
|
|
};
|
|
|
|
struct qeth_eddp_context {
|
|
atomic_t refcnt;
|
|
enum qeth_large_send_types type;
|
|
int num_pages; /* # of allocated pages */
|
|
u8 **pages; /* pointers to pages */
|
|
int offset; /* offset in ctx during creation */
|
|
int num_elements; /* # of required 'SBALEs' */
|
|
struct qeth_eddp_element *elements; /* array of 'SBALEs' */
|
|
int elements_per_skb; /* # of 'SBALEs' per skb **/
|
|
};
|
|
|
|
struct qeth_eddp_context_reference {
|
|
struct list_head list;
|
|
struct qeth_eddp_context *ctx;
|
|
};
|
|
|
|
extern struct qeth_eddp_context *
|
|
qeth_eddp_create_context(struct qeth_card *,struct sk_buff *,
|
|
struct qeth_hdr *, unsigned char);
|
|
|
|
extern void
|
|
qeth_eddp_put_context(struct qeth_eddp_context *);
|
|
|
|
extern int
|
|
qeth_eddp_fill_buffer(struct qeth_qdio_out_q *,struct qeth_eddp_context *,int);
|
|
|
|
extern void
|
|
qeth_eddp_buf_release_contexts(struct qeth_qdio_out_buffer *);
|
|
|
|
extern int
|
|
qeth_eddp_check_buffers_for_context(struct qeth_qdio_out_q *,
|
|
struct qeth_eddp_context *);
|
|
/*
|
|
* Data used for fragmenting a IP packet.
|
|
*/
|
|
struct qeth_eddp_data {
|
|
struct qeth_hdr qh;
|
|
struct ethhdr mac;
|
|
__be16 vlan[2];
|
|
union {
|
|
struct {
|
|
struct iphdr h;
|
|
u8 options[40];
|
|
} ip4;
|
|
struct {
|
|
struct ipv6hdr h;
|
|
} ip6;
|
|
} nh;
|
|
u8 nhl;
|
|
void *nh_in_ctx; /* address of nh within the ctx */
|
|
union {
|
|
struct {
|
|
struct tcphdr h;
|
|
u8 options[40];
|
|
} tcp;
|
|
} th;
|
|
u8 thl;
|
|
void *th_in_ctx; /* address of th within the ctx */
|
|
struct sk_buff *skb;
|
|
int skb_offset;
|
|
int frag;
|
|
int frag_offset;
|
|
} __attribute__ ((packed));
|
|
|
|
#endif /* __QETH_EDDP_H__ */
|