Lines Matching defs:pBuf

143 static void     vboxNetFltLinuxForwardToIntNet(PVBOXNETFLTINS pThis, struct sk_buff *pBuf);
540 * @param pBuf The sk_buff.
542 DECLINLINE(bool) vboxNetFltLinuxSkBufIsOur(struct sk_buff *pBuf)
544 return VBOXNETFLT_SKB_TAG(pBuf) == VBOXNETFLT_CB_TAG(pBuf);
734 * @param pBuf The sk_buff.
743 DECLINLINE(void) vboxNetFltLinuxSkBufToSG(PVBOXNETFLTINS pThis, struct sk_buff *pBuf, PINTNETSG pSG,
749 Assert(!skb_shinfo(pBuf)->frag_list);
752 IntNetSgInitTempSegs(pSG, pBuf->len, cSegs, 0 /*cSegsUsed*/);
754 IntNetSgInitTempSegsGso(pSG, pBuf->len, cSegs, 0 /*cSegsUsed*/, pGsoCtx);
757 pSG->aSegs[0].cb = skb_headlen(pBuf);
758 pSG->aSegs[0].pv = pBuf->data;
761 for (i = 0; i < skb_shinfo(pBuf)->nr_frags; i++)
763 skb_frag_t *pFrag = &skb_shinfo(pBuf)->frags[i];
772 pSG->aSegs[0].cb = pBuf->len;
773 pSG->aSegs[0].pv = pBuf->data;
804 pSG->cSegsAlloc, pSG->cSegsUsed, skb_shinfo(pBuf)->nr_frags, pBuf->next, skb_shinfo(pBuf)->frag_list, pBuf->pkt_type, fSrc));
821 static int vboxNetFltLinuxPacketHandler(struct sk_buff *pBuf,
826 static int vboxNetFltLinuxPacketHandler(struct sk_buff *pBuf,
833 LogFlow(("vboxNetFltLinuxPacketHandler: pBuf=%p pSkbDev=%p pPacketType=%p\n",
834 pBuf, pSkbDev, pPacketType));
837 pBuf->len, pBuf->data_len, pBuf->truesize, pBuf->next, skb_shinfo(pBuf)->nr_frags, skb_shinfo(pBuf)->gso_size, skb_shinfo(pBuf)->gso_segs, skb_shinfo(pBuf)->gso_type, skb_shinfo(pBuf)->frag_list, pBuf->pkt_type));
839 Log4(("vboxNetFltLinuxPacketHandler: packet dump follows:\n%.*Rhxd\n", pBuf->len-pBuf->data_len, skb_mac_header(pBuf)));
843 pBuf->len, pBuf->data_len, pBuf->truesize, pBuf->next, skb_shinfo(pBuf)->nr_frags, skb_shinfo(pBuf)->tso_size, skb_shinfo(pBuf)->tso_segs, skb_shinfo(pBuf)->frag_list, pBuf->pkt_type));
848 if (!pBuf)
851 if (pBuf->pkt_type == PACKET_LOOPBACK)
857 Log2(("vboxNetFltLinuxPacketHandler: dropped loopback packet (cb=%u)\n", pBuf->len));
858 dev_kfree_skb(pBuf); /* We must 'consume' all packets we get (@bugref{6539})! */
867 kfree_skb(pBuf); /* This is a failure, so we use kfree_skb instead of dev_kfree_skb. */
871 Log4(("vboxNetFltLinuxPacketHandler: pBuf->cb dump:\n%.*Rhxd\n", sizeof(pBuf->cb), pBuf->cb));
872 if (vboxNetFltLinuxSkBufIsOur(pBuf))
875 dev_kfree_skb(pBuf);
884 unsigned int uMacLen = pBuf->mac_len;
885 struct sk_buff *pCopy = skb_copy(pBuf, GFP_ATOMIC);
886 dev_kfree_skb(pBuf);
892 pBuf = pCopy;
894 pBuf->mac_len = uMacLen;
897 if (vlan_tx_tag_present(pBuf) && skb_headroom(pBuf) >= VLAN_ETH_HLEN)
899 uint8_t *pMac = (uint8_t*)skb_mac_header(pBuf);
907 pVHdr->h_vlan_TCI = RT_H2N_U16(vlan_tx_tag_get(pBuf));
908 pBuf->mac_header -= VLAN_HLEN;
909 pBuf->mac_len += VLAN_HLEN;
915 pBuf->len, pBuf->data_len, pBuf->truesize, pBuf->next, skb_shinfo(pBuf)->nr_frags, skb_shinfo(pBuf)->gso_size, skb_shinfo(pBuf)->gso_segs, skb_shinfo(pBuf)->gso_type, skb_shinfo(pBuf)->frag_list, pBuf->pkt_type));
917 Log4(("vboxNetFltLinuxPacketHandler: packet dump follows:\n%.*Rhxd\n", pBuf->len-pBuf->data_len, skb_mac_header(pBuf)));
921 pBuf->len, pBuf->data_len, pBuf->truesize, pBuf->next, skb_shinfo(pBuf)->nr_frags, skb_shinfo(pBuf)->tso_size, skb_shinfo(pBuf)->tso_segs, skb_shinfo(pBuf)->frag_list, pBuf->pkt_type));
928 vboxNetFltLinuxForwardToIntNet(pThis, pBuf);
931 skb_queue_tail(&pThis->u.s.XmitQueue, pBuf);
934 &pThis->u.s.XmitTask, pBuf));
945 * @param pBuf The socket buffer.
947 DECLINLINE(unsigned) vboxNetFltLinuxCalcSGSegments(struct sk_buff *pBuf)
950 unsigned cSegs = 1 + skb_shinfo(pBuf)->nr_frags;
956 if (pBuf->len < 60)
971 for (i = 0; i < skb_shinfo(pBuf)->nr_frags; i++)
1290 * @param pBuf The socket buffer.
1293 static int vboxNetFltLinuxForwardSegment(PVBOXNETFLTINS pThis, struct sk_buff *pBuf, uint32_t fSrc)
1296 unsigned cSegs = vboxNetFltLinuxCalcSGSegments(pBuf);
1308 skb_push(pBuf, pBuf->mac_len);
1311 vboxNetFltLinuxSkBufToSG(pThis, pBuf, pSG, cSegs, fSrc, NULL /*pGsoCtx*/);
1332 dev_kfree_skb(pBuf);
1338 * @param pBuf The socket buffer. This is consumed by this function.
1340 static void vboxNetFltLinuxForwardToIntNet(PVBOXNETFLTINS pThis, struct sk_buff *pBuf)
1342 uint32_t fSrc = pBuf->pkt_type == PACKET_OUTGOING ? INTNETTRUNKDIR_HOST : INTNETTRUNKDIR_WIRE;
1345 if (skb_is_gso(pBuf))
1349 pBuf->len, pBuf->data_len, pBuf->truesize, pBuf->next, skb_shinfo(pBuf)->nr_frags, skb_shinfo(pBuf)->gso_size, skb_shinfo(pBuf)->gso_segs, skb_shinfo(pBuf)->gso_type, skb_shinfo(pBuf)->frag_list, pBuf->pkt_type, pBuf->ip_summed));
1351 if ( (skb_shinfo(pBuf)->gso_type & (SKB_GSO_UDP | SKB_GSO_TCPV6 | SKB_GSO_TCPV4))
1352 && vboxNetFltLinuxCanForwardAsGso(pThis, pBuf, fSrc, &GsoCtx) )
1353 vboxNetFltLinuxForwardAsGso(pThis, pBuf, fSrc, &GsoCtx);
1359 struct sk_buff *pSegment = skb_gso_segment(pBuf, 0 /*supported features*/);
1362 dev_kfree_skb(pBuf);
1375 dev_kfree_skb(pBuf);
1381 if (pBuf->ip_summed == CHECKSUM_PARTIAL && pBuf->pkt_type == PACKET_OUTGOING)
1390 unsigned char *tmp = pBuf->h.raw;
1391 if (pBuf->h.raw == pBuf->nh.raw && pBuf->protocol == htons(ETH_P_IP))
1392 pBuf->h.raw = pBuf->nh.raw + pBuf->nh.iph->ihl * 4;
1394 if (VBOX_SKB_CHECKSUM_HELP(pBuf))
1397 dev_kfree_skb(pBuf);
1402 pBuf->h.raw = tmp;
1405 vboxNetFltLinuxForwardSegment(pThis, pBuf, fSrc);
1423 struct sk_buff *pBuf;
1432 while ((pBuf = skb_dequeue(&pThis->u.s.XmitQueue)) != NULL)
1433 vboxNetFltLinuxForwardToIntNet(pThis, pBuf);
1881 struct sk_buff *pBuf = vboxNetFltLinuxSkBufFromSG(pThis, pSG, true);
1882 if (pBuf)
1885 Log4(("vboxNetFltPortOsXmit: pBuf->cb dump:\n%.*Rhxd\n", sizeof(pBuf->cb), pBuf->cb));
1886 Log4(("vboxNetFltPortOsXmit: dev_queue_xmit(%p)\n", pBuf));
1887 err = dev_queue_xmit(pBuf);
1900 struct sk_buff *pBuf = vboxNetFltLinuxSkBufFromSG(pThis, pSG, false);
1901 if (pBuf)
1904 Log4(("vboxNetFltPortOsXmit: pBuf->cb dump:\n%.*Rhxd\n", sizeof(pBuf->cb), pBuf->cb));
1905 Log4(("vboxNetFltPortOsXmit: netif_rx_ni(%p)\n", pBuf));
1906 err = netif_rx_ni(pBuf);