#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/if_arp.h>
#include <linux/if_bridge.h>
#include <linux/if_vlan.h>
#include <linux/kernel.h>
#include <linux/rtnetlink.h>
#include <linux/skbuff.h>
#include <linux/openvswitch.h>
#include <linux/export.h>
#include <net/ip_tunnels.h>
#include <net/rtnetlink.h>
#include "vport-internal_dev.h"
#include "vport-netdev.h"
static struct vport_ops ovs_netdev_vport_ops;
static void netdev_port_receive(struct sk_buff *skb)
vport = ovs_netdev_get_vport(skb->dev);
if (unlikely(skb_warn_if_lro(skb)))
skb = skb_share_check(skb, GFP_ATOMIC);
if (skb->dev->type == ARPHRD_ETHER) {
skb_postpush_rcsum(skb, skb->data, ETH_HLEN);
ovs_vport_receive(vport, skb, skb_tunnel_info(skb));
static rx_handler_result_t netdev_frame_hook(struct sk_buff **pskb)
struct sk_buff *skb = *pskb;
if (unlikely(skb->pkt_type == PACKET_LOOPBACK))