Skip to contentSkip to conversation

make ax25_queue_xmit a net_device parameter

PATCH Applied Arnaldo Carvalho de Melo 3 participants 4 messages Apr 4, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 2/2 make ax25_queue_xmit a net_device parameter

Hi David, Ralf,

I'm trying to get back to the work of reducing the number of direct
references to skb->{h,nh,raw}, that eventually will become just a void pointer.

Available at:

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

Regards,

- Arnaldo

===================================================================

[email protected], 2005-04-04 16:28:37-03:00, [email protected]
[AX25] Introduce ax25_type_trans

Replacing the open coded equivalents and making ax25 look more like a linux network protocol, i.e. more similar to inet.

 drivers/net/hamradio/6pack.c      |    4 +---
 drivers/net/hamradio/baycom_epp.c |    4 +---
 drivers/net/hamradio/bpqether.c   |   10 ++--------
 drivers/net/hamradio/dmascc.c     |    4 +---
 drivers/net/hamradio/hdlcdrv.c    |    4 +---
 drivers/net/hamradio/mkiss.c      |    4 +---
 drivers/net/hamradio/scc.c        |    5 +----
 drivers/net/hamradio/yam.c        |    4 +---
 include/net/ax25.h                |    8 ++++++++
 net/ax25/ax25_ds_subr.c           |    3 +--
 net/ax25/ax25_out.c               |    3 +--
 11 files changed, 19 insertions(+), 34 deletions(-)
drivers/net/hamradio/6pack.c +1 -3
diff -Nru a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c
@@ -394,13 +394,11 @@
 	if ((skb = dev_alloc_skb(count)) == NULL)
 		goto out_mem;
 
-	skb->dev = sp->dev;
 	ptr = skb_put(skb, count);
 	*ptr++ = cmd;	/* KISS command */
 
 	memcpy(ptr, sp->cooked_buf + 1, count);
-	skb->mac.raw = skb->data;
-	skb->protocol = htons(ETH_P_AX25);
+	skb->protocol = ax25_type_trans(skb, sp->dev);
 	netif_rx(skb);
 	sp->dev->last_rx = jiffies;
 	sp->stats.rx_packets++;
drivers/net/hamradio/baycom_epp.c +1 -3
diff -Nru a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c
@@ -601,12 +601,10 @@
 		bc->stats.rx_dropped++;
 		return;
 	}
-	skb->dev = dev;
 	cp = skb_put(skb, pktlen);
 	*cp++ = 0; /* KISS kludge */
 	memcpy(cp, bc->hdlcrx.buf, pktlen - 1);
-	skb->protocol = htons(ETH_P_AX25);
-	skb->mac.raw = skb->data;
+	skb->protocol = ax25_type_trans(skb, dev);
 	netif_rx(skb);
 	dev->last_rx = jiffies;
 	bc->stats.rx_packets++;
drivers/net/hamradio/bpqether.c +2 -8
diff -Nru a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c
@@ -211,11 +211,7 @@
 	ptr = skb_push(skb, 1);
 	*ptr = 0;
 
-	skb->dev = dev;
-	skb->protocol = htons(ETH_P_AX25);
-	skb->mac.raw = skb->data;
-	skb->pkt_type = PACKET_HOST;
-
+	skb->protocol = ax25_type_trans(skb, dev);
 	netif_rx(skb);
 	dev->last_rx = jiffies;
 unlock:
@@ -272,8 +268,6 @@
 		skb = newskb;
 	}
 
-	skb->protocol = htons(ETH_P_AX25);
-
 	ptr = skb_push(skb, 2);
 
 	*ptr++ = (size + 5) % 256;
@@ -287,7 +281,7 @@
 		return -ENODEV;
 	}
 
-	skb->dev = dev;
+	skb->protocol = ax25_type_trans(skb, dev);
 	skb->nh.raw = skb->data;
 	dev->hard_header(skb, dev, ETH_P_BPQ, bpq->dest_addr, NULL, 0);
 	bpq->stats.tx_packets++;
drivers/net/hamradio/dmascc.c +1 -3
diff -Nru a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c
@@ -1306,9 +1306,7 @@
 			data = skb_put(skb, cb + 1);
 			data[0] = 0;
 			memcpy(&data[1], priv->rx_buf[i], cb);
-			skb->dev = priv->dev;
-			skb->protocol = ntohs(ETH_P_AX25);
-			skb->mac.raw = skb->data;
+			skb->protocol = ax25_type_trans(skb, priv->dev);
 			netif_rx(skb);
 			priv->dev->last_rx = jiffies;
 			priv->stats.rx_packets++;
drivers/net/hamradio/hdlcdrv.c +1 -3
diff -Nru a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c
@@ -174,12 +174,10 @@
 		s->stats.rx_dropped++;
 		return;
 	}
-	skb->dev = dev;
 	cp = skb_put(skb, pkt_len);
 	*cp++ = 0; /* KISS kludge */
 	memcpy(cp, s->hdlcrx.buffer, pkt_len - 1);
