diff mbox series

net: mhi: Add raw IP mode support

Message ID 1607962344-26325-1-git-send-email-loic.poulain@linaro.org
State New
Headers show
Series net: mhi: Add raw IP mode support | expand

Commit Message

Loic Poulain Dec. 14, 2020, 4:12 p.m. UTC
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>

---
 drivers/net/mhi_net.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

-- 
2.7.4

Comments

Jakub Kicinski Dec. 16, 2020, 7:20 p.m. UTC | #1
On Mon, 14 Dec 2020 17:12:24 +0100 Loic Poulain wrote:
> 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>

> ---

>  drivers/net/mhi_net.c | 13 ++++++++++++-

>  1 file changed, 12 insertions(+), 1 deletion(-)

> 

> diff --git a/drivers/net/mhi_net.c b/drivers/net/mhi_net.c

> index 5af6247..a1fb2b8 100644

> --- a/drivers/net/mhi_net.c

> +++ b/drivers/net/mhi_net.c

> @@ -260,7 +260,18 @@ static void mhi_net_dl_callback(struct mhi_device *mhi_dev,

>  		u64_stats_add(&mhi_netdev->stats.rx_bytes, skb->len);

>  		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;

> +		}


This doesn't apply, there is a skb_put() right here in the networking
tree :S Are we missing some other fix?

>  		netif_rx(skb);

>  	}

>
Loic Poulain Dec. 17, 2020, 2:16 p.m. UTC | #2
On Wed, 16 Dec 2020 at 20:20, Jakub Kicinski <kuba@kernel.org> wrote:
>

> On Mon, 14 Dec 2020 17:12:24 +0100 Loic Poulain wrote:

> > 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>

> > ---

> >  drivers/net/mhi_net.c | 13 ++++++++++++-

> >  1 file changed, 12 insertions(+), 1 deletion(-)

> >

> > diff --git a/drivers/net/mhi_net.c b/drivers/net/mhi_net.c

> > index 5af6247..a1fb2b8 100644

> > --- a/drivers/net/mhi_net.c

> > +++ b/drivers/net/mhi_net.c

> > @@ -260,7 +260,18 @@ static void mhi_net_dl_callback(struct mhi_device *mhi_dev,

> >               u64_stats_add(&mhi_netdev->stats.rx_bytes, skb->len);

> >               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;

> > +             }

>

> This doesn't apply, there is a skb_put() right here in the networking

> tree :S Are we missing some other fix?


Yes, my bad, going to rebase that.

Regards,
Loic
diff mbox series

Patch

diff --git a/drivers/net/mhi_net.c b/drivers/net/mhi_net.c
index 5af6247..a1fb2b8 100644
--- a/drivers/net/mhi_net.c
+++ b/drivers/net/mhi_net.c
@@ -260,7 +260,18 @@  static void mhi_net_dl_callback(struct mhi_device *mhi_dev,
 		u64_stats_add(&mhi_netdev->stats.rx_bytes, skb->len);
 		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;
+		}
+
 		netif_rx(skb);
 	}