Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}