Merge branch 'mlxsw-fixes'
Jiri Pirko says: ==================== mlxsw: spectrum: Configure TTL of "inherit" for offloaded tunnels Petr says: Currently mlxsw only offloads tunnels that are configured with TTL of "inherit" (which is the default). However, Spectrum defaults to 255 and the driver neglects to change the configuration. Thus the tunnel packets from offloaded tunnels always have TTL of 255, even though tunnels with explicit TTL of 255 are never actually offloaded. To fix this, introduce support for TIGCR, the register that keeps the related bits of global tunnel configuration, and use it on first offload to properly configure inheritance of TTL of tunnel packets from overlay packets. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
0247880a09
|
@ -6401,6 +6401,36 @@ static inline void mlxsw_reg_mgpc_pack(char *payload, u32 counter_index,
|
|||
mlxsw_reg_mgpc_opcode_set(payload, opcode);
|
||||
}
|
||||
|
||||
/* TIGCR - Tunneling IPinIP General Configuration Register
|
||||
* -------------------------------------------------------
|
||||
* The TIGCR register is used for setting up the IPinIP Tunnel configuration.
|
||||
*/
|
||||
#define MLXSW_REG_TIGCR_ID 0xA801
|
||||
#define MLXSW_REG_TIGCR_LEN 0x10
|
||||
|
||||
MLXSW_REG_DEFINE(tigcr, MLXSW_REG_TIGCR_ID, MLXSW_REG_TIGCR_LEN);
|
||||
|
||||
/* reg_tigcr_ipip_ttlc
|
||||
* For IPinIP Tunnel encapsulation: whether to copy the ttl from the packet
|
||||
* header.
|
||||
* Access: RW
|
||||
*/
|
||||
MLXSW_ITEM32(reg, tigcr, ttlc, 0x04, 8, 1);
|
||||
|
||||
/* reg_tigcr_ipip_ttl_uc
|
||||
* The TTL for IPinIP Tunnel encapsulation of unicast packets if
|
||||
* reg_tigcr_ipip_ttlc is unset.
|
||||
* Access: RW
|
||||
*/
|
||||
MLXSW_ITEM32(reg, tigcr, ttl_uc, 0x04, 0, 8);
|
||||
|
||||
static inline void mlxsw_reg_tigcr_pack(char *payload, bool ttlc, u8 ttl_uc)
|
||||
{
|
||||
MLXSW_REG_ZERO(tigcr, payload);
|
||||
mlxsw_reg_tigcr_ttlc_set(payload, ttlc);
|
||||
mlxsw_reg_tigcr_ttl_uc_set(payload, ttl_uc);
|
||||
}
|
||||
|
||||
/* SBPR - Shared Buffer Pools Register
|
||||
* -----------------------------------
|
||||
* The SBPR configures and retrieves the shared buffer pools and configuration.
|
||||
|
@ -6881,6 +6911,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = {
|
|||
MLXSW_REG(mcc),
|
||||
MLXSW_REG(mcda),
|
||||
MLXSW_REG(mgpc),
|
||||
MLXSW_REG(tigcr),
|
||||
MLXSW_REG(sbpr),
|
||||
MLXSW_REG(sbcm),
|
||||
MLXSW_REG(sbpm),
|
||||
|
|
|
@ -5896,11 +5896,20 @@ static void mlxsw_sp_rifs_fini(struct mlxsw_sp *mlxsw_sp)
|
|||
kfree(mlxsw_sp->router->rifs);
|
||||
}
|
||||
|
||||
static int
|
||||
mlxsw_sp_ipip_config_tigcr(struct mlxsw_sp *mlxsw_sp)
|
||||
{
|
||||
char tigcr_pl[MLXSW_REG_TIGCR_LEN];
|
||||
|
||||
mlxsw_reg_tigcr_pack(tigcr_pl, true, 0);
|
||||
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(tigcr), tigcr_pl);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_ipips_init(struct mlxsw_sp *mlxsw_sp)
|
||||
{
|
||||
mlxsw_sp->router->ipip_ops_arr = mlxsw_sp_ipip_ops_arr;
|
||||
INIT_LIST_HEAD(&mlxsw_sp->router->ipip_list);
|
||||
return 0;
|
||||
return mlxsw_sp_ipip_config_tigcr(mlxsw_sp);
|
||||
}
|
||||
|
||||
static void mlxsw_sp_ipips_fini(struct mlxsw_sp *mlxsw_sp)
|
||||
|
|
Loading…
Reference in New Issue
Block a user