static struct sk_buff *rmnet_usb_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) { struct QMI_QOS_HDR_S *qmih; if (test_bit(RMNET_MODE_QOS, &dev->data[0])) { if (test_bit(RMNET_MODE_ALIGNED_QOS, &dev->data[0])) { qmih = (struct QMI_QOS_HDR_S *) skb_push(skb, sizeof(struct QMI_QOS_ALIGNED_HDR_S)); } else { qmih = (struct QMI_QOS_HDR_S *) skb_push(skb, sizeof(struct QMI_QOS_HDR_S)); } qmih->version = 1; qmih->flags = 0; qmih->flow_id = skb->mark; } if (dev->data[4]) skb = rmnet_usb_data_mux(skb, dev->data[3]); if (skb) DBG1("[%s] Tx packet #%lu len=%d mark=0x%x\n", dev->net->name, dev->net->stats.tx_packets, skb->len, skb->mark); return skb; }
static struct sk_buff *rmnet_usb_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) { struct QMI_QOS_HDR_S *qmih; struct mux_hdr *hdr; unsigned int len_before; unsigned int len_after; char event[128]; bool muxing = false; if ( skb != NULL ) { len_before = skb->len; } if ( !skb ) { pr_err("%s: skb is null\n", __func__); goto out; } if (test_bit(RMNET_MODE_QOS, &dev->data[0])) { if (test_bit(RMNET_MODE_ALIGNED_QOS, &dev->data[0])) { qmih = (struct QMI_QOS_HDR_S *) skb_push(skb, sizeof(struct QMI_QOS_ALIGNED_HDR_S)); } else { qmih = (struct QMI_QOS_HDR_S *) skb_push(skb, sizeof(struct QMI_QOS_HDR_S)); } qmih->version = 1; qmih->flags = 0; qmih->flow_id = skb->mark; } if (skb && dev->data[4]) { muxing = true; skb = rmnet_usb_data_mux(skb, dev->data[3]); } if (skb) DBG1("[%s] Tx packet #%lu len=%d mark=0x%x\n", dev->net->name, dev->net->stats.tx_packets, skb->len, skb->mark); if (!muxing) goto out; hdr = (struct mux_hdr *)skb->data; len_after = skb->len; snprintf(event, 128, "skb=%p,len1=%d, len2=%d, mux_id=%d, pad_info=%d, pkt_len_w_pad=%d", skb, len_before, len_after, hdr->mux_id, hdr->padding_info , hdr->pkt_len_w_padding); dbg_log_event_debug(dev, event); out: return skb; }