aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/ulp
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2013-04-17 02:18:29 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-17 14:18:33 -0400
commitdc850b0e68ad92583098b9a4871183087225972f (patch)
treed5c1121566f250059ee5c5d7baa3948a31fbff09 /drivers/infiniband/ulp
parenta29a194a15df9840b24c6c383a9a9a1236979db5 (diff)
IPoIB: add support for TIPC protocol
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>
Diffstat (limited to 'drivers/infiniband/ulp')
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 8534afd04e7c..554b9063da54 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -730,7 +730,8 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
730 if ((header->proto != htons(ETH_P_IP)) && 730 if ((header->proto != htons(ETH_P_IP)) &&
731 (header->proto != htons(ETH_P_IPV6)) && 731 (header->proto != htons(ETH_P_IPV6)) &&
732 (header->proto != htons(ETH_P_ARP)) && 732 (header->proto != htons(ETH_P_ARP)) &&
733 (header->proto != htons(ETH_P_RARP))) { 733 (header->proto != htons(ETH_P_RARP)) &&
734 (header->proto != htons(ETH_P_TIPC))) {
734 /* ethertype not supported by IPoIB */ 735 /* ethertype not supported by IPoIB */
735 ++dev->stats.tx_dropped; 736 ++dev->stats.tx_dropped;
736 dev_kfree_skb_any(skb); 737 dev_kfree_skb_any(skb);
@@ -751,6 +752,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
751 switch (header->proto) { 752 switch (header->proto) {
752 case htons(ETH_P_IP): 753 case htons(ETH_P_IP):
753 case htons(ETH_P_IPV6): 754 case htons(ETH_P_IPV6):
755 case htons(ETH_P_TIPC):
754 neigh = ipoib_neigh_get(dev, cb->hwaddr); 756 neigh = ipoib_neigh_get(dev, cb->hwaddr);
755 if (unlikely(!neigh)) { 757 if (unlikely(!neigh)) {
756 neigh_add_path(skb, cb->hwaddr, dev); 758 neigh_add_path(skb, cb->hwaddr, dev);