mirror of
https://github.com/torvalds/linux.git
synced 2024-12-17 00:21:32 +00:00
RDMA/cxgb3: Fail loopback connections
The cxgb3 HW and driver don't support loopback RDMA connections. So fail any connection attempt where the destination address is local. Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
7c7a9bccd2
commit
8704e9a879
@ -35,6 +35,7 @@
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/inetdevice.h>
|
||||
|
||||
#include <net/neighbour.h>
|
||||
#include <net/netevent.h>
|
||||
@ -1784,6 +1785,17 @@ err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int is_loopback_dst(struct iw_cm_id *cm_id)
|
||||
{
|
||||
struct net_device *dev;
|
||||
|
||||
dev = ip_dev_find(&init_net, cm_id->remote_addr.sin_addr.s_addr);
|
||||
if (!dev)
|
||||
return 0;
|
||||
dev_put(dev);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
|
||||
{
|
||||
int err = 0;
|
||||
@ -1791,6 +1803,11 @@ int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
|
||||
struct iwch_ep *ep;
|
||||
struct rtable *rt;
|
||||
|
||||
if (is_loopback_dst(cm_id)) {
|
||||
err = -ENOSYS;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ep = alloc_ep(sizeof(*ep), GFP_KERNEL);
|
||||
if (!ep) {
|
||||
printk(KERN_ERR MOD "%s - cannot alloc ep.\n", __FUNCTION__);
|
||||
|
Loading…
Reference in New Issue
Block a user