Commit 56cb5156 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo Committed by David S. Miller

[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.
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3b2d59d1
...@@ -394,13 +394,11 @@ static void sp_bump(struct sixpack *sp, char cmd) ...@@ -394,13 +394,11 @@ static void sp_bump(struct sixpack *sp, char cmd)
if ((skb = dev_alloc_skb(count)) == NULL) if ((skb = dev_alloc_skb(count)) == NULL)
goto out_mem; goto out_mem;
skb->dev = sp->dev;
ptr = skb_put(skb, count); ptr = skb_put(skb, count);
*ptr++ = cmd; /* KISS command */ *ptr++ = cmd; /* KISS command */
memcpy(ptr, sp->cooked_buf + 1, count); memcpy(ptr, sp->cooked_buf + 1, count);
skb->mac.raw = skb->data; skb->protocol = ax25_type_trans(skb, sp->dev);
skb->protocol = htons(ETH_P_AX25);
netif_rx(skb); netif_rx(skb);
sp->dev->last_rx = jiffies; sp->dev->last_rx = jiffies;
sp->stats.rx_packets++; sp->stats.rx_packets++;
......
...@@ -601,12 +601,10 @@ static void do_rxpacket(struct net_device *dev) ...@@ -601,12 +601,10 @@ static void do_rxpacket(struct net_device *dev)
bc->stats.rx_dropped++; bc->stats.rx_dropped++;
return; return;
} }
skb->dev = dev;
cp = skb_put(skb, pktlen); cp = skb_put(skb, pktlen);
*cp++ = 0; /* KISS kludge */ *cp++ = 0; /* KISS kludge */
memcpy(cp, bc->hdlcrx.buf, pktlen - 1); memcpy(cp, bc->hdlcrx.buf, pktlen - 1);
skb->protocol = htons(ETH_P_AX25); skb->protocol = ax25_type_trans(skb, dev);
skb->mac.raw = skb->data;
netif_rx(skb); netif_rx(skb);
dev->last_rx = jiffies; dev->last_rx = jiffies;
bc->stats.rx_packets++; bc->stats.rx_packets++;
......
...@@ -211,11 +211,7 @@ static int bpq_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_ty ...@@ -211,11 +211,7 @@ static int bpq_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_ty
ptr = skb_push(skb, 1); ptr = skb_push(skb, 1);
*ptr = 0; *ptr = 0;
skb->dev = dev; skb->protocol = ax25_type_trans(skb, dev);
skb->protocol = htons(ETH_P_AX25);
skb->mac.raw = skb->data;
skb->pkt_type = PACKET_HOST;
netif_rx(skb); netif_rx(skb);
dev->last_rx = jiffies; dev->last_rx = jiffies;
unlock: unlock:
...@@ -272,8 +268,6 @@ static int bpq_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -272,8 +268,6 @@ static int bpq_xmit(struct sk_buff *skb, struct net_device *dev)
skb = newskb; skb = newskb;
} }
skb->protocol = htons(ETH_P_AX25);
ptr = skb_push(skb, 2); ptr = skb_push(skb, 2);
*ptr++ = (size + 5) % 256; *ptr++ = (size + 5) % 256;
...@@ -287,7 +281,7 @@ static int bpq_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -287,7 +281,7 @@ static int bpq_xmit(struct sk_buff *skb, struct net_device *dev)
return -ENODEV; return -ENODEV;
} }
skb->dev = dev; skb->protocol = ax25_type_trans(skb, dev);
skb->nh.raw = skb->data; skb->nh.raw = skb->data;
dev->hard_header(skb, dev, ETH_P_BPQ, bpq->dest_addr, NULL, 0); dev->hard_header(skb, dev, ETH_P_BPQ, bpq->dest_addr, NULL, 0);
bpq->stats.tx_packets++; bpq->stats.tx_packets++;
......
...@@ -1306,9 +1306,7 @@ static void rx_bh(void *arg) ...@@ -1306,9 +1306,7 @@ static void rx_bh(void *arg)
data = skb_put(skb, cb + 1); data = skb_put(skb, cb + 1);
data[0] = 0; data[0] = 0;
memcpy(&data[1], priv->rx_buf[i], cb); memcpy(&data[1], priv->rx_buf[i], cb);
skb->dev = priv->dev; skb->protocol = ax25_type_trans(skb, priv->dev);
skb->protocol = ntohs(ETH_P_AX25);
skb->mac.raw = skb->data;
netif_rx(skb); netif_rx(skb);
priv->dev->last_rx = jiffies; priv->dev->last_rx = jiffies;
priv->stats.rx_packets++; priv->stats.rx_packets++;
......
...@@ -174,12 +174,10 @@ static void hdlc_rx_flag(struct net_device *dev, struct hdlcdrv_state *s) ...@@ -174,12 +174,10 @@ static void hdlc_rx_flag(struct net_device *dev, struct hdlcdrv_state *s)
s->stats.rx_dropped++; s->stats.rx_dropped++;
return; return;
} }
skb->dev = dev;
cp = skb_put(skb, pkt_len); cp = skb_put(skb, pkt_len);
*cp++ = 0; /* KISS kludge */ *cp++ = 0; /* KISS kludge */
memcpy(cp, s->hdlcrx.buffer, pkt_len - 1); memcpy(cp, s->hdlcrx.buffer, pkt_len - 1);
skb->protocol = htons(ETH_P_AX25); skb->protocol = ax25_type_trans(skb, dev);
skb->mac.raw = skb->data;
netif_rx(skb); netif_rx(skb);
dev->last_rx = jiffies; dev->last_rx = jiffies;
s->stats.rx_packets++; s->stats.rx_packets++;
......
...@@ -332,12 +332,10 @@ static void ax_bump(struct ax_disp *ax) ...@@ -332,12 +332,10 @@ static void ax_bump(struct ax_disp *ax)
return; return;
} }
skb->dev = ax->dev;
spin_lock_bh(&ax->buflock); spin_lock_bh(&ax->buflock);
memcpy(skb_put(skb,count), ax->rbuff, count); memcpy(skb_put(skb,count), ax->rbuff, count);
spin_unlock_bh(&ax->buflock); spin_unlock_bh(&ax->buflock);
skb->mac.raw = skb->data; skb->protocol = ax25_type_trans(skb, ax->dev);
skb->protocol = htons(ETH_P_AX25);
netif_rx(skb); netif_rx(skb);
ax->dev->last_rx = jiffies; ax->dev->last_rx = jiffies;
ax->rx_packets++; ax->rx_packets++;
......
...@@ -1630,10 +1630,7 @@ static void scc_net_rx(struct scc_channel *scc, struct sk_buff *skb) ...@@ -1630,10 +1630,7 @@ static void scc_net_rx(struct scc_channel *scc, struct sk_buff *skb)
scc->dev_stat.rx_packets++; scc->dev_stat.rx_packets++;
scc->dev_stat.rx_bytes += skb->len; scc->dev_stat.rx_bytes += skb->len;
skb->dev = scc->dev; skb->protocol = ax25_type_trans(skb, scc->dev);
skb->protocol = htons(ETH_P_AX25);
skb->mac.raw = skb->data;
skb->pkt_type = PACKET_HOST;
netif_rx(skb); netif_rx(skb);
scc->dev->last_rx = jiffies; scc->dev->last_rx = jiffies;
......
...@@ -522,12 +522,10 @@ static inline void yam_rx_flag(struct net_device *dev, struct yam_port *yp) ...@@ -522,12 +522,10 @@ static inline void yam_rx_flag(struct net_device *dev, struct yam_port *yp)
++yp->stats.rx_dropped; ++yp->stats.rx_dropped;
} else { } else {
unsigned char *cp; unsigned char *cp;
skb->dev = dev;
cp = skb_put(skb, pkt_len); cp = skb_put(skb, pkt_len);
*cp++ = 0; /* KISS kludge */ *cp++ = 0; /* KISS kludge */
memcpy(cp, yp->rx_buf, pkt_len - 1); memcpy(cp, yp->rx_buf, pkt_len - 1);
skb->protocol = htons(ETH_P_AX25); skb->protocol = ax25_type_trans(skb, dev);
skb->mac.raw = skb->data;
netif_rx(skb); netif_rx(skb);
dev->last_rx = jiffies; dev->last_rx = jiffies;
++yp->stats.rx_packets; ++yp->stats.rx_packets;
......
...@@ -220,6 +220,14 @@ static __inline__ void ax25_cb_put(ax25_cb *ax25) ...@@ -220,6 +220,14 @@ static __inline__ void ax25_cb_put(ax25_cb *ax25)
} }
} }
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 */ /* af_ax25.c */
extern struct hlist_head ax25_list; extern struct hlist_head ax25_list;
extern spinlock_t ax25_list_lock; extern spinlock_t ax25_list_lock;
......
...@@ -143,8 +143,7 @@ static void ax25_kiss_cmd(ax25_dev *ax25_dev, unsigned char cmd, unsigned char p ...@@ -143,8 +143,7 @@ static void ax25_kiss_cmd(ax25_dev *ax25_dev, unsigned char cmd, unsigned char p
*p++ = cmd; *p++ = cmd;
*p++ = param; *p++ = param;
skb->dev = ax25_dev->dev; skb->protocol = ax25_type_trans(skb, ax25_dev->dev);
skb->protocol = htons(ETH_P_AX25);
dev_queue_xmit(skb); dev_queue_xmit(skb);
} }
......
...@@ -351,8 +351,7 @@ void ax25_queue_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -351,8 +351,7 @@ void ax25_queue_xmit(struct sk_buff *skb, struct net_device *dev)
{ {
unsigned char *ptr; unsigned char *ptr;
skb->protocol = htons(ETH_P_AX25); skb->protocol = ax25_type_trans(skb, ax25_fwd_dev(dev));
skb->dev = ax25_fwd_dev(dev);
ptr = skb_push(skb, 1); ptr = skb_push(skb, 1);
*ptr = 0x00; /* KISS */ *ptr = 0x00; /* KISS */
......
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