Lines Matching refs:skb

34 static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)  in ax25_rx_fragment()  argument
39 if (!(*skb->data & AX25_SEG_FIRST)) { in ax25_rx_fragment()
40 if ((ax25->fragno - 1) == (*skb->data & AX25_SEG_REM)) { in ax25_rx_fragment()
42 ax25->fragno = *skb->data & AX25_SEG_REM; in ax25_rx_fragment()
43 skb_pull(skb, 1); /* skip fragno */ in ax25_rx_fragment()
44 ax25->fraglen += skb->len; in ax25_rx_fragment()
45 skb_queue_tail(&ax25->frag_queue, skb); in ax25_rx_fragment()
82 if (*skb->data & AX25_SEG_FIRST) { in ax25_rx_fragment()
84 ax25->fragno = *skb->data & AX25_SEG_REM; in ax25_rx_fragment()
85 skb_pull(skb, 1); /* skip fragno */ in ax25_rx_fragment()
86 ax25->fraglen = skb->len; in ax25_rx_fragment()
87 skb_queue_tail(&ax25->frag_queue, skb); in ax25_rx_fragment()
99 int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb) in ax25_rx_iframe() argument
105 if (skb == NULL) return 0; in ax25_rx_iframe()
109 pid = *skb->data; in ax25_rx_iframe()
116 struct sk_buff *skbn = skb_copy(skb, GFP_ATOMIC); in ax25_rx_iframe()
118 kfree_skb(skb); in ax25_rx_iframe()
119 skb = skbn; in ax25_rx_iframe()
122 skb_pull(skb, 1); /* Remove PID */ in ax25_rx_iframe()
123 skb->mac_header = skb->network_header; in ax25_rx_iframe()
124 skb_reset_network_header(skb); in ax25_rx_iframe()
125 skb->dev = ax25->ax25_dev->dev; in ax25_rx_iframe()
126 skb->pkt_type = PACKET_HOST; in ax25_rx_iframe()
127 skb->protocol = htons(ETH_P_IP); in ax25_rx_iframe()
128 netif_rx(skb); in ax25_rx_iframe()
132 skb_pull(skb, 1); /* Remove PID */ in ax25_rx_iframe()
133 return ax25_rx_fragment(ax25, skb); in ax25_rx_iframe()
137 skb_pull(skb, 1); /* Remove PID */ in ax25_rx_iframe()
138 return (*func)(skb, ax25); in ax25_rx_iframe()
144 if (sock_queue_rcv_skb(ax25->sk, skb) == 0) in ax25_rx_iframe()
157 static int ax25_process_rx_frame(ax25_cb *ax25, struct sk_buff *skb, int type, int dama) in ax25_process_rx_frame() argument
167 queued = ax25_std_frame_in(ax25, skb, type); in ax25_process_rx_frame()
173 queued = ax25_ds_frame_in(ax25, skb, type); in ax25_process_rx_frame()
175 queued = ax25_std_frame_in(ax25, skb, type); in ax25_process_rx_frame()
183 static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, in ax25_rcv() argument
197 skb_reset_transport_header(skb); in ax25_rcv()
206 if (ax25_addr_parse(skb->data, skb->len, &src, &dest, &dp, &type, &dama) == NULL) in ax25_rcv()
218 skb_pull(skb, ax25_addr_size(&dp)); in ax25_rcv()
229 if ((*skb->data & ~0x10) == AX25_UI && dp.lastrepeat + 1 == dp.ndigi) { in ax25_rcv()
230 skb_set_transport_header(skb, 2); /* skip control and pid */ in ax25_rcv()
232 ax25_send_to_raw(&dest, skb, skb->data[1]); in ax25_rcv()
238 switch (skb->data[1]) { in ax25_rcv()
240 skb_pull(skb,2); /* drop PID/CTRL */ in ax25_rcv()
241 skb_reset_transport_header(skb); in ax25_rcv()
242 skb_reset_network_header(skb); in ax25_rcv()
243 skb->dev = dev; in ax25_rcv()
244 skb->pkt_type = PACKET_HOST; in ax25_rcv()
245 skb->protocol = htons(ETH_P_IP); in ax25_rcv()
246 netif_rx(skb); in ax25_rcv()
250 skb_pull(skb,2); in ax25_rcv()
251 skb_reset_transport_header(skb); in ax25_rcv()
252 skb_reset_network_header(skb); in ax25_rcv()
253 skb->dev = dev; in ax25_rcv()
254 skb->pkt_type = PACKET_HOST; in ax25_rcv()
255 skb->protocol = htons(ETH_P_ARP); in ax25_rcv()
256 netif_rx(skb); in ax25_rcv()
265 kfree_skb(skb); in ax25_rcv()
270 skb_pull(skb, 2); in ax25_rcv()
271 if (sock_queue_rcv_skb(sk, skb) != 0) in ax25_rcv()
272 kfree_skb(skb); in ax25_rcv()
277 kfree_skb(skb); in ax25_rcv()
282 kfree_skb(skb); /* Will scan SOCK_AX25 RAW sockets */ in ax25_rcv()
310 if (ax25_process_rx_frame(ax25, skb, type, dama) == 0) in ax25_rcv()
311 kfree_skb(skb); in ax25_rcv()
321 if ((*skb->data & ~AX25_PF) != AX25_SABM && in ax25_rcv()
322 (*skb->data & ~AX25_PF) != AX25_SABME) { in ax25_rcv()
327 if ((*skb->data & ~AX25_PF) != AX25_DM && mine) in ax25_rcv()
346 kfree_skb(skb); in ax25_rcv()
354 skb_set_owner_r(skb, make); in ax25_rcv()
355 skb_queue_head(&sk->sk_receive_queue, skb); in ax25_rcv()
381 kfree_skb(skb); in ax25_rcv()
396 if ((*skb->data & ~AX25_PF) == AX25_SABME) { in ax25_rcv()
425 kfree_skb(skb); in ax25_rcv()
433 int ax25_kiss_rcv(struct sk_buff *skb, struct net_device *dev, in ax25_kiss_rcv() argument
436 skb_orphan(skb); in ax25_kiss_rcv()
439 kfree_skb(skb); in ax25_kiss_rcv()
443 if ((*skb->data & 0x0F) != 0) { in ax25_kiss_rcv()
444 kfree_skb(skb); /* Not a KISS data frame */ in ax25_kiss_rcv()
448 skb_pull(skb, AX25_KISS_HEADER_LEN); /* Remove the KISS byte */ in ax25_kiss_rcv()
450 return ax25_rcv(skb, dev, (const ax25_address *)dev->dev_addr, ptype); in ax25_kiss_rcv()