]> Pileus Git - ~andy/linux/blobdiff - drivers/infiniband/ulp/ipoib/ipoib_main.c
Merge branch 'for-3.11' of git://linux-nfs.org/~bfields/linux
[~andy/linux] / drivers / infiniband / ulp / ipoib / ipoib_main.c
index 31dd2a7a880f7cbe0544d6c3f4f890d862fbb914..c6f71a88c55ca9649b6098cc81d64de229857055 100644 (file)
@@ -730,7 +730,8 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
                if ((header->proto != htons(ETH_P_IP)) &&
                    (header->proto != htons(ETH_P_IPV6)) &&
                    (header->proto != htons(ETH_P_ARP)) &&
-                   (header->proto != htons(ETH_P_RARP))) {
+                   (header->proto != htons(ETH_P_RARP)) &&
+                   (header->proto != htons(ETH_P_TIPC))) {
                        /* ethertype not supported by IPoIB */
                        ++dev->stats.tx_dropped;
                        dev_kfree_skb_any(skb);
@@ -751,6 +752,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
        switch (header->proto) {
        case htons(ETH_P_IP):
        case htons(ETH_P_IPV6):
+       case htons(ETH_P_TIPC):
                neigh = ipoib_neigh_get(dev, cb->hwaddr);
                if (unlikely(!neigh)) {
                        neigh_add_path(skb, cb->hwaddr, dev);
@@ -1459,7 +1461,7 @@ static ssize_t create_child(struct device *dev,
        if (sscanf(buf, "%i", &pkey) != 1)
                return -EINVAL;
 
-       if (pkey < 0 || pkey > 0xffff)
+       if (pkey <= 0 || pkey > 0xffff || pkey == 0x8000)
                return -EINVAL;
 
        /*