openvswitch: add processing of L3 packets
Support receiving, extracting flow key and sending of L3 packets (packets without an Ethernet header). Note that even after this patch, non-Ethernet interfaces are still not allowed to be added to bridges. Similarly, netlink interface for sending and receiving L3 packets to/from user space is not in place yet. Based on previous versions by Lorand Jakab and Simon Horman. Signed-off-by: Lorand Jakab <lojakab@cisco.com> Signed-off-by: Simon Horman <simon.horman@netronome.com> Signed-off-by: Jiri Benc <jbenc@redhat.com> Acked-by: Pravin B Shelar <pshelar@ovn.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
1560a074df
commit
5108bbaddc
@@ -485,6 +485,25 @@ void ovs_vport_send(struct vport *vport, struct sk_buff *skb, u8 mac_proto)
|
||||
{
|
||||
int mtu = vport->dev->mtu;
|
||||
|
||||
switch (vport->dev->type) {
|
||||
case ARPHRD_NONE:
|
||||
if (mac_proto == MAC_PROTO_ETHERNET) {
|
||||
skb_reset_network_header(skb);
|
||||
skb_reset_mac_len(skb);
|
||||
skb->protocol = htons(ETH_P_TEB);
|
||||
} else if (mac_proto != MAC_PROTO_NONE) {
|
||||
WARN_ON_ONCE(1);
|
||||
goto drop;
|
||||
}
|
||||
break;
|
||||
case ARPHRD_ETHER:
|
||||
if (mac_proto != MAC_PROTO_ETHERNET)
|
||||
goto drop;
|
||||
break;
|
||||
default:
|
||||
goto drop;
|
||||
}
|
||||
|
||||
if (unlikely(packet_length(skb, vport->dev) > mtu &&
|
||||
!skb_is_gso(skb))) {
|
||||
net_warn_ratelimited("%s: dropped over-mtu packet: %d > %d\n",
|
||||
|
Reference in New Issue
Block a user