Lines Matching refs:skb

225 /* Get the PPP protocol number from a skb */
226 #define PPP_PROTO(skb) get_unaligned_be16((skb)->data)
251 static void ppp_send_frame(struct ppp *ppp, struct sk_buff *skb);
254 static void ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb,
257 static void ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb);
259 struct sk_buff *skb);
261 static void ppp_receive_mp_frame(struct ppp *ppp, struct sk_buff *skb,
263 static void ppp_mp_insert(struct ppp *ppp, struct sk_buff *skb);
265 static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb);
268 static void ppp_ccp_peek(struct ppp *ppp, struct sk_buff *skb, int inbound);
418 struct sk_buff *skb = NULL;
428 skb = skb_dequeue(&pf->rq);
429 if (skb)
456 if (!skb)
460 if (skb->len > count)
465 if (skb_copy_datagram_iovec(skb, 0, &iov, skb->len))
467 ret = skb->len;
470 kfree_skb(skb);
479 struct sk_buff *skb;
485 skb = alloc_skb(count + pf->hdrlen, GFP_KERNEL);
486 if (!skb)
488 skb_reserve(skb, pf->hdrlen);
490 if (copy_from_user(skb_put(skb, count), buf, count)) {
491 kfree_skb(skb);
495 skb_queue_tail(&pf->xq, skb);
973 ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
979 npi = ethertype_to_npindex(ntohs(skb->protocol));
998 if (skb_cow_head(skb, PPP_HDRLEN))
1001 pp = skb_push(skb, 2);
1005 skb_queue_tail(&ppp->file.xq, skb);
1010 kfree_skb(skb);
1120 struct sk_buff *skb;
1126 (skb = skb_dequeue(&ppp->file.xq)))
1127 ppp_send_frame(ppp, skb);
1139 pad_compress_skb(struct ppp *ppp, struct sk_buff *skb)
1158 len = ppp->xcomp->compress(ppp->xc_state, skb->data - 2,
1159 new_skb->data, skb->len + 2,
1162 consume_skb(skb);
1163 skb = new_skb;
1164 skb_put(skb, len);
1165 skb_pull(skb, 2); /* pull off A/C bytes */
1169 new_skb = skb;
1181 kfree_skb(skb);
1194 ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
1196 int proto = PPP_PROTO(skb);
1206 *skb_push(skb, 2) = 1;
1208 BPF_PROG_RUN(ppp->pass_filter, skb) == 0) {
1213 kfree_skb(skb);
1218 BPF_PROG_RUN(ppp->active_filter, skb) == 0))
1220 skb_pull(skb, 2);
1228 ppp->stats64.tx_bytes += skb->len - 2;
1235 new_skb = alloc_skb(skb->len + ppp->dev->hard_header_len - 2,
1242 cp = skb->data + 2;
1243 len = slhc_compress(ppp->vj, cp, skb->len - 2,
1246 if (cp == skb->data + 2) {
1255 cp[0] = skb->data[2];
1257 consume_skb(skb);
1258 skb = new_skb;
1259 cp = skb_put(skb, len + 2);
1267 ppp_ccp_peek(ppp, skb, 0);
1281 skb = pad_compress_skb(ppp, skb);
1282 if (!skb)
1293 skb_queue_tail(&ppp->file.rq, skb);
1298 ppp->xmit_pending = skb;
1303 kfree_skb(skb);
1316 struct sk_buff *skb = ppp->xmit_pending;
1318 if (!skb)
1325 kfree_skb(skb);
1336 if (pch->chan->ops->start_xmit(pch->chan, skb))
1340 kfree_skb(skb);
1350 if (!ppp_mp_explode(ppp, skb))
1355 kfree_skb(skb);
1368 static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb)
1427 p = skb->data;
1428 len = skb->len;
1599 struct sk_buff *skb;
1605 skb = skb_dequeue(&pch->file.xq);
1606 if (!pch->chan->ops->start_xmit(pch->chan, skb)) {
1608 skb_queue_head(&pch->file.xq, skb);
1635 #define PPP_MP_CB(skb) ((struct ppp_mp_skb_parm *)((skb)->cb))
1638 ppp_do_recv(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
1642 ppp_receive_frame(ppp, skb, pch);
1644 kfree_skb(skb);
1649 ppp_input(struct ppp_channel *chan, struct sk_buff *skb)
1655 kfree_skb(skb);
1660 if (!pskb_may_pull(skb, 2)) {
1661 kfree_skb(skb);
1669 proto = PPP_PROTO(skb);
1672 skb_queue_tail(&pch->file.rq, skb);
1675 (skb = skb_dequeue(&pch->file.rq)))
1676 kfree_skb(skb);
1679 ppp_do_recv(pch->ppp, skb, pch);
1686 /* Put a 0-length skb in the receive queue as an error indication */
1691 struct sk_buff *skb;
1698 skb = alloc_skb(0, GFP_ATOMIC);
1699 if (skb) {
1700 skb->len = 0; /* probably unnecessary */
1701 skb->cb[0] = code;
1702 ppp_do_recv(pch->ppp, skb, pch);
1713 ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
1715 /* note: a 0-length skb is used as an error indication */
1716 if (skb->len > 0) {
1719 if (PPP_PROTO(skb) == PPP_MP)
1720 ppp_receive_mp_frame(ppp, skb, pch);
1723 ppp_receive_nonmp_frame(ppp, skb);
1725 kfree_skb(skb);
1739 ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb)
1751 skb = ppp_decompress_frame(ppp, skb);
1756 proto = PPP_PROTO(skb);
1763 if (skb_tailroom(skb) < 124 || skb_cloned(skb)) {
1765 ns = dev_alloc_skb(skb->len + 128);
1772 skb_copy_bits(skb, 0, skb_put(ns, skb->len), skb->len);
1773 consume_skb(skb);
1774 skb = ns;
1777 skb->ip_summed = CHECKSUM_NONE;
1779 len = slhc_uncompress(ppp->vj, skb->data + 2, skb->len - 2);
1786 if (len > skb->len)
1787 skb_put(skb, len - skb->len);
1788 else if (len < skb->len)
1789 skb_trim(skb, len);
1800 if (!pskb_may_pull(skb, skb->len))
1803 if (slhc_remember(ppp->vj, skb->data + 2, skb->len - 2) <= 0) {
1811 ppp_ccp_peek(ppp, skb, 1);
1816 ppp->stats64.rx_bytes += skb->len - 2;
1821 skb_queue_tail(&ppp->file.rq, skb);
1824 (skb = skb_dequeue(&ppp->file.rq)))
1825 kfree_skb(skb);
1837 if (skb_unclone(skb, GFP_ATOMIC))
1840 *skb_push(skb, 2) = 0;
1842 BPF_PROG_RUN(ppp->pass_filter, skb) == 0) {
1847 kfree_skb(skb);
1851 BPF_PROG_RUN(ppp->active_filter, skb) == 0))
1853 __skb_pull(skb, 2);
1860 kfree_skb(skb);
1863 skb_pull_rcsum(skb, 2);
1864 skb->dev = ppp->dev;
1865 skb->protocol = htons(npindex_to_ethertype[npi]);
1866 skb_reset_mac_header(skb);
1867 netif_rx(skb);
1873 kfree_skb(skb);
1878 ppp_decompress_frame(struct ppp *ppp, struct sk_buff *skb)
1880 int proto = PPP_PROTO(skb);
1887 if (!pskb_may_pull(skb, skb->len))
1909 len = ppp->rcomp->decompress(ppp->rc_state, skb->data - 2,
1910 skb->len + 2, ns->data, obuff_size);
1920 consume_skb(skb);
1921 skb = ns;
1922 skb_put(skb, len);
1923 skb_pull(skb, 2); /* pull off the A/C bytes */
1929 ppp->rcomp->incomp(ppp->rc_state, skb->data - 2,
1930 skb->len + 2);
1933 return skb;
1938 return skb;
1948 ppp_receive_mp_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
1954 if (!pskb_may_pull(skb, mphdrlen + 1) || ppp->mrru == 0)
1959 seq = ((skb->data[2] & 0x0f) << 8) | skb->data[3];
1962 seq = (skb->data[3] << 16) | (skb->data[4] << 8)| skb->data[5];
1965 PPP_MP_CB(skb)->BEbits = skb->data[2];
1966 skb_pull(skb, mphdrlen); /* pull off PPP and MP headers */
1971 if ((PPP_MP_CB(skb)->BEbits & B) && (skb->data[0] & 1))
1972 *skb_push(skb, 1) = 0;
1983 PPP_MP_CB(skb)->sequence = seq;
1991 kfree_skb(skb);
2013 ppp_mp_insert(ppp, skb);
2024 while ((skb = ppp_mp_reconstruct(ppp))) {
2025 if (pskb_may_pull(skb, 2))
2026 ppp_receive_nonmp_frame(ppp, skb);
2029 kfree_skb(skb);
2037 kfree_skb(skb);
2046 ppp_mp_insert(struct ppp *ppp, struct sk_buff *skb)
2050 u32 seq = PPP_MP_CB(skb)->sequence;
2058 __skb_queue_before(list, p, skb);
2075 struct sk_buff *skb = NULL;
2085 /* this can't happen, anyway ignore the skb */
2168 /* If we have a complete packet, copy it all into one skb. */
2193 skb = head;
2195 struct sk_buff **fragpp = &skb_shinfo(skb)->frag_list;
2197 __skb_unlink(skb, list);
2204 skb->len += p->len;
2205 skb->data_len += p->len;
2206 skb->truesize += p->truesize;
2212 __skb_unlink(skb, list);
2218 return skb;
2441 ppp_ccp_peek(struct ppp *ppp, struct sk_buff *skb, int inbound)
2446 if (!pskb_may_pull(skb, CCP_HDRLEN + 2))
2448 dp = skb->data + 2;
2482 if (!pskb_may_pull(skb, len + 2))