This is untested, but it looks correct. It removes the private element
from skbuff, that is only used by HIPPI. Instead it uses skb->cb[] to
hold the additional data that is needed in the output path from
hard_header to device driver.
PS: The only qdisc that might potentially corrupt this cb[] is if
netem was used over HIPPI. I will take care of that by fixing netem
to use skb->stamp. I don't expect many users of netem over HIPPI
Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]>
Index: hippi/include/linux/skbuff.h
===================================================================
--- hippi.orig/include/linux/skbuff.h
+++ hippi/include/linux/skbuff.h
@@ -195,7 +195,6 @@ struct skb_shared_info {
* @nfctinfo: Relationship of this skb to the connection
* @nf_debug: Netfilter debugging
* @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
- * @private: Data which is private to the HIPPI implementation
* @tc_index: Traffic control index
* @tc_verd: traffic control verdict
* @tc_classid: traffic control classid
@@ -271,11 +270,6 @@ struct sk_buff {
struct nf_bridge_info *nf_bridge;
#endif
#endif /* CONFIG_NETFILTER */
-#if defined(CONFIG_HIPPI)
- union {
- __u32 ifield;
- } private;
-#endif
#ifdef CONFIG_NET_SCHED
__u32 tc_index; /* traffic control index */
#ifdef CONFIG_NET_CLS_ACT
Index: hippi/net/802/hippi.c
===================================================================
--- hippi.orig/net/802/hippi.c
+++ hippi/net/802/hippi.c
@@ -51,6 +51,7 @@ static int hippi_header(struct sk_buff *
unsigned len)
{
struct hippi_hdr *hip = (struct hippi_hdr *)skb_push(skb, HIPPI_HLEN);
+ struct hippi_cb *hcb = (struct hippi_cb *) skb->cb;
if (!len){
len = skb->len - HIPPI_HLEN;
@@ -84,9 +85,10 @@ static int hippi_header(struct sk_buff *
if (daddr)
{
memcpy(hip->le.dest_switch_addr, daddr + 3, 3);
- memcpy(&skb->private.ifield, daddr + 2, 4);
+ memcpy(&hcb->ifield, daddr + 2, 4);
return HIPPI_HLEN;
}
+ hcb->ifield = 0;
return -((int)HIPPI_HLEN);
}
Index: hippi/include/linux/hippidevice.h
===================================================================
--- hippi.orig/include/linux/hippidevice.h
+++ hippi/include/linux/hippidevice.h
@@ -26,6 +26,11 @@
#include <linux/if_hippi.h>
#ifdef __KERNEL__
+
+struct hippi_cb {
+ __u32 ifield;
+};
+
extern unsigned short hippi_type_trans(struct sk_buff *skb,
struct net_device *dev);
Index: hippi/drivers/net/rrunner.c
===================================================================
--- hippi.orig/drivers/net/rrunner.c
+++ hippi/drivers/net/rrunner.c
@@ -1429,6 +1429,7 @@ static int rr_start_xmit(struct sk_buff
{
struct rr_private *rrpriv = netdev_priv(dev);
struct rr_regs __iomem *regs = rrpriv->regs;
+ struct hippi_cb *hcb = (struct hippi_cb *) skb->cb;
struct ring_ctrl *txctrl;
unsigned long flags;
u32 index, len = skb->len;
@@ -1460,7 +1461,7 @@ static int rr_start_xmit(struct sk_buff
ifield = (u32 *)skb_push(skb, 8);
ifield[0] = 0;
- ifield[1] = skb->private.ifield;
+ ifield[1] = hcb->ifield;
/*
* We don't need the lock before we are actually going to start
Index: hippi/net/core/skbuff.c
===================================================================
--- hippi.orig/net/core/skbuff.c
+++ hippi/net/core/skbuff.c
@@ -373,9 +373,6 @@ struct sk_buff *skb_clone(struct sk_buff
nf_bridge_get(skb->nf_bridge);
#endif
#endif /*CONFIG_NETFILTER*/
-#if defined(CONFIG_HIPPI)
- C(private);
-#endif
#ifdef CONFIG_NET_SCHED
C(tc_index);
#ifdef CONFIG_NET_CLS_ACT
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html