Lines Matching refs:skb

37 static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)  in ax25_rx_fragment()  argument
42 if (!(*skb->data & AX25_SEG_FIRST)) { in ax25_rx_fragment()
43 if ((ax25->fragno - 1) == (*skb->data & AX25_SEG_REM)) { in ax25_rx_fragment()
45 ax25->fragno = *skb->data & AX25_SEG_REM; in ax25_rx_fragment()
46 skb_pull(skb, 1); /* skip fragno */ in ax25_rx_fragment()
47 ax25->fraglen += skb->len; in ax25_rx_fragment()
48 skb_queue_tail(&ax25->frag_queue, skb); in ax25_rx_fragment()
85 if (*skb->data & AX25_SEG_FIRST) { in ax25_rx_fragment()
87 ax25->fragno = *skb->data & AX25_SEG_REM; in ax25_rx_fragment()
88 skb_pull(skb, 1); /* skip fragno */ in ax25_rx_fragment()
89 ax25->fraglen = skb->len; in ax25_rx_fragment()
90 skb_queue_tail(&ax25->frag_queue, skb); in ax25_rx_fragment()
102 int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb) in ax25_rx_iframe() argument
108 if (skb == NULL) return 0; in ax25_rx_iframe()
112 pid = *skb->data; in ax25_rx_iframe()
119 struct sk_buff *skbn = skb_copy(skb, GFP_ATOMIC); in ax25_rx_iframe()
121 kfree_skb(skb); in ax25_rx_iframe()
122 skb = skbn; in ax25_rx_iframe()
125 skb_pull(skb, 1); /* Remove PID */ in ax25_rx_iframe()
126 skb->mac_header = skb->network_header; in ax25_rx_iframe()
127 skb_reset_network_header(skb); in ax25_rx_iframe()
128 skb->dev = ax25->ax25_dev->dev; in ax25_rx_iframe()
129 skb->pkt_type = PACKET_HOST; in ax25_rx_iframe()
130 skb->protocol = htons(ETH_P_IP); in ax25_rx_iframe()
131 netif_rx(skb); in ax25_rx_iframe()
135 skb_pull(skb, 1); /* Remove PID */ in ax25_rx_iframe()
136 return ax25_rx_fragment(ax25, skb); in ax25_rx_iframe()
140 skb_pull(skb, 1); /* Remove PID */ in ax25_rx_iframe()
141 return (*func)(skb, ax25); in ax25_rx_iframe()
147 if (sock_queue_rcv_skb(ax25->sk, skb) == 0) in ax25_rx_iframe()
160 static int ax25_process_rx_frame(ax25_cb *ax25, struct sk_buff *skb, int type, int dama) in ax25_process_rx_frame() argument
170 queued = ax25_std_frame_in(ax25, skb, type); in ax25_process_rx_frame()
176 queued = ax25_ds_frame_in(ax25, skb, type); in ax25_process_rx_frame()
178 queued = ax25_std_frame_in(ax25, skb, type); in ax25_process_rx_frame()
186 static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, in ax25_rcv() argument
200 skb_reset_transport_header(skb); in ax25_rcv()
209 if (ax25_addr_parse(skb->data, skb->len, &src, &dest, &dp, &type, &dama) == NULL) in ax25_rcv()
221 skb_pull(skb, ax25_addr_size(&dp)); in ax25_rcv()
232 if ((*skb->data & ~0x10) == AX25_UI && dp.lastrepeat + 1 == dp.ndigi) { in ax25_rcv()
233 skb_set_transport_header(skb, 2); /* skip control and pid */ in ax25_rcv()
235 ax25_send_to_raw(&dest, skb, skb->data[1]); in ax25_rcv()
241 switch (skb->data[1]) { in ax25_rcv()
243 skb_pull(skb,2); /* drop PID/CTRL */ in ax25_rcv()
244 skb_reset_transport_header(skb); in ax25_rcv()
245 skb_reset_network_header(skb); in ax25_rcv()
246 skb->dev = dev; in ax25_rcv()
247 skb->pkt_type = PACKET_HOST; in ax25_rcv()
248 skb->protocol = htons(ETH_P_IP); in ax25_rcv()
249 netif_rx(skb); in ax25_rcv()
253 skb_pull(skb,2); in ax25_rcv()
254 skb_reset_transport_header(skb); in ax25_rcv()
255 skb_reset_network_header(skb); in ax25_rcv()
256 skb->dev = dev; in ax25_rcv()
257 skb->pkt_type = PACKET_HOST; in ax25_rcv()
258 skb->protocol = htons(ETH_P_ARP); in ax25_rcv()
259 netif_rx(skb); in ax25_rcv()
268 kfree_skb(skb); in ax25_rcv()
273 skb_pull(skb, 2); in ax25_rcv()
274 if (sock_queue_rcv_skb(sk, skb) != 0) in ax25_rcv()
275 kfree_skb(skb); in ax25_rcv()
280 kfree_skb(skb); in ax25_rcv()
285 kfree_skb(skb); /* Will scan SOCK_AX25 RAW sockets */ in ax25_rcv()
313 if (ax25_process_rx_frame(ax25, skb, type, dama) == 0) in ax25_rcv()
314 kfree_skb(skb); in ax25_rcv()
324 if ((*skb->data & ~AX25_PF) != AX25_SABM && in ax25_rcv()
325 (*skb->data & ~AX25_PF) != AX25_SABME) { in ax25_rcv()
330 if ((*skb->data & ~AX25_PF) != AX25_DM && mine) in ax25_rcv()
349 kfree_skb(skb); in ax25_rcv()
357 skb_set_owner_r(skb, make); in ax25_rcv()
358 skb_queue_head(&sk->sk_receive_queue, skb); in ax25_rcv()
384 kfree_skb(skb); in ax25_rcv()
399 if ((*skb->data & ~AX25_PF) == AX25_SABME) { in ax25_rcv()
428 kfree_skb(skb); in ax25_rcv()
436 int ax25_kiss_rcv(struct sk_buff *skb, struct net_device *dev, in ax25_kiss_rcv() argument
439 skb_orphan(skb); in ax25_kiss_rcv()
442 kfree_skb(skb); in ax25_kiss_rcv()
446 if ((*skb->data & 0x0F) != 0) { in ax25_kiss_rcv()
447 kfree_skb(skb); /* Not a KISS data frame */ in ax25_kiss_rcv()
451 skb_pull(skb, AX25_KISS_HEADER_LEN); /* Remove the KISS byte */ in ax25_kiss_rcv()
453 return ax25_rcv(skb, dev, (ax25_address *)dev->dev_addr, ptype); in ax25_kiss_rcv()