Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 275694
b: refs/heads/master
c: 6d74eb9
h: refs/heads/master
v: v3
  • Loading branch information
Mark Kamichoff authored and David S. Miller committed Nov 14, 2011
1 parent 69bd487 commit de05cae
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3ac3546e5f17248d961ef0f4a27e75564bf71578
refs/heads/master: 6d74eb9442fb113c97edc88a1c658462db711337
2 changes: 1 addition & 1 deletion trunk/drivers/net/usb/cdc_ether.c
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ static const struct usb_device_id products [] = {
{
USB_DEVICE_AND_INTERFACE_INFO(0x1004, 0x61aa, USB_CLASS_COMM,
USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
.driver_info = (unsigned long)&wwan_info,
.driver_info = 0,
},

/*
Expand Down
25 changes: 11 additions & 14 deletions trunk/drivers/net/usb/lg-vl600.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,11 @@ static int vl600_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
}

frame = (struct vl600_frame_hdr *) buf->data;
/* NOTE: Should check that frame->magic == 0x53544448?
* Otherwise if we receive garbage at the beginning of the frame
* we may end up allocating a huge buffer and saving all the
* future incoming data into it. */
/* Yes, check that frame->magic == 0x53544448 (or 0x44544d48),
* otherwise we may run out of memory w/a bad packet */
if (ntohl(frame->magic) != 0x53544448 &&
ntohl(frame->magic) != 0x44544d48)
goto error;

if (buf->len < sizeof(*frame) ||
buf->len != le32_to_cpup(&frame->len)) {
Expand Down Expand Up @@ -296,6 +297,11 @@ static struct sk_buff *vl600_tx_fixup(struct usbnet *dev,
* overwrite the remaining fields.
*/
packet = (struct vl600_pkt_hdr *) skb->data;
/* The VL600 wants IPv6 packets to have an IPv4 ethertype
* Since this modem only supports IPv4 and IPv6, just set all
* frames to 0x0800 (ETH_P_IP)
*/
packet->h_proto = htons(ETH_P_IP);
memset(&packet->dummy, 0, sizeof(packet->dummy));
packet->len = cpu_to_le32(orig_len);

Expand All @@ -308,21 +314,12 @@ static struct sk_buff *vl600_tx_fixup(struct usbnet *dev,
if (skb->len < full_len) /* Pad */
skb_put(skb, full_len - skb->len);

/* The VL600 wants IPv6 packets to have an IPv4 ethertype
* Check if this is an IPv6 packet, and set the ethertype
* to 0x800
*/
if ((skb->data[sizeof(struct vl600_pkt_hdr *) + 0x22] & 0xf0) == 0x60) {
skb->data[sizeof(struct vl600_pkt_hdr *) + 0x20] = 0x08;
skb->data[sizeof(struct vl600_pkt_hdr *) + 0x21] = 0;
}

return skb;
}

static const struct driver_info vl600_info = {
.description = "LG VL600 modem",
.flags = FLAG_ETHER | FLAG_RX_ASSEMBLE,
.flags = FLAG_RX_ASSEMBLE | FLAG_WWAN,
.bind = vl600_bind,
.unbind = vl600_unbind,
.status = usbnet_cdc_status,
Expand Down

0 comments on commit de05cae

Please sign in to comment.