]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
IPoIB: add support for TIPC protocol
authorPatrick McHardy <kaber@trash.net>
Wed, 17 Apr 2013 06:18:29 +0000 (06:18 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 Apr 2013 18:18:33 +0000 (14:18 -0400)
Support TIPC in the IPoIB driver. Since IPoIB now keeps track of its own
neighbour entries and doesn't require the packet to have a dst_entry
anymore, the only necessary changes are to:

- not drop multicast TIPC packets because of the unknown ethernet type
- handle unicast TIPC packets similar to IPv4/IPv6 unicast packets

in ipoib_start_xmit().

An alternative would be to remove all ethertype limitations since they're
not necessary anymore, all TIPC needs to know about is ARP and RARP since
it wants to always perform "path find", even if a path is already known.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/infiniband/ulp/ipoib/ipoib_main.c

index 8534afd04e7cbbef29b541202f6fd41da2e7fcfa..554b9063da5492aab4763051146121eca6774e84 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);