Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5647263c authored by Tatyana Nikolova's avatar Tatyana Nikolova Committed by Roland Dreier
Browse files

RDMA/nes: Add support for iWARP Port Mapper user space service

parent 30dc5e63
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ MODULE_VERSION(DRV_VERSION);
int max_mtu = 9000;
int interrupt_mod_interval = 0;


/* Interoperability */
int mpa_version = 1;
module_param(mpa_version, int, 0644);
@@ -112,6 +111,16 @@ static struct pci_device_id nes_pci_table[] = {

MODULE_DEVICE_TABLE(pci, nes_pci_table);

/* registered nes netlink callbacks */
static struct ibnl_client_cbs nes_nl_cb_table[] = {
	[RDMA_NL_IWPM_REG_PID] = {.dump = iwpm_register_pid_cb},
	[RDMA_NL_IWPM_ADD_MAPPING] = {.dump = iwpm_add_mapping_cb},
	[RDMA_NL_IWPM_QUERY_MAPPING] = {.dump = iwpm_add_and_query_mapping_cb},
	[RDMA_NL_IWPM_HANDLE_ERR] = {.dump = iwpm_mapping_error_cb},
	[RDMA_NL_IWPM_MAPINFO] = {.dump = iwpm_mapping_info_cb},
	[RDMA_NL_IWPM_MAPINFO_NUM] = {.dump = iwpm_ack_mapping_info_cb}
};

static int nes_inetaddr_event(struct notifier_block *, unsigned long, void *);
static int nes_net_event(struct notifier_block *, unsigned long, void *);
static int nes_notifiers_registered;
@@ -672,6 +681,17 @@ static int nes_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
	}
	nes_notifiers_registered++;

	if (ibnl_add_client(RDMA_NL_NES, RDMA_NL_IWPM_NUM_OPS, nes_nl_cb_table))
		printk(KERN_ERR PFX "%s[%u]: Failed to add netlink callback\n",
			__func__, __LINE__);

	ret = iwpm_init(RDMA_NL_NES);
	if (ret) {
		printk(KERN_ERR PFX "%s: port mapper initialization failed\n",
				pci_name(pcidev));
		goto bail7;
	}

	INIT_DELAYED_WORK(&nesdev->work, nes_recheck_link_status);

	/* Initialize network devices */
@@ -710,6 +730,7 @@ static int nes_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)

	nes_debug(NES_DBG_INIT, "netdev_count=%d, nesadapter->netdev_count=%d\n",
			nesdev->netdev_count, nesdev->nesadapter->netdev_count);
	ibnl_remove_client(RDMA_NL_NES);

	nes_notifiers_registered--;
	if (nes_notifiers_registered == 0) {
@@ -773,6 +794,8 @@ static void nes_remove(struct pci_dev *pcidev)
				nesdev->nesadapter->netdev_count--;
			}
		}
	ibnl_remove_client(RDMA_NL_NES);
	iwpm_exit(RDMA_NL_NES);

	nes_notifiers_registered--;
	if (nes_notifiers_registered == 0) {
+3 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@
#include <rdma/ib_pack.h>
#include <rdma/rdma_cm.h>
#include <rdma/iw_cm.h>
#include <rdma/rdma_netlink.h>
#include <rdma/iw_portmap.h>

#define NES_SEND_FIRST_WRITE

@@ -130,6 +132,7 @@
#define NES_DBG_IW_TX       0x00040000
#define NES_DBG_SHUTDOWN    0x00080000
#define NES_DBG_PAU         0x00100000
#define NES_DBG_NLMSG       0x00200000
#define NES_DBG_RSVD1       0x10000000
#define NES_DBG_RSVD2       0x20000000
#define NES_DBG_RSVD3       0x40000000
+260 −60

File changed.

Preview size limit exceeded, changes collapsed.

+9 −3
Original line number Diff line number Diff line
/*
 * Copyright (c) 2006 - 2011 Intel Corporation.  All rights reserved.
 * Copyright (c) 2006 - 2014 Intel Corporation.  All rights reserved.
 *
 * This software is available to you under a choice of one of two
 * licenses.  You may choose to be licensed under the terms of the GNU
@@ -293,8 +293,8 @@ struct nes_cm_listener {
	struct list_head           list;
	struct nes_cm_core         *cm_core;
	u8                         loc_mac[ETH_ALEN];
	nes_addr_t                 loc_addr;
	u16                        loc_port;
	nes_addr_t                 loc_addr, mapped_loc_addr;
	u16                        loc_port, mapped_loc_port;
	struct iw_cm_id            *cm_id;
	enum nes_cm_conn_type      conn_type;
	atomic_t                   ref_count;
@@ -308,7 +308,9 @@ struct nes_cm_listener {
/* per connection node and node state information */
struct nes_cm_node {
	nes_addr_t                loc_addr, rem_addr;
	nes_addr_t                mapped_loc_addr, mapped_rem_addr;
	u16                       loc_port, rem_port;
	u16                       mapped_loc_port, mapped_rem_port;

	u8                        loc_mac[ETH_ALEN];
	u8                        rem_mac[ETH_ALEN];
@@ -364,6 +366,10 @@ struct nes_cm_info {
	u16 rem_port;
	nes_addr_t loc_addr;
	nes_addr_t rem_addr;
	u16 mapped_loc_port;
	u16 mapped_rem_port;
	nes_addr_t mapped_loc_addr;
	nes_addr_t mapped_rem_addr;

	enum nes_cm_conn_type  conn_type;
	int backlog;