| .. | .. |
|---|
| 76 | 76 | .v = MLX5_GET(fte_match_set_lyr_2_4, value, dmac_47_16) << 16 | |
|---|
| 77 | 77 | MLX5_GET(fte_match_set_lyr_2_4, value, dmac_15_0)}; |
|---|
| 78 | 78 | MASK_VAL_L2(u16, ethertype, ethertype); |
|---|
| 79 | + MASK_VAL_L2(u8, ip_version, ip_version); |
|---|
| 79 | 80 | |
|---|
| 80 | 81 | PRINT_MASKED_VALP(smac, u8 *, p, "%pM"); |
|---|
| 81 | 82 | PRINT_MASKED_VALP(dmac, u8 *, p, "%pM"); |
|---|
| 82 | 83 | PRINT_MASKED_VAL(ethertype, p, "%04x"); |
|---|
| 83 | 84 | |
|---|
| 84 | | - if (ethertype.m == 0xffff) { |
|---|
| 85 | | - if (ethertype.v == ETH_P_IP) { |
|---|
| 85 | + if ((ethertype.m == 0xffff && ethertype.v == ETH_P_IP) || |
|---|
| 86 | + (ip_version.m == 0xf && ip_version.v == 4)) { |
|---|
| 86 | 87 | #define MASK_VAL_L2_BE(type, name, fld) \ |
|---|
| 87 | 88 | MASK_VAL_BE(type, fte_match_set_lyr_2_4, name, mask, value, fld) |
|---|
| 88 | | - MASK_VAL_L2_BE(u32, src_ipv4, |
|---|
| 89 | | - src_ipv4_src_ipv6.ipv4_layout.ipv4); |
|---|
| 90 | | - MASK_VAL_L2_BE(u32, dst_ipv4, |
|---|
| 91 | | - dst_ipv4_dst_ipv6.ipv4_layout.ipv4); |
|---|
| 89 | + MASK_VAL_L2_BE(u32, src_ipv4, |
|---|
| 90 | + src_ipv4_src_ipv6.ipv4_layout.ipv4); |
|---|
| 91 | + MASK_VAL_L2_BE(u32, dst_ipv4, |
|---|
| 92 | + dst_ipv4_dst_ipv6.ipv4_layout.ipv4); |
|---|
| 92 | 93 | |
|---|
| 93 | | - PRINT_MASKED_VALP(src_ipv4, typeof(&src_ipv4.v), p, |
|---|
| 94 | | - "%pI4"); |
|---|
| 95 | | - PRINT_MASKED_VALP(dst_ipv4, typeof(&dst_ipv4.v), p, |
|---|
| 96 | | - "%pI4"); |
|---|
| 97 | | - } else if (ethertype.v == ETH_P_IPV6) { |
|---|
| 98 | | - static const struct in6_addr full_ones = { |
|---|
| 99 | | - .in6_u.u6_addr32 = {__constant_htonl(0xffffffff), |
|---|
| 100 | | - __constant_htonl(0xffffffff), |
|---|
| 101 | | - __constant_htonl(0xffffffff), |
|---|
| 102 | | - __constant_htonl(0xffffffff)}, |
|---|
| 103 | | - }; |
|---|
| 104 | | - DECLARE_MASK_VAL(struct in6_addr, src_ipv6); |
|---|
| 105 | | - DECLARE_MASK_VAL(struct in6_addr, dst_ipv6); |
|---|
| 94 | + PRINT_MASKED_VALP(src_ipv4, typeof(&src_ipv4.v), p, |
|---|
| 95 | + "%pI4"); |
|---|
| 96 | + PRINT_MASKED_VALP(dst_ipv4, typeof(&dst_ipv4.v), p, |
|---|
| 97 | + "%pI4"); |
|---|
| 98 | + } else if ((ethertype.m == 0xffff && ethertype.v == ETH_P_IPV6) || |
|---|
| 99 | + (ip_version.m == 0xf && ip_version.v == 6)) { |
|---|
| 100 | + static const struct in6_addr full_ones = { |
|---|
| 101 | + .in6_u.u6_addr32 = {__constant_htonl(0xffffffff), |
|---|
| 102 | + __constant_htonl(0xffffffff), |
|---|
| 103 | + __constant_htonl(0xffffffff), |
|---|
| 104 | + __constant_htonl(0xffffffff)}, |
|---|
| 105 | + }; |
|---|
| 106 | + DECLARE_MASK_VAL(struct in6_addr, src_ipv6); |
|---|
| 107 | + DECLARE_MASK_VAL(struct in6_addr, dst_ipv6); |
|---|
| 106 | 108 | |
|---|
| 107 | | - memcpy(src_ipv6.m.in6_u.u6_addr8, |
|---|
| 108 | | - MLX5_ADDR_OF(fte_match_set_lyr_2_4, mask, |
|---|
| 109 | | - src_ipv4_src_ipv6.ipv6_layout.ipv6), |
|---|
| 110 | | - sizeof(src_ipv6.m)); |
|---|
| 111 | | - memcpy(dst_ipv6.m.in6_u.u6_addr8, |
|---|
| 112 | | - MLX5_ADDR_OF(fte_match_set_lyr_2_4, mask, |
|---|
| 113 | | - dst_ipv4_dst_ipv6.ipv6_layout.ipv6), |
|---|
| 114 | | - sizeof(dst_ipv6.m)); |
|---|
| 115 | | - memcpy(src_ipv6.v.in6_u.u6_addr8, |
|---|
| 116 | | - MLX5_ADDR_OF(fte_match_set_lyr_2_4, value, |
|---|
| 117 | | - src_ipv4_src_ipv6.ipv6_layout.ipv6), |
|---|
| 118 | | - sizeof(src_ipv6.v)); |
|---|
| 119 | | - memcpy(dst_ipv6.v.in6_u.u6_addr8, |
|---|
| 120 | | - MLX5_ADDR_OF(fte_match_set_lyr_2_4, value, |
|---|
| 121 | | - dst_ipv4_dst_ipv6.ipv6_layout.ipv6), |
|---|
| 122 | | - sizeof(dst_ipv6.v)); |
|---|
| 109 | + memcpy(src_ipv6.m.in6_u.u6_addr8, |
|---|
| 110 | + MLX5_ADDR_OF(fte_match_set_lyr_2_4, mask, |
|---|
| 111 | + src_ipv4_src_ipv6.ipv6_layout.ipv6), |
|---|
| 112 | + sizeof(src_ipv6.m)); |
|---|
| 113 | + memcpy(dst_ipv6.m.in6_u.u6_addr8, |
|---|
| 114 | + MLX5_ADDR_OF(fte_match_set_lyr_2_4, mask, |
|---|
| 115 | + dst_ipv4_dst_ipv6.ipv6_layout.ipv6), |
|---|
| 116 | + sizeof(dst_ipv6.m)); |
|---|
| 117 | + memcpy(src_ipv6.v.in6_u.u6_addr8, |
|---|
| 118 | + MLX5_ADDR_OF(fte_match_set_lyr_2_4, value, |
|---|
| 119 | + src_ipv4_src_ipv6.ipv6_layout.ipv6), |
|---|
| 120 | + sizeof(src_ipv6.v)); |
|---|
| 121 | + memcpy(dst_ipv6.v.in6_u.u6_addr8, |
|---|
| 122 | + MLX5_ADDR_OF(fte_match_set_lyr_2_4, value, |
|---|
| 123 | + dst_ipv4_dst_ipv6.ipv6_layout.ipv6), |
|---|
| 124 | + sizeof(dst_ipv6.v)); |
|---|
| 123 | 125 | |
|---|
| 124 | | - if (!memcmp(&src_ipv6.m, &full_ones, sizeof(full_ones))) |
|---|
| 125 | | - trace_seq_printf(p, "src_ipv6=%pI6 ", |
|---|
| 126 | | - &src_ipv6.v); |
|---|
| 127 | | - if (!memcmp(&dst_ipv6.m, &full_ones, sizeof(full_ones))) |
|---|
| 128 | | - trace_seq_printf(p, "dst_ipv6=%pI6 ", |
|---|
| 129 | | - &dst_ipv6.v); |
|---|
| 130 | | - } |
|---|
| 126 | + if (!memcmp(&src_ipv6.m, &full_ones, sizeof(full_ones))) |
|---|
| 127 | + trace_seq_printf(p, "src_ipv6=%pI6 ", |
|---|
| 128 | + &src_ipv6.v); |
|---|
| 129 | + if (!memcmp(&dst_ipv6.m, &full_ones, sizeof(full_ones))) |
|---|
| 130 | + trace_seq_printf(p, "dst_ipv6=%pI6 ", |
|---|
| 131 | + &dst_ipv6.v); |
|---|
| 131 | 132 | } |
|---|
| 132 | 133 | |
|---|
| 133 | 134 | #define PRINT_MASKED_VAL_L2(type, name, fld, p, format) {\ |
|---|
| .. | .. |
|---|
| 161 | 162 | PRINT_MASKED_VAL(name, p, format); \ |
|---|
| 162 | 163 | } |
|---|
| 163 | 164 | DECLARE_MASK_VAL(u64, gre_key) = { |
|---|
| 164 | | - .m = MLX5_GET(fte_match_set_misc, mask, gre_key_h) << 8 | |
|---|
| 165 | | - MLX5_GET(fte_match_set_misc, mask, gre_key_l), |
|---|
| 166 | | - .v = MLX5_GET(fte_match_set_misc, value, gre_key_h) << 8 | |
|---|
| 167 | | - MLX5_GET(fte_match_set_misc, value, gre_key_l)}; |
|---|
| 165 | + .m = MLX5_GET(fte_match_set_misc, mask, gre_key.nvgre.hi) << 8 | |
|---|
| 166 | + MLX5_GET(fte_match_set_misc, mask, gre_key.nvgre.lo), |
|---|
| 167 | + .v = MLX5_GET(fte_match_set_misc, value, gre_key.nvgre.hi) << 8 | |
|---|
| 168 | + MLX5_GET(fte_match_set_misc, value, gre_key.nvgre.lo)}; |
|---|
| 168 | 169 | |
|---|
| 169 | 170 | PRINT_MASKED_VAL(gre_key, p, "%llu"); |
|---|
| 170 | 171 | PRINT_MASKED_VAL_MISC(u32, source_sqn, source_sqn, p, "%u"); |
|---|
| .. | .. |
|---|
| 258 | 259 | return ret; |
|---|
| 259 | 260 | } |
|---|
| 260 | 261 | |
|---|
| 262 | +EXPORT_TRACEPOINT_SYMBOL(mlx5_fs_add_ft); |
|---|
| 263 | +EXPORT_TRACEPOINT_SYMBOL(mlx5_fs_del_ft); |
|---|
| 261 | 264 | EXPORT_TRACEPOINT_SYMBOL(mlx5_fs_add_fg); |
|---|
| 262 | 265 | EXPORT_TRACEPOINT_SYMBOL(mlx5_fs_del_fg); |
|---|
| 263 | 266 | EXPORT_TRACEPOINT_SYMBOL(mlx5_fs_set_fte); |
|---|