net: mhi: Add raw IP mode support
authorLoic Poulain <loic.poulain@linaro.org>
Tue, 29 Dec 2020 09:04:54 +0000 (10:04 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 5 Jan 2021 23:37:29 +0000 (15:37 -0800)
MHI net is protocol agnostic, the payload protocol depends on the modem
configuration, which can be either RMNET (IP muxing and aggregation) or
raw IP. This patch adds support for incomming IPv4/IPv6 packets, that
was previously unconditionnaly reported as RMNET packets.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/mhi_net.c

index fa41d8c42f05f1dc0ffa437a58ccb705ab518bf2..5f3a4cc92a880f33b3f155f832adb8b65380c456 100644 (file)
@@ -122,7 +122,7 @@ static const struct net_device_ops mhi_netdev_ops = {
 static void mhi_net_setup(struct net_device *ndev)
 {
        ndev->header_ops = NULL;  /* No header */
-       ndev->type = ARPHRD_NONE; /* QMAP... */
+       ndev->type = ARPHRD_RAWIP;
        ndev->hard_header_len = 0;
        ndev->addr_len = 0;
        ndev->flags = IFF_POINTOPOINT | IFF_NOARP;
@@ -158,7 +158,18 @@ static void mhi_net_dl_callback(struct mhi_device *mhi_dev,
                u64_stats_add(&mhi_netdev->stats.rx_bytes, mhi_res->bytes_xferd);
                u64_stats_update_end(&mhi_netdev->stats.rx_syncp);
 
-               skb->protocol = htons(ETH_P_MAP);
+               switch (skb->data[0] & 0xf0) {
+               case 0x40:
+                       skb->protocol = htons(ETH_P_IP);
+                       break;
+               case 0x60:
+                       skb->protocol = htons(ETH_P_IPV6);
+                       break;
+               default:
+                       skb->protocol = htons(ETH_P_MAP);
+                       break;
+               }
+
                skb_put(skb, mhi_res->bytes_xferd);
                netif_rx(skb);
        }