|
1 | 1 | /*
|
2 | 2 | * drivers/net/ethernet/mellanox/mlxsw/reg.h
|
3 |
| - * Copyright (c) 2015-2017 Mellanox Technologies. All rights reserved. |
| 3 | + * Copyright (c) 2015-2018 Mellanox Technologies. All rights reserved. |
4 | 4 | * Copyright (c) 2015-2016 Ido Schimmel <[email protected]>
|
5 | 5 | * Copyright (c) 2015 Elad Raz <[email protected]>
|
6 | 6 | * Copyright (c) 2015-2017 Jiri Pirko <[email protected]>
|
7 | 7 | * Copyright (c) 2016 Yotam Gigi <[email protected]>
|
8 |
| - * Copyright (c) 2017 Petr Machata <[email protected]> |
| 8 | + * Copyright (c) 2017-2018 Petr Machata <[email protected]> |
9 | 9 | *
|
10 | 10 | * Redistribution and use in source and binary forms, with or without
|
11 | 11 | * modification, are permitted provided that the following conditions are met:
|
@@ -6772,15 +6772,154 @@ MLXSW_ITEM32(reg, mpat, qos, 0x04, 26, 1);
|
6772 | 6772 | */
|
6773 | 6773 | MLXSW_ITEM32(reg, mpat, be, 0x04, 25, 1);
|
6774 | 6774 |
|
| 6775 | +enum mlxsw_reg_mpat_span_type { |
| 6776 | + /* Local SPAN Ethernet. |
| 6777 | + * The original packet is not encapsulated. |
| 6778 | + */ |
| 6779 | + MLXSW_REG_MPAT_SPAN_TYPE_LOCAL_ETH = 0x0, |
| 6780 | + |
| 6781 | + /* Encapsulated Remote SPAN Ethernet L3 GRE. |
| 6782 | + * The packet is encapsulated with GRE header. |
| 6783 | + */ |
| 6784 | + MLXSW_REG_MPAT_SPAN_TYPE_REMOTE_ETH_L3 = 0x3, |
| 6785 | +}; |
| 6786 | + |
| 6787 | +/* reg_mpat_span_type |
| 6788 | + * SPAN type. |
| 6789 | + * Access: RW |
| 6790 | + */ |
| 6791 | +MLXSW_ITEM32(reg, mpat, span_type, 0x04, 0, 4); |
| 6792 | + |
| 6793 | +/* Remote SPAN - Ethernet VLAN |
| 6794 | + * - - - - - - - - - - - - - - |
| 6795 | + */ |
| 6796 | + |
| 6797 | +/* reg_mpat_eth_rspan_vid |
| 6798 | + * Encapsulation header VLAN ID. |
| 6799 | + * Access: RW |
| 6800 | + */ |
| 6801 | +MLXSW_ITEM32(reg, mpat, eth_rspan_vid, 0x18, 0, 12); |
| 6802 | + |
| 6803 | +/* Encapsulated Remote SPAN - Ethernet L2 |
| 6804 | + * - - - - - - - - - - - - - - - - - - - |
| 6805 | + */ |
| 6806 | + |
| 6807 | +enum mlxsw_reg_mpat_eth_rspan_version { |
| 6808 | + MLXSW_REG_MPAT_ETH_RSPAN_VERSION_NO_HEADER = 15, |
| 6809 | +}; |
| 6810 | + |
| 6811 | +/* reg_mpat_eth_rspan_version |
| 6812 | + * RSPAN mirror header version. |
| 6813 | + * Access: RW |
| 6814 | + */ |
| 6815 | +MLXSW_ITEM32(reg, mpat, eth_rspan_version, 0x10, 18, 4); |
| 6816 | + |
| 6817 | +/* reg_mpat_eth_rspan_mac |
| 6818 | + * Destination MAC address. |
| 6819 | + * Access: RW |
| 6820 | + */ |
| 6821 | +MLXSW_ITEM_BUF(reg, mpat, eth_rspan_mac, 0x12, 6); |
| 6822 | + |
| 6823 | +/* reg_mpat_eth_rspan_tp |
| 6824 | + * Tag Packet. Indicates whether the mirroring header should be VLAN tagged. |
| 6825 | + * Access: RW |
| 6826 | + */ |
| 6827 | +MLXSW_ITEM32(reg, mpat, eth_rspan_tp, 0x18, 16, 1); |
| 6828 | + |
| 6829 | +/* Encapsulated Remote SPAN - Ethernet L3 |
| 6830 | + * - - - - - - - - - - - - - - - - - - - |
| 6831 | + */ |
| 6832 | + |
| 6833 | +enum mlxsw_reg_mpat_eth_rspan_protocol { |
| 6834 | + MLXSW_REG_MPAT_ETH_RSPAN_PROTOCOL_IPV4, |
| 6835 | + MLXSW_REG_MPAT_ETH_RSPAN_PROTOCOL_IPV6, |
| 6836 | +}; |
| 6837 | + |
| 6838 | +/* reg_mpat_eth_rspan_protocol |
| 6839 | + * SPAN encapsulation protocol. |
| 6840 | + * Access: RW |
| 6841 | + */ |
| 6842 | +MLXSW_ITEM32(reg, mpat, eth_rspan_protocol, 0x18, 24, 4); |
| 6843 | + |
| 6844 | +/* reg_mpat_eth_rspan_ttl |
| 6845 | + * Encapsulation header Time-to-Live/HopLimit. |
| 6846 | + * Access: RW |
| 6847 | + */ |
| 6848 | +MLXSW_ITEM32(reg, mpat, eth_rspan_ttl, 0x1C, 4, 8); |
| 6849 | + |
| 6850 | +/* reg_mpat_eth_rspan_smac |
| 6851 | + * Source MAC address |
| 6852 | + * Access: RW |
| 6853 | + */ |
| 6854 | +MLXSW_ITEM_BUF(reg, mpat, eth_rspan_smac, 0x22, 6); |
| 6855 | + |
| 6856 | +/* reg_mpat_eth_rspan_dip* |
| 6857 | + * Destination IP address. The IP version is configured by protocol. |
| 6858 | + * Access: RW |
| 6859 | + */ |
| 6860 | +MLXSW_ITEM32(reg, mpat, eth_rspan_dip4, 0x4C, 0, 32); |
| 6861 | +MLXSW_ITEM_BUF(reg, mpat, eth_rspan_dip6, 0x40, 16); |
| 6862 | + |
| 6863 | +/* reg_mpat_eth_rspan_sip* |
| 6864 | + * Source IP address. The IP version is configured by protocol. |
| 6865 | + * Access: RW |
| 6866 | + */ |
| 6867 | +MLXSW_ITEM32(reg, mpat, eth_rspan_sip4, 0x5C, 0, 32); |
| 6868 | +MLXSW_ITEM_BUF(reg, mpat, eth_rspan_sip6, 0x50, 16); |
| 6869 | + |
6775 | 6870 | static inline void mlxsw_reg_mpat_pack(char *payload, u8 pa_id,
|
6776 |
| - u16 system_port, bool e) |
| 6871 | + u16 system_port, bool e, |
| 6872 | + enum mlxsw_reg_mpat_span_type span_type) |
6777 | 6873 | {
|
6778 | 6874 | MLXSW_REG_ZERO(mpat, payload);
|
6779 | 6875 | mlxsw_reg_mpat_pa_id_set(payload, pa_id);
|
6780 | 6876 | mlxsw_reg_mpat_system_port_set(payload, system_port);
|
6781 | 6877 | mlxsw_reg_mpat_e_set(payload, e);
|
6782 | 6878 | mlxsw_reg_mpat_qos_set(payload, 1);
|
6783 | 6879 | mlxsw_reg_mpat_be_set(payload, 1);
|
| 6880 | + mlxsw_reg_mpat_span_type_set(payload, span_type); |
| 6881 | +} |
| 6882 | + |
| 6883 | +static inline void mlxsw_reg_mpat_eth_rspan_pack(char *payload, u16 vid) |
| 6884 | +{ |
| 6885 | + mlxsw_reg_mpat_eth_rspan_vid_set(payload, vid); |
| 6886 | +} |
| 6887 | + |
| 6888 | +static inline void |
| 6889 | +mlxsw_reg_mpat_eth_rspan_l2_pack(char *payload, |
| 6890 | + enum mlxsw_reg_mpat_eth_rspan_version version, |
| 6891 | + const char *mac, |
| 6892 | + bool tp) |
| 6893 | +{ |
| 6894 | + mlxsw_reg_mpat_eth_rspan_version_set(payload, version); |
| 6895 | + mlxsw_reg_mpat_eth_rspan_mac_memcpy_to(payload, mac); |
| 6896 | + mlxsw_reg_mpat_eth_rspan_tp_set(payload, tp); |
| 6897 | +} |
| 6898 | + |
| 6899 | +static inline void |
| 6900 | +mlxsw_reg_mpat_eth_rspan_l3_ipv4_pack(char *payload, u8 ttl, |
| 6901 | + const char *smac, |
| 6902 | + u32 sip, u32 dip) |
| 6903 | +{ |
| 6904 | + mlxsw_reg_mpat_eth_rspan_ttl_set(payload, ttl); |
| 6905 | + mlxsw_reg_mpat_eth_rspan_smac_memcpy_to(payload, smac); |
| 6906 | + mlxsw_reg_mpat_eth_rspan_protocol_set(payload, |
| 6907 | + MLXSW_REG_MPAT_ETH_RSPAN_PROTOCOL_IPV4); |
| 6908 | + mlxsw_reg_mpat_eth_rspan_sip4_set(payload, sip); |
| 6909 | + mlxsw_reg_mpat_eth_rspan_dip4_set(payload, dip); |
| 6910 | +} |
| 6911 | + |
| 6912 | +static inline void |
| 6913 | +mlxsw_reg_mpat_eth_rspan_l3_ipv6_pack(char *payload, u8 ttl, |
| 6914 | + const char *smac, |
| 6915 | + struct in6_addr sip, struct in6_addr dip) |
| 6916 | +{ |
| 6917 | + mlxsw_reg_mpat_eth_rspan_ttl_set(payload, ttl); |
| 6918 | + mlxsw_reg_mpat_eth_rspan_smac_memcpy_to(payload, smac); |
| 6919 | + mlxsw_reg_mpat_eth_rspan_protocol_set(payload, |
| 6920 | + MLXSW_REG_MPAT_ETH_RSPAN_PROTOCOL_IPV6); |
| 6921 | + mlxsw_reg_mpat_eth_rspan_sip6_memcpy_to(payload, (void *)&sip); |
| 6922 | + mlxsw_reg_mpat_eth_rspan_dip6_memcpy_to(payload, (void *)&dip); |
6784 | 6923 | }
|
6785 | 6924 |
|
6786 | 6925 | /* MPAR - Monitoring Port Analyzer Register
|
|
0 commit comments