Loading drivers/infiniband/hw/cxgb4/Kconfig +1 −0 Original line number Diff line number Diff line config INFINIBAND_CXGB4 tristate "Chelsio T4/T5 RDMA Driver" depends on CHELSIO_T4 && INET && (IPV6 || IPV6=n) select CHELSIO_LIB select GENERIC_ALLOCATOR ---help--- This is an iWARP/RDMA driver for the Chelsio T4 and T5 Loading drivers/infiniband/hw/cxgb4/Makefile +1 −0 Original line number Diff line number Diff line ccflags-y := -Idrivers/net/ethernet/chelsio/cxgb4 ccflags-y += -Idrivers/net/ethernet/chelsio/libcxgb obj-$(CONFIG_INFINIBAND_CXGB4) += iw_cxgb4.o Loading drivers/infiniband/hw/cxgb4/cm.c +3 −38 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ #include <rdma/ib_addr.h> #include <libcxgb_cm.h> #include "iw_cxgb4.h" #include "clip_tbl.h" Loading Loading @@ -2518,42 +2519,6 @@ static void reject_cr(struct c4iw_dev *dev, u32 hwtid, struct sk_buff *skb) return; } static void get_4tuple(struct cpl_pass_accept_req *req, enum chip_type type, int *iptype, __u8 *local_ip, __u8 *peer_ip, __be16 *local_port, __be16 *peer_port) { int eth_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)); int ip_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)); struct iphdr *ip = (struct iphdr *)((u8 *)(req + 1) + eth_len); struct ipv6hdr *ip6 = (struct ipv6hdr *)((u8 *)(req + 1) + eth_len); struct tcphdr *tcp = (struct tcphdr *) ((u8 *)(req + 1) + eth_len + ip_len); if (ip->version == 4) { PDBG("%s saddr 0x%x daddr 0x%x sport %u dport %u\n", __func__, ntohl(ip->saddr), ntohl(ip->daddr), ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 4; memcpy(peer_ip, &ip->saddr, 4); memcpy(local_ip, &ip->daddr, 4); } else { PDBG("%s saddr %pI6 daddr %pI6 sport %u dport %u\n", __func__, ip6->saddr.s6_addr, ip6->daddr.s6_addr, ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 6; memcpy(peer_ip, ip6->saddr.s6_addr, 16); memcpy(local_ip, ip6->daddr.s6_addr, 16); } *peer_port = tcp->source; *local_port = tcp->dest; return; } static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb) { struct c4iw_ep *child_ep = NULL, *parent_ep; Loading Loading @@ -2582,8 +2547,8 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb) goto reject; } get_4tuple(req, parent_ep->com.dev->rdev.lldi.adapter_type, &iptype, local_ip, peer_ip, &local_port, &peer_port); cxgb_get_4tuple(req, parent_ep->com.dev->rdev.lldi.adapter_type, &iptype, local_ip, peer_ip, &local_port, &peer_port); /* Find output route */ if (iptype == 4) { Loading drivers/net/ethernet/chelsio/libcxgb/Makefile +3 −1 Original line number Diff line number Diff line ccflags-y := -Idrivers/net/ethernet/chelsio/cxgb4 obj-$(CONFIG_CHELSIO_LIB) += libcxgb.o libcxgb-y := libcxgb_ppm.o libcxgb-y := libcxgb_ppm.o libcxgb_cm.o drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (c) 2016 Chelsio Communications, Inc. 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 * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #include <linux/tcp.h> #include <linux/ipv6.h> #include "libcxgb_cm.h" void cxgb_get_4tuple(struct cpl_pass_accept_req *req, enum chip_type type, int *iptype, __u8 *local_ip, __u8 *peer_ip, __be16 *local_port, __be16 *peer_port) { int eth_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)); int ip_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)); struct iphdr *ip = (struct iphdr *)((u8 *)(req + 1) + eth_len); struct ipv6hdr *ip6 = (struct ipv6hdr *)((u8 *)(req + 1) + eth_len); struct tcphdr *tcp = (struct tcphdr *) ((u8 *)(req + 1) + eth_len + ip_len); if (ip->version == 4) { pr_debug("%s saddr 0x%x daddr 0x%x sport %u dport %u\n", __func__, ntohl(ip->saddr), ntohl(ip->daddr), ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 4; memcpy(peer_ip, &ip->saddr, 4); memcpy(local_ip, &ip->daddr, 4); } else { pr_debug("%s saddr %pI6 daddr %pI6 sport %u dport %u\n", __func__, ip6->saddr.s6_addr, ip6->daddr.s6_addr, ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 6; memcpy(peer_ip, ip6->saddr.s6_addr, 16); memcpy(local_ip, ip6->daddr.s6_addr, 16); } *peer_port = tcp->source; *local_port = tcp->dest; } EXPORT_SYMBOL(cxgb_get_4tuple); Loading
drivers/infiniband/hw/cxgb4/Kconfig +1 −0 Original line number Diff line number Diff line config INFINIBAND_CXGB4 tristate "Chelsio T4/T5 RDMA Driver" depends on CHELSIO_T4 && INET && (IPV6 || IPV6=n) select CHELSIO_LIB select GENERIC_ALLOCATOR ---help--- This is an iWARP/RDMA driver for the Chelsio T4 and T5 Loading
drivers/infiniband/hw/cxgb4/Makefile +1 −0 Original line number Diff line number Diff line ccflags-y := -Idrivers/net/ethernet/chelsio/cxgb4 ccflags-y += -Idrivers/net/ethernet/chelsio/libcxgb obj-$(CONFIG_INFINIBAND_CXGB4) += iw_cxgb4.o Loading
drivers/infiniband/hw/cxgb4/cm.c +3 −38 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ #include <rdma/ib_addr.h> #include <libcxgb_cm.h> #include "iw_cxgb4.h" #include "clip_tbl.h" Loading Loading @@ -2518,42 +2519,6 @@ static void reject_cr(struct c4iw_dev *dev, u32 hwtid, struct sk_buff *skb) return; } static void get_4tuple(struct cpl_pass_accept_req *req, enum chip_type type, int *iptype, __u8 *local_ip, __u8 *peer_ip, __be16 *local_port, __be16 *peer_port) { int eth_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)); int ip_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)); struct iphdr *ip = (struct iphdr *)((u8 *)(req + 1) + eth_len); struct ipv6hdr *ip6 = (struct ipv6hdr *)((u8 *)(req + 1) + eth_len); struct tcphdr *tcp = (struct tcphdr *) ((u8 *)(req + 1) + eth_len + ip_len); if (ip->version == 4) { PDBG("%s saddr 0x%x daddr 0x%x sport %u dport %u\n", __func__, ntohl(ip->saddr), ntohl(ip->daddr), ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 4; memcpy(peer_ip, &ip->saddr, 4); memcpy(local_ip, &ip->daddr, 4); } else { PDBG("%s saddr %pI6 daddr %pI6 sport %u dport %u\n", __func__, ip6->saddr.s6_addr, ip6->daddr.s6_addr, ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 6; memcpy(peer_ip, ip6->saddr.s6_addr, 16); memcpy(local_ip, ip6->daddr.s6_addr, 16); } *peer_port = tcp->source; *local_port = tcp->dest; return; } static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb) { struct c4iw_ep *child_ep = NULL, *parent_ep; Loading Loading @@ -2582,8 +2547,8 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb) goto reject; } get_4tuple(req, parent_ep->com.dev->rdev.lldi.adapter_type, &iptype, local_ip, peer_ip, &local_port, &peer_port); cxgb_get_4tuple(req, parent_ep->com.dev->rdev.lldi.adapter_type, &iptype, local_ip, peer_ip, &local_port, &peer_port); /* Find output route */ if (iptype == 4) { Loading
drivers/net/ethernet/chelsio/libcxgb/Makefile +3 −1 Original line number Diff line number Diff line ccflags-y := -Idrivers/net/ethernet/chelsio/cxgb4 obj-$(CONFIG_CHELSIO_LIB) += libcxgb.o libcxgb-y := libcxgb_ppm.o libcxgb-y := libcxgb_ppm.o libcxgb_cm.o
drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (c) 2016 Chelsio Communications, Inc. 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 * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #include <linux/tcp.h> #include <linux/ipv6.h> #include "libcxgb_cm.h" void cxgb_get_4tuple(struct cpl_pass_accept_req *req, enum chip_type type, int *iptype, __u8 *local_ip, __u8 *peer_ip, __be16 *local_port, __be16 *peer_port) { int eth_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len)); int ip_len = (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) ? IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)) : T6_IP_HDR_LEN_G(be32_to_cpu(req->hdr_len)); struct iphdr *ip = (struct iphdr *)((u8 *)(req + 1) + eth_len); struct ipv6hdr *ip6 = (struct ipv6hdr *)((u8 *)(req + 1) + eth_len); struct tcphdr *tcp = (struct tcphdr *) ((u8 *)(req + 1) + eth_len + ip_len); if (ip->version == 4) { pr_debug("%s saddr 0x%x daddr 0x%x sport %u dport %u\n", __func__, ntohl(ip->saddr), ntohl(ip->daddr), ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 4; memcpy(peer_ip, &ip->saddr, 4); memcpy(local_ip, &ip->daddr, 4); } else { pr_debug("%s saddr %pI6 daddr %pI6 sport %u dport %u\n", __func__, ip6->saddr.s6_addr, ip6->daddr.s6_addr, ntohs(tcp->source), ntohs(tcp->dest)); *iptype = 6; memcpy(peer_ip, ip6->saddr.s6_addr, 16); memcpy(local_ip, ip6->daddr.s6_addr, 16); } *peer_port = tcp->source; *local_port = tcp->dest; } EXPORT_SYMBOL(cxgb_get_4tuple);