-	skb->protocol = htons(ETH_P_AX25);
-	skb->mac.raw = skb->data;
+	skb->protocol = ax25_type_trans(skb, dev);
 	netif_rx(skb);
 	dev->last_rx = jiffies;
 	s->stats.rx_packets++;
drivers/net/hamradio/mkiss.c +1 -3
diff -Nru a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
@@ -332,12 +332,10 @@
 		return;
 	}
 
-	skb->dev      = ax->dev;
 	spin_lock_bh(&ax->buflock);
 	memcpy(skb_put(skb,count), ax->rbuff, count);
 	spin_unlock_bh(&ax->buflock);
-	skb->mac.raw  = skb->data;
-	skb->protocol = htons(ETH_P_AX25);
+	skb->protocol = ax25_type_trans(skb, ax->dev);
 	netif_rx(skb);
 	ax->dev->last_rx = jiffies;
 	ax->rx_packets++;
drivers/net/hamradio/scc.c +1 -4
diff -Nru a/drivers/net/hamradio/scc.c b/drivers/net/hamradio/scc.c
@@ -1630,10 +1630,7 @@
 	scc->dev_stat.rx_packets++;
 	scc->dev_stat.rx_bytes += skb->len;
 
-	skb->dev      = scc->dev;
-	skb->protocol = htons(ETH_P_AX25);
-	skb->mac.raw  = skb->data;
-	skb->pkt_type = PACKET_HOST;
+	skb->protocol = ax25_type_trans(skb, scc->dev);
 	
 	netif_rx(skb);
 	scc->dev->last_rx = jiffies;
drivers/net/hamradio/yam.c +1 -3
diff -Nru a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
@@ -522,12 +522,10 @@
 				++yp->stats.rx_dropped;
 			} else {
 				unsigned char *cp;
-				skb->dev = dev;
 				cp = skb_put(skb, pkt_len);
 				*cp++ = 0;		/* KISS kludge */
 				memcpy(cp, yp->rx_buf, pkt_len - 1);
-				skb->protocol = htons(ETH_P_AX25);
-				skb->mac.raw = skb->data;
+				skb->protocol = ax25_type_trans(skb, dev);
 				netif_rx(skb);
 				dev->last_rx = jiffies;
 				++yp->stats.rx_packets;
include/net/ax25.h +8 -0
diff -Nru a/include/net/ax25.h b/include/net/ax25.h
@@ -220,6 +220,14 @@
 	}
 }
 
+static inline unsigned short ax25_type_trans(struct sk_buff *skb, struct net_device *dev)
+{
+	skb->dev      = dev;
+	skb->pkt_type = PACKET_HOST;
+	skb->mac.raw  = skb->data;
+	return htons(ETH_P_AX25);
+}
+
 /* af_ax25.c */
 extern struct hlist_head ax25_list;
 extern spinlock_t ax25_list_lock;
net/ax25/ax25_ds_subr.c +1 -2
diff -Nru a/net/ax25/ax25_ds_subr.c b/net/ax25/ax25_ds_subr.c
@@ -143,8 +143,7 @@
 	*p++ = cmd;
 	*p++ = param;
 
-	skb->dev      = ax25_dev->dev;
-	skb->protocol = htons(ETH_P_AX25);
+	skb->protocol = ax25_type_trans(skb, ax25_dev->dev);
 
 	dev_queue_xmit(skb);
 }
net/ax25/ax25_out.c +1 -2
diff -Nru a/net/ax25/ax25_out.c b/net/ax25/ax25_out.c
@@ -351,8 +351,7 @@
 {
 	unsigned char *ptr;
 
-	skb->protocol = htons(ETH_P_AX25);
-	skb->dev      = ax25_fwd_dev(dev);
+	skb->protocol = ax25_type_trans(skb, ax25_fwd_dev(dev));
 
 	ptr  = skb_push(skb, 1);
 	*ptr = 0x00;			/* KISS */
#1 lore raw

[AX25] Introduce ax25_type_trans. was Re: [PATCH 2/2][AX25] make ax25_queue_xmit a net_device parameter

Sorry, this one got the same subject as the previous one, it should have been "[AX25] Introduce ax25_type_trans".

- Arnaldo

#2 lore raw
In reply to Arnaldo Carvalho de Melo

You probably wanna set skb->input_dev in ax25_type_trans() as well something like:
skb->input_dev = skb->dev = dev

cheers,
jamal

Quoted 13 lines · Arnaldo Carvalho de Melo

Hi David, Ralf,

I'm trying to get back to the work of reducing the number of direct
references to skb->{h,nh,raw}, that eventually will become just a void pointer.

Available at:

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

Regards,

- Arnaldo

#3 lore raw
Quoted 4 lines · jamal

You probably wanna set skb->input_dev in ax25_type_trans() as well something like:
skb->input_dev = skb->dev = dev

Yup, forgot about this one in this patch, but I want right now is mostly to reduce open coding all around while maintaining the same behaviour, in time we can eventually see a better abstraction for this set of operations, it should also set skb->protocol internally and not return a value to set skb->protocol, etc. :-)

- Arnaldo