mirror of
https://github.com/torvalds/linux.git
synced 2024-11-30 16:11:38 +00:00
RDMA/rxe: Improve loopback marking
Currently a packet is marked for loopback only if the source and destination addresses equals. This is not enough when multiple gids are present in rxe device's gid table and the traffic is from one gid to another. Fix it by marking the packet for loopback if the destination MAC address is equal to the source MAC address. Signed-off-by: Kamal Heib <kamalheib1@gmail.com> Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com> Tested-by: Yuval Shaia <yuval.shaia@oracle.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
fa40718804
commit
668aa15b5b
@ -38,6 +38,7 @@ void rxe_init_av(struct rdma_ah_attr *attr, struct rxe_av *av)
|
||||
{
|
||||
rxe_av_from_attr(rdma_ah_get_port_num(attr), av, attr);
|
||||
rxe_av_fill_ip_info(av, attr);
|
||||
memcpy(av->dmac, attr->roce.dmac, ETH_ALEN);
|
||||
}
|
||||
|
||||
int rxe_av_chk_attr(struct rxe_dev *rxe, struct rdma_ah_attr *attr)
|
||||
|
@ -384,9 +384,6 @@ static int prepare4(struct rxe_pkt_info *pkt, struct sk_buff *skb,
|
||||
return -EHOSTUNREACH;
|
||||
}
|
||||
|
||||
if (!memcmp(saddr, daddr, sizeof(*daddr)))
|
||||
pkt->mask |= RXE_LOOPBACK_MASK;
|
||||
|
||||
prepare_udp_hdr(skb, cpu_to_be16(qp->src_port),
|
||||
cpu_to_be16(ROCE_V2_UDP_DPORT));
|
||||
|
||||
@ -411,9 +408,6 @@ static int prepare6(struct rxe_pkt_info *pkt, struct sk_buff *skb,
|
||||
return -EHOSTUNREACH;
|
||||
}
|
||||
|
||||
if (!memcmp(saddr, daddr, sizeof(*daddr)))
|
||||
pkt->mask |= RXE_LOOPBACK_MASK;
|
||||
|
||||
prepare_udp_hdr(skb, cpu_to_be16(qp->src_port),
|
||||
cpu_to_be16(ROCE_V2_UDP_DPORT));
|
||||
|
||||
@ -437,6 +431,9 @@ int rxe_prepare(struct rxe_pkt_info *pkt, struct sk_buff *skb, u32 *crc)
|
||||
|
||||
*crc = rxe_icrc_hdr(pkt, skb);
|
||||
|
||||
if (ether_addr_equal(skb->dev->dev_addr, av->dmac))
|
||||
pkt->mask |= RXE_LOOPBACK_MASK;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -58,8 +58,7 @@ struct rxe_global_route {
|
||||
struct rxe_av {
|
||||
__u8 port_num;
|
||||
__u8 network_type;
|
||||
__u16 reserved1;
|
||||
__u32 reserved2;
|
||||
__u8 dmac[6];
|
||||
struct rxe_global_route grh;
|
||||
union {
|
||||
struct sockaddr_in _sockaddr_in;
|
||||
|
Loading…
Reference in New Issue
Block a user