]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
iw_cxgb4: use listening ep tos when accepting new connections
authorSteve Wise <swise@opengridcomputing.com>
Fri, 1 Feb 2019 20:44:37 +0000 (12:44 -0800)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 8 Feb 2019 23:18:06 +0000 (16:18 -0700)
If the parent listening endpoint has a service type set, then use that
when setting up the connection.  This allows server-side applications to
mandate the tos for passive side connections via rdma_set_service_type()
on the listening endpoints.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/cxgb4/cm.c

index 59917eb124daca0cc1b69d934e8d32b6a8661e96..c4e4085430bf0ebf4d73ea299f71fa035914c61e 100644 (file)
@@ -2476,7 +2476,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
        u16 peer_mss = ntohs(req->tcpopt.mss);
        int iptype;
        unsigned short hdrs;
-       u8 tos = PASS_OPEN_TOS_G(ntohl(req->tos_stid));
+       u8 tos;
 
        parent_ep = (struct c4iw_ep *)get_ep_from_stid(dev, stid);
        if (!parent_ep) {
@@ -2490,6 +2490,11 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
                goto reject;
        }
 
+       if (parent_ep->com.cm_id->tos_set)
+               tos = parent_ep->com.cm_id->tos;
+       else
+               tos = PASS_OPEN_TOS_G(ntohl(req->tos_stid));
+
        cxgb_get_4tuple(req, parent_ep->com.dev->rdev.lldi.adapter_type,
                        &iptype, local_ip, peer_ip, &local_port, &peer_port);
 
@@ -2509,7 +2514,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
                         ntohs(peer_port), peer_mss);
                dst = cxgb_find_route6(&dev->rdev.lldi, get_real_dev,
                                local_ip, peer_ip, local_port, peer_port,
-                               PASS_OPEN_TOS_G(ntohl(req->tos_stid)),
+                               tos,
                                ((struct sockaddr_in6 *)
                                 &parent_ep->com.local_addr)->sin6_scope_id);
        }