net: qualcomm: rmnet: Process packets over ethernet
authorSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Tue, 12 Dec 2017 00:30:13 +0000 (17:30 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 13 Dec 2017 19:01:08 +0000 (14:01 -0500)
Add support to send and receive packets over ethernet.
An example of usage is testing the data path on UML. This can be
achieved by setting up two UML instances in multicast mode and
associating rmnet over the UML ethernet device.

Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c

index a46053ce6b241defa69c22c6fa3b15cd243b9d66..05539321ba3ab4d00319a06a897d8548350653d4 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <linux/netdevice.h>
 #include <linux/netdev_features.h>
+#include <linux/if_arp.h>
 #include "rmnet_private.h"
 #include "rmnet_config.h"
 #include "rmnet_vnd.h"
@@ -104,6 +105,15 @@ rmnet_map_ingress_handler(struct sk_buff *skb,
 {
        struct sk_buff *skbn;
 
+       if (skb->dev->type == ARPHRD_ETHER) {
+               if (pskb_expand_head(skb, ETH_HLEN, 0, GFP_KERNEL)) {
+                       kfree_skb(skb);
+                       return;
+               }
+
+               skb_push(skb, ETH_HLEN);
+       }
+
        if (port->ingress_data_format & RMNET_INGRESS_FORMAT_DEAGGREGATION) {
                while ((skbn = rmnet_map_deaggregate(skb)) != NULL)
                        __rmnet_map_ingress_handler(skbn, port);