The datapath doesn't set the skb 'pkt_type' field for packets received from the userspace, and thus their pkt_type is always PACKET_HOST even for Ethernet broadcast and multicast packets. Though there don't seem to be many users of pkt_type in the Linux kernel, I encountered a third-party driver that relies on that field. This patch fixes this issue.
Signed-off-by: Tadaaki Nagao <[email protected]> --- datapath/datapath.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/datapath/datapath.c b/datapath/datapath.c index c83ce16..9857ecc 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -765,9 +765,15 @@ static int ovs_packet_cmd_execute(struct sk_buff *skb, struct genl_info *info) skb_reset_mac_header(packet); eth = eth_hdr(packet); - /* Normally, setting the skb 'protocol' field would be handled by a - * call to eth_type_trans(), but it assumes there's a sending - * device, which we may not have. */ + /* Normally, setting the skb 'pkt_type' and 'protocol' field would + * be handled by a call to eth_type_trans(), but it assumes there's + * a sending device, which we may not have. */ + if (is_multicast_ether_addr(eth->h_dest)) { + if (is_broadcast_ether_addr(eth->h_dest)) + packet->pkt_type = PACKET_BROADCAST; + else + packet->pkt_type = PACKET_MULTICAST; + } if (ntohs(eth->h_proto) >= 1536) packet->protocol = eth->h_proto; else -- 1.7.9.5 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
