Merge branch 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
[pandora-kernel.git] / drivers / net / macvlan.c
index 376e3e9..7413497 100644 (file)
@@ -169,6 +169,9 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
 
        port = macvlan_port_get_rcu(skb->dev);
        if (is_multicast_ether_addr(eth->h_dest)) {
+               skb = ip_check_defrag(skb, IP_DEFRAG_MACVLAN);
+               if (!skb)
+                       return RX_HANDLER_CONSUMED;
                src = macvlan_hash_lookup(port, eth->h_source);
                if (!src)
                        /* frame comes from an external address */
@@ -189,6 +192,13 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
                         */
                        macvlan_broadcast(skb, port, src->dev,
                                          MACVLAN_MODE_VEPA);
+               else {
+                       /* forward to original port. */
+                       vlan = src;
+                       ret = macvlan_broadcast_one(skb, vlan, eth, 0);
+                       goto out;
+               }
+
                return RX_HANDLER_PASS;
        }
 
@@ -543,7 +553,8 @@ static int macvlan_ethtool_get_settings(struct net_device *dev,
                                        struct ethtool_cmd *cmd)
 {
        const struct macvlan_dev *vlan = netdev_priv(dev);
-       return dev_ethtool_get_settings(vlan->lowerdev, cmd);
+
+       return __ethtool_get_settings(vlan->lowerdev, cmd);
 }
 
 static const struct ethtool_ops macvlan_ethtool_ops = {
@@ -561,7 +572,7 @@ static const struct net_device_ops macvlan_netdev_ops = {
        .ndo_change_mtu         = macvlan_change_mtu,
        .ndo_change_rx_flags    = macvlan_change_rx_flags,
        .ndo_set_mac_address    = macvlan_set_mac_address,
-       .ndo_set_multicast_list = macvlan_set_multicast_list,
+       .ndo_set_rx_mode        = macvlan_set_multicast_list,
        .ndo_get_stats64        = macvlan_dev_get_stats64,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_vlan_rx_add_vid    = macvlan_vlan_rx_add_vid,