Commit f62f4705 authored by David S. Miller's avatar David S. Miller

Merge bk://kernel.bkbits.net/acme/sk_buff-2.6

into nuts.davemloft.net:/disk1/BK/acme-2.6
parents 2e21fda8 1b0fdcb4
...@@ -850,7 +850,7 @@ static inline u16 ether1394_type_trans(struct sk_buff *skb, ...@@ -850,7 +850,7 @@ static inline u16 ether1394_type_trans(struct sk_buff *skb,
skb->mac.raw = skb->data; skb->mac.raw = skb->data;
skb_pull (skb, ETH1394_HLEN); skb_pull (skb, ETH1394_HLEN);
eth = (struct eth1394hdr*)skb->mac.raw; eth = eth1394_hdr(skb);
if (*eth->h_dest & 1) { if (*eth->h_dest & 1) {
if (memcmp(eth->h_dest, dev->broadcast, dev->addr_len)==0) if (memcmp(eth->h_dest, dev->broadcast, dev->addr_len)==0)
......
...@@ -81,7 +81,14 @@ struct eth1394hdr { ...@@ -81,7 +81,14 @@ struct eth1394hdr {
unsigned short h_proto; /* packet type ID field */ unsigned short h_proto; /* packet type ID field */
} __attribute__((packed)); } __attribute__((packed));
#ifdef __KERNEL__
#include <linux/skbuff.h>
static inline struct eth1394hdr *eth1394_hdr(const struct sk_buff *skb)
{
return (struct eth1394hdr *)skb->mac.raw;
}
#endif
typedef enum {ETH1394_GASP, ETH1394_WRREQ} eth1394_tx_type; typedef enum {ETH1394_GASP, ETH1394_WRREQ} eth1394_tx_type;
......
...@@ -193,7 +193,7 @@ static int bpq_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_ty ...@@ -193,7 +193,7 @@ static int bpq_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_ty
bpq = (struct bpqdev *)dev->priv; bpq = (struct bpqdev *)dev->priv;
eth = (struct ethhdr *)skb->mac.raw; eth = eth_hdr(skb);
if (!(bpq->acpt_addr[0] & 0x01) && if (!(bpq->acpt_addr[0] & 0x01) &&
memcmp(eth->h_source, bpq->acpt_addr, ETH_ALEN)) memcmp(eth->h_source, bpq->acpt_addr, ETH_ALEN))
......
...@@ -48,6 +48,15 @@ struct trh_hdr { ...@@ -48,6 +48,15 @@ struct trh_hdr {
__u16 rseg[8]; /* routing registers */ __u16 rseg[8]; /* routing registers */
}; };
#ifdef __KERNEL__
#include <linux/skbuff.h>
static inline struct trh_hdr *tr_hdr(const struct sk_buff *skb)
{
return (struct trh_hdr *)skb->mac.raw;
}
#endif
/* This is an Token-Ring LLC structure */ /* This is an Token-Ring LLC structure */
struct trllc { struct trllc {
__u8 dsap; /* destination SAP */ __u8 dsap; /* destination SAP */
......
...@@ -253,9 +253,9 @@ static inline void llc_pdu_header_init(struct sk_buff *skb, u8 type, ...@@ -253,9 +253,9 @@ static inline void llc_pdu_header_init(struct sk_buff *skb, u8 type,
static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa) static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
{ {
if (skb->protocol == ntohs(ETH_P_802_2)) if (skb->protocol == ntohs(ETH_P_802_2))
memcpy(sa, ((struct ethhdr *)skb->mac.raw)->h_source, ETH_ALEN); memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN);
else if (skb->protocol == ntohs(ETH_P_TR_802_2)) else if (skb->protocol == ntohs(ETH_P_TR_802_2))
memcpy(sa, ((struct trh_hdr *)skb->mac.raw)->saddr, ETH_ALEN); memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN);
} }
/** /**
...@@ -268,9 +268,9 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa) ...@@ -268,9 +268,9 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
static inline void llc_pdu_decode_da(struct sk_buff *skb, u8 *da) static inline void llc_pdu_decode_da(struct sk_buff *skb, u8 *da)
{ {
if (skb->protocol == ntohs(ETH_P_802_2)) if (skb->protocol == ntohs(ETH_P_802_2))
memcpy(da, ((struct ethhdr *)skb->mac.raw)->h_dest, ETH_ALEN); memcpy(da, eth_hdr(skb)->h_dest, ETH_ALEN);
else if (skb->protocol == ntohs(ETH_P_TR_802_2)) else if (skb->protocol == ntohs(ETH_P_TR_802_2))
memcpy(da, ((struct trh_hdr *)skb->mac.raw)->daddr, ETH_ALEN); memcpy(da, tr_hdr(skb)->daddr, ETH_ALEN);
} }
/** /**
...@@ -347,7 +347,7 @@ static inline void llc_pdu_init_as_test_rsp(struct sk_buff *skb, ...@@ -347,7 +347,7 @@ static inline void llc_pdu_init_as_test_rsp(struct sk_buff *skb,
struct llc_pdu_un *ev_pdu = llc_pdu_un_hdr(ev_skb); struct llc_pdu_un *ev_pdu = llc_pdu_un_hdr(ev_skb);
int dsize; int dsize;
dsize = ntohs(((struct ethhdr *)ev_skb->mac.raw)->h_proto) - 3; dsize = ntohs(eth_hdr(ev_skb)->h_proto) - 3;
memcpy(((u8 *)pdu) + 3, ((u8 *)ev_pdu) + 3, dsize); memcpy(((u8 *)pdu) + 3, ((u8 *)ev_pdu) + 3, dsize);
skb_put(skb, dsize); skb_put(skb, dsize);
} }
......
...@@ -111,7 +111,7 @@ static inline int llc_fixup_skb(struct sk_buff *skb) ...@@ -111,7 +111,7 @@ static inline int llc_fixup_skb(struct sk_buff *skb)
skb->h.raw += llc_len; skb->h.raw += llc_len;
skb_pull(skb, llc_len); skb_pull(skb, llc_len);
if (skb->protocol == htons(ETH_P_802_2)) { if (skb->protocol == htons(ETH_P_802_2)) {
u16 pdulen = ((struct ethhdr *)skb->mac.raw)->h_proto, u16 pdulen = eth_hdr(skb)->h_proto,
data_size = ntohs(pdulen) - llc_len; data_size = ntohs(pdulen) - llc_len;
skb_trim(skb, data_size); skb_trim(skb, data_size);
......
...@@ -40,7 +40,8 @@ int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da) ...@@ -40,7 +40,8 @@ int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da)
struct net_device *dev = skb->dev; struct net_device *dev = skb->dev;
struct trh_hdr *trh; struct trh_hdr *trh;
trh = (struct trh_hdr *)skb_push(skb, sizeof(*trh)); skb->mac.raw = skb_push(skb, sizeof(*trh));
trh = tr_hdr(skb);
trh->ac = AC; trh->ac = AC;
trh->fc = LLC_FRAME; trh->fc = LLC_FRAME;
if (sa) if (sa)
...@@ -51,7 +52,6 @@ int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da) ...@@ -51,7 +52,6 @@ int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da)
memcpy(trh->daddr, da, dev->addr_len); memcpy(trh->daddr, da, dev->addr_len);
tr_source_route(skb, trh, dev); tr_source_route(skb, trh, dev);
} }
skb->mac.raw = skb->data;
break; break;
} }
#endif #endif
...@@ -61,7 +61,7 @@ int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da) ...@@ -61,7 +61,7 @@ int llc_mac_hdr_init(struct sk_buff *skb, unsigned char *sa, unsigned char *da)
struct ethhdr *eth; struct ethhdr *eth;
skb->mac.raw = skb_push(skb, sizeof(*eth)); skb->mac.raw = skb_push(skb, sizeof(*eth));
eth = (struct ethhdr *)skb->mac.raw; eth = eth_hdr(skb);
eth->h_proto = htons(len); eth->h_proto = htons(len);
memcpy(eth->h_dest, da, ETH_ALEN); memcpy(eth->h_dest, da, ETH_ALEN);
memcpy(eth->h_source, sa, ETH_ALEN); memcpy(eth->h_source, sa, ETH_ALEN);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment