Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a29781f168 | ||
|
88cfe6a66e | ||
|
0e5f12e50e | ||
|
b82c0fc6b5 | ||
|
fde0f7f720 | ||
|
76a7e32409 | ||
|
65bd38579e | ||
|
0a864966cd | ||
|
a35609faaf | ||
|
80dc2b71d1 | ||
|
210dc90d0d | ||
|
945effe6e3 | ||
|
ee08c73d3b | ||
|
96fedf1ae9 | ||
|
f2fb6de1ab | ||
|
608a69ca02 | ||
|
3919d0919b | ||
|
40e37f385e |
34
.gitmodules
vendored
34
.gitmodules
vendored
@ -1,15 +1,15 @@
|
||||
[submodule "sonic-swss-common"]
|
||||
path = src/sonic-swss-common
|
||||
url = https://github.com/Azure/sonic-swss-common
|
||||
url = https://github.com/sonic-net/sonic-swss-common
|
||||
[submodule "sonic-linux-kernel"]
|
||||
path = src/sonic-linux-kernel
|
||||
url = https://github.com/Azure/sonic-linux-kernel
|
||||
url = https://github.com/sonic-net/sonic-linux-kernel
|
||||
[submodule "sonic-sairedis"]
|
||||
path = src/sonic-sairedis
|
||||
url = https://github.com/Azure/sonic-sairedis
|
||||
url = https://github.com/sonic-net/sonic-sairedis
|
||||
[submodule "sonic-swss"]
|
||||
path = src/sonic-swss
|
||||
url = https://github.com/Azure/sonic-swss
|
||||
url = https://github.com/sonic-net/sonic-swss
|
||||
[submodule "src/p4c-bm/p4c-bm"]
|
||||
path = platform/p4/p4c-bm/p4c-bm
|
||||
url = https://github.com/krambn/p4c-bm
|
||||
@ -18,35 +18,35 @@
|
||||
url = https://github.com/p4lang/p4-hlir
|
||||
[submodule "quagga"]
|
||||
path = src/sonic-quagga
|
||||
url = https://github.com/Azure/sonic-quagga
|
||||
url = https://github.com/sonic-net/sonic-quagga
|
||||
branch = debian/0.99.24.1
|
||||
[submodule "sonic-dbsyncd"]
|
||||
path = src/sonic-dbsyncd
|
||||
url = https://github.com/Azure/sonic-dbsyncd
|
||||
url = https://github.com/sonic-net/sonic-dbsyncd
|
||||
[submodule "src/sonic-py-swsssdk"]
|
||||
path = src/sonic-py-swsssdk
|
||||
url = https://github.com/Azure/sonic-py-swsssdk.git
|
||||
url = https://github.com/sonic-net/sonic-py-swsssdk.git
|
||||
[submodule "src/sonic-snmpagent"]
|
||||
path = src/sonic-snmpagent
|
||||
url = https://github.com/Azure/sonic-snmpagent
|
||||
url = https://github.com/sonic-net/sonic-snmpagent
|
||||
[submodule "src/ptf"]
|
||||
path = src/ptf
|
||||
url = https://github.com/p4lang/ptf.git
|
||||
[submodule "src/sonic-utilities"]
|
||||
path = src/sonic-utilities
|
||||
url = https://github.com/Azure/sonic-utilities
|
||||
url = https://github.com/sonic-net/sonic-utilities
|
||||
[submodule "platform/broadcom/sonic-platform-modules-arista"]
|
||||
path = platform/broadcom/sonic-platform-modules-arista
|
||||
url = https://github.com/aristanetworks/sonic
|
||||
[submodule "src/sonic-platform-common"]
|
||||
path = src/sonic-platform-common
|
||||
url = https://github.com/Azure/sonic-platform-common
|
||||
url = https://github.com/sonic-net/sonic-platform-common
|
||||
[submodule "src/sonic-platform-daemons"]
|
||||
path = src/sonic-platform-daemons
|
||||
url = https://github.com/Azure/sonic-platform-daemons
|
||||
url = https://github.com/sonic-net/sonic-platform-daemons
|
||||
[submodule "src/sonic-frr/frr"]
|
||||
path = src/sonic-frr/frr
|
||||
url = https://github.com/Azure/sonic-frr.git
|
||||
url = https://github.com/sonic-net/sonic-frr.git
|
||||
branch = frr/7.2
|
||||
[submodule "platform/p4/p4-hlir/p4-hlir-v1.1"]
|
||||
path = platform/p4/p4-hlir/p4-hlir-v1.1
|
||||
@ -68,20 +68,20 @@
|
||||
url = https://github.com/Mellanox/SAI-Implementation
|
||||
[submodule "src/sonic-mgmt-framework"]
|
||||
path = src/sonic-mgmt-framework
|
||||
url = https://github.com/Azure/sonic-mgmt-framework
|
||||
url = https://github.com/sonic-net/sonic-mgmt-framework
|
||||
[submodule "src/sonic-telemetry"]
|
||||
path = src/sonic-telemetry
|
||||
url = https://github.com/Azure/sonic-telemetry
|
||||
url = https://github.com/sonic-net/sonic-telemetry
|
||||
[submodule "Switch-SDK-drivers"]
|
||||
path = platform/mellanox/sdk-src/sx-kernel/Switch-SDK-drivers
|
||||
url = https://github.com/Mellanox/Switch-SDK-drivers
|
||||
[submodule "src/sonic-ztp"]
|
||||
path = src/sonic-ztp
|
||||
url = https://github.com/Azure/sonic-ztp
|
||||
url = https://github.com/sonic-net/sonic-ztp
|
||||
[submodule "src/sonic-restapi"]
|
||||
path = src/sonic-restapi
|
||||
url = https://github.com/Azure/sonic-restapi.git
|
||||
url = https://github.com/sonic-net/sonic-restapi.git
|
||||
branch = master
|
||||
[submodule "src/sonic-mgmt-common"]
|
||||
path = src/sonic-mgmt-common
|
||||
url = https://github.com/Azure/sonic-mgmt-common.git
|
||||
url = https://github.com/sonic-net/sonic-mgmt-common.git
|
||||
|
@ -0,0 +1,57 @@
|
||||
# name lanes alias index speed
|
||||
Ethernet0 1,2 Ethernet1/1 1 50000
|
||||
Ethernet2 3,4 Ethernet1/3 1 50000
|
||||
Ethernet4 5,6 Ethernet2/1 2 50000
|
||||
Ethernet6 7,8 Ethernet2/3 2 50000
|
||||
Ethernet8 9,10 Ethernet3/1 3 50000
|
||||
Ethernet10 11,12 Ethernet3/3 3 50000
|
||||
Ethernet12 13,14 Ethernet4/1 4 50000
|
||||
Ethernet14 15,16 Ethernet4/3 4 50000
|
||||
Ethernet16 21,22 Ethernet5/1 5 50000
|
||||
Ethernet18 23,24 Ethernet5/3 5 50000
|
||||
Ethernet20 17,18 Ethernet6/1 6 50000
|
||||
Ethernet22 19,20 Ethernet6/3 6 50000
|
||||
Ethernet24 25,26,27,28 Ethernet7/1 7 100000
|
||||
Ethernet28 29,30,31,32 Ethernet8/1 8 100000
|
||||
Ethernet32 37,38,39,40 Ethernet9/1 9 100000
|
||||
Ethernet36 33,34,35,36 Ethernet10/1 10 100000
|
||||
Ethernet40 41,42 Ethernet11/1 11 50000
|
||||
Ethernet42 43,44 Ethernet11/3 11 50000
|
||||
Ethernet44 45,46 Ethernet12/1 12 50000
|
||||
Ethernet46 47,48 Ethernet12/3 12 50000
|
||||
Ethernet48 53,54 Ethernet13/1 13 50000
|
||||
Ethernet50 55,56 Ethernet13/3 13 50000
|
||||
Ethernet52 49,50 Ethernet14/1 14 50000
|
||||
Ethernet54 51,52 Ethernet14/3 14 50000
|
||||
Ethernet56 57,58 Ethernet15/1 15 50000
|
||||
Ethernet58 59,60 Ethernet15/3 15 50000
|
||||
Ethernet60 61,62 Ethernet16/1 16 50000
|
||||
Ethernet62 63,64 Ethernet16/3 16 50000
|
||||
Ethernet64 69,70 Ethernet17/1 17 50000
|
||||
Ethernet66 71,72 Ethernet17/3 17 50000
|
||||
Ethernet68 65,66 Ethernet18/1 18 50000
|
||||
Ethernet70 67,68 Ethernet18/3 18 50000
|
||||
Ethernet72 73,74 Ethernet19/1 19 50000
|
||||
Ethernet74 75,76 Ethernet19/3 19 50000
|
||||
Ethernet76 77,78 Ethernet20/1 20 50000
|
||||
Ethernet78 79,80 Ethernet20/3 20 50000
|
||||
Ethernet80 85,86 Ethernet21/1 21 50000
|
||||
Ethernet82 87,88 Ethernet21/3 21 50000
|
||||
Ethernet84 81,82 Ethernet22/1 22 50000
|
||||
Ethernet86 83,84 Ethernet22/3 22 50000
|
||||
Ethernet88 89,90,91,92 Ethernet23/1 23 100000
|
||||
Ethernet92 93,94,95,96 Ethernet24/1 24 100000
|
||||
Ethernet96 101,102,103,104 Ethernet25/1 25 100000
|
||||
Ethernet100 97,98,99,100 Ethernet26/1 26 100000
|
||||
Ethernet104 105,106 Ethernet27/1 27 50000
|
||||
Ethernet106 107,108 Ethernet27/3 27 50000
|
||||
Ethernet108 109,110 Ethernet28/1 28 50000
|
||||
Ethernet110 111,112 Ethernet28/3 28 50000
|
||||
Ethernet112 117,118 Ethernet29/1 29 50000
|
||||
Ethernet114 119,120 Ethernet29/3 29 50000
|
||||
Ethernet116 113,114 Ethernet30/1 30 50000
|
||||
Ethernet118 115,116 Ethernet30/3 30 50000
|
||||
Ethernet120 121,122 Ethernet31/1 31 50000
|
||||
Ethernet122 123,124 Ethernet31/3 31 50000
|
||||
Ethernet124 125,126 Ethernet32/1 32 50000
|
||||
Ethernet126 127,128 Ethernet32/3 32 50000
|
@ -0,0 +1,2 @@
|
||||
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-a7050cx3-32s-48x50G+8x100G.config.bcm
|
||||
SAI_NUM_ECMP_MEMBERS=64
|
@ -0,0 +1,545 @@
|
||||
arl_clean_timeout_usec=15000000
|
||||
asf_mem_profile=2
|
||||
bcm_num_cos=8
|
||||
bcm_stat_flags=1
|
||||
bcm_stat_jumbo=9236
|
||||
bcm_tunnel_term_compatible_mode=1
|
||||
cdma_timeout_usec=15000000
|
||||
core_clock_frequency=1525
|
||||
dma_desc_timeout_usec=15000000
|
||||
dpp_clock_ratio=2:3
|
||||
fpem_mem_entries=0
|
||||
higig2_hdr_mode=1
|
||||
ifp_inports_support_enable=1
|
||||
ipv6_lpm_128b_enable=1
|
||||
l2_mem_entries=32768
|
||||
l2xmsg_mode=1
|
||||
l3_alpm_enable=2
|
||||
l3_max_ecmp_mode=1
|
||||
l3_mem_entries=16384
|
||||
max_vp_lags=0
|
||||
miim_intr_enable=0
|
||||
module_64ports=1
|
||||
multicast_l2_range=16383
|
||||
multicast_l3_range=0
|
||||
os=unix
|
||||
oversubscribe_mode=1
|
||||
pbmp_xport_xe=0x7ffffffffffffffffffffffffffffffffe
|
||||
PHY_AN_ALLOW_PLL_CHANGE=1
|
||||
phy_an_c37_130=2
|
||||
phy_an_c37_66=2
|
||||
phy_an_c73=1
|
||||
port_flex_enable=1
|
||||
port_init_autoneg=0
|
||||
port_phy_addr=0xff
|
||||
robust_hash_disable_egress_vlan=1
|
||||
robust_hash_disable_mpls=1
|
||||
robust_hash_disable_vlan=1
|
||||
stable_size=0x5500000
|
||||
tdma_timeout_usec=15000000
|
||||
tslam_timeout_usec=15000000
|
||||
phy_chain_rx_lane_map_physical{1.0}=0x1302
|
||||
phy_chain_rx_lane_map_physical{5.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{9.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{13.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{17.0}=0x1203
|
||||
phy_chain_rx_lane_map_physical{21.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{25.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{29.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{33.0}=0x1203
|
||||
phy_chain_rx_lane_map_physical{37.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{41.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{45.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{49.0}=0x1203
|
||||
phy_chain_rx_lane_map_physical{53.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{57.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{61.0}=0x3120
|
||||
phy_chain_rx_lane_map_physical{65.0}=0x2130
|
||||
phy_chain_rx_lane_map_physical{69.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{73.0}=0x2031
|
||||
phy_chain_rx_lane_map_physical{77.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{81.0}=0x2130
|
||||
phy_chain_rx_lane_map_physical{85.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{89.0}=0x2031
|
||||
phy_chain_rx_lane_map_physical{93.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{97.0}=0x2130
|
||||
phy_chain_rx_lane_map_physical{101.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{105.0}=0x2031
|
||||
phy_chain_rx_lane_map_physical{109.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{113.0}=0x2130
|
||||
phy_chain_rx_lane_map_physical{117.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{121.0}=0x2031
|
||||
phy_chain_rx_lane_map_physical{125.0}=0x0213
|
||||
phy_chain_rx_lane_map_physical{129.0}=0x3210
|
||||
phy_chain_rx_polarity_flip_physical{1.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{2.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{3.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{4.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{5.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{6.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{7.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{8.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{9.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{10.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{11.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{12.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{13.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{14.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{15.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{16.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{17.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{18.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{19.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{20.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{21.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{22.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{23.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{24.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{25.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{26.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{27.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{28.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{29.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{30.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{31.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{32.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{33.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{34.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{35.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{36.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{37.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{38.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{39.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{40.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{41.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{42.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{43.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{44.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{45.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{46.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{47.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{48.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{49.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{50.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{51.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{52.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{53.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{54.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{55.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{56.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{57.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{58.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{59.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{60.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{61.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{62.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{63.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{64.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{65.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{66.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{67.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{68.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{69.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{70.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{71.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{72.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{73.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{74.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{75.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{76.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{77.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{78.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{79.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{80.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{81.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{82.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{83.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{84.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{85.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{86.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{87.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{88.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{89.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{90.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{91.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{92.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{93.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{94.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{95.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{96.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{97.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{98.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{99.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{100.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{101.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{102.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{103.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{104.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{105.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{106.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{107.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{108.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{109.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{110.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{111.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{112.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{113.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{114.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{115.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{116.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{117.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{118.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{119.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{120.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{121.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{122.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{123.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{124.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{125.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{126.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{127.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{128.0}=0x1
|
||||
phy_chain_rx_polarity_flip_physical{129.0}=0x0
|
||||
phy_chain_rx_polarity_flip_physical{131.0}=0x0
|
||||
phy_chain_tx_lane_map_physical{1.0}=0x3021
|
||||
phy_chain_tx_lane_map_physical{5.0}=0x1203
|
||||
phy_chain_tx_lane_map_physical{9.0}=0x0213
|
||||
phy_chain_tx_lane_map_physical{13.0}=0x0213
|
||||
phy_chain_tx_lane_map_physical{17.0}=0x2031
|
||||
phy_chain_tx_lane_map_physical{21.0}=0x0213
|
||||
phy_chain_tx_lane_map_physical{25.0}=0x2031
|
||||
phy_chain_tx_lane_map_physical{29.0}=0x1203
|
||||
phy_chain_tx_lane_map_physical{33.0}=0x2031
|
||||
phy_chain_tx_lane_map_physical{37.0}=0x0213
|
||||
phy_chain_tx_lane_map_physical{41.0}=0x2031
|
||||
phy_chain_tx_lane_map_physical{45.0}=0x1203
|
||||
phy_chain_tx_lane_map_physical{49.0}=0x2031
|
||||
phy_chain_tx_lane_map_physical{53.0}=0x0213
|
||||
phy_chain_tx_lane_map_physical{57.0}=0x2031
|
||||
phy_chain_tx_lane_map_physical{61.0}=0x1203
|
||||
phy_chain_tx_lane_map_physical{65.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{69.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{73.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{77.0}=0x2130
|
||||
phy_chain_tx_lane_map_physical{81.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{85.0}=0x3120
|
||||
phy_chain_tx_lane_map_physical{89.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{93.0}=0x2130
|
||||
phy_chain_tx_lane_map_physical{97.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{101.0}=0x3120
|
||||
phy_chain_tx_lane_map_physical{105.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{109.0}=0x2130
|
||||
phy_chain_tx_lane_map_physical{113.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{117.0}=0x3120
|
||||
phy_chain_tx_lane_map_physical{121.0}=0x1302
|
||||
phy_chain_tx_lane_map_physical{125.0}=0x3120
|
||||
phy_chain_tx_lane_map_physical{129.0}=0x3210
|
||||
phy_chain_tx_polarity_flip_physical{1.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{2.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{3.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{4.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{5.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{6.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{7.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{8.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{9.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{10.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{11.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{12.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{13.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{14.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{15.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{16.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{17.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{18.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{19.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{20.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{21.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{22.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{23.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{24.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{25.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{26.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{27.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{28.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{29.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{30.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{31.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{32.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{33.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{34.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{35.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{36.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{37.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{38.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{39.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{40.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{41.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{42.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{43.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{44.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{45.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{46.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{47.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{48.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{49.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{50.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{51.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{52.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{53.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{54.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{55.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{56.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{57.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{58.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{59.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{60.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{61.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{62.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{63.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{64.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{65.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{66.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{67.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{68.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{69.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{70.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{71.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{72.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{73.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{74.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{75.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{76.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{77.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{78.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{79.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{80.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{81.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{82.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{83.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{84.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{85.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{86.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{87.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{88.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{89.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{90.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{91.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{92.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{93.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{94.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{95.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{96.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{97.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{98.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{99.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{100.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{101.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{102.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{103.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{104.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{105.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{106.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{107.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{108.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{109.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{110.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{111.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{112.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{113.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{114.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{115.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{116.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{117.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{118.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{119.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{120.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{121.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{122.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{123.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{124.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{125.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{126.0}=0x1
|
||||
phy_chain_tx_polarity_flip_physical{127.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{128.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{129.0}=0x0
|
||||
phy_chain_tx_polarity_flip_physical{131.0}=0x0
|
||||
portmap_1=1:50:2
|
||||
portmap_3=3:50:2
|
||||
portmap_5=5:50:2
|
||||
portmap_7=7:50:2
|
||||
portmap_9=9:50:2
|
||||
portmap_11=11:50:2
|
||||
portmap_13=13:50:2
|
||||
portmap_15=15:50:2
|
||||
portmap_17=17:50:2
|
||||
portmap_19=19:50:2
|
||||
portmap_21=21:50:2
|
||||
portmap_23=23:50:2
|
||||
portmap_25=25:100
|
||||
portmap_29=29:100
|
||||
portmap_33=33:100
|
||||
portmap_37=37:100
|
||||
portmap_41=41:50:2
|
||||
portmap_43=43:50:2
|
||||
portmap_45=45:50:2
|
||||
portmap_47=47:50:2
|
||||
portmap_49=49:50:2
|
||||
portmap_51=51:50:2
|
||||
portmap_53=53:50:2
|
||||
portmap_55=55:50:2
|
||||
portmap_57=57:50:2
|
||||
portmap_59=59:50:2
|
||||
portmap_61=61:50:2
|
||||
portmap_63=63:50:2
|
||||
# skip 2
|
||||
portmap_67=65:50:2
|
||||
portmap_69=67:50:2
|
||||
portmap_71=69:50:2
|
||||
portmap_73=71:50:2
|
||||
portmap_75=73:50:2
|
||||
portmap_77=75:50:2
|
||||
portmap_79=77:50:2
|
||||
portmap_81=79:50:2
|
||||
portmap_83=81:50:2
|
||||
portmap_85=83:50:2
|
||||
portmap_87=85:50:2
|
||||
portmap_89=87:50:2
|
||||
portmap_91=89:100
|
||||
portmap_95=93:100
|
||||
portmap_99=97:100
|
||||
portmap_103=101:100
|
||||
portmap_107=105:50:2
|
||||
portmap_109=107:50:2
|
||||
portmap_111=109:50:2
|
||||
portmap_113=111:50:2
|
||||
portmap_115=113:50:2
|
||||
portmap_117=115:50:2
|
||||
portmap_119=117:50:2
|
||||
portmap_121=119:50:2
|
||||
portmap_123=121:50:2
|
||||
portmap_125=123:50:2
|
||||
portmap_127=125:50:2
|
||||
portmap_129=127:50:2
|
||||
serdes_core_rx_polarity_flip_physical{1}=0x8
|
||||
serdes_core_rx_polarity_flip_physical{5}=0x2
|
||||
serdes_core_rx_polarity_flip_physical{9}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{13}=0x3
|
||||
serdes_core_rx_polarity_flip_physical{17}=0x4
|
||||
serdes_core_rx_polarity_flip_physical{21}=0x3
|
||||
serdes_core_rx_polarity_flip_physical{25}=0x6
|
||||
serdes_core_rx_polarity_flip_physical{29}=0x3
|
||||
serdes_core_rx_polarity_flip_physical{33}=0x4
|
||||
serdes_core_rx_polarity_flip_physical{37}=0x3
|
||||
serdes_core_rx_polarity_flip_physical{41}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{45}=0x3
|
||||
serdes_core_rx_polarity_flip_physical{49}=0x4
|
||||
serdes_core_rx_polarity_flip_physical{53}=0x3
|
||||
serdes_core_rx_polarity_flip_physical{57}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{61}=0x3
|
||||
serdes_core_rx_polarity_flip_physical{65}=0xb
|
||||
serdes_core_rx_polarity_flip_physical{69}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{73}=0x7
|
||||
serdes_core_rx_polarity_flip_physical{77}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{81}=0xb
|
||||
serdes_core_rx_polarity_flip_physical{85}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{89}=0x7
|
||||
serdes_core_rx_polarity_flip_physical{93}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{97}=0xb
|
||||
serdes_core_rx_polarity_flip_physical{101}=0x9
|
||||
serdes_core_rx_polarity_flip_physical{105}=0x7
|
||||
serdes_core_rx_polarity_flip_physical{109}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{113}=0xb
|
||||
serdes_core_rx_polarity_flip_physical{117}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{121}=0x7
|
||||
serdes_core_rx_polarity_flip_physical{125}=0xc
|
||||
serdes_core_rx_polarity_flip_physical{129}=0x0
|
||||
serdes_core_tx_polarity_flip_physical{1}=0x3
|
||||
serdes_core_tx_polarity_flip_physical{5}=0xb
|
||||
serdes_core_tx_polarity_flip_physical{9}=0x3
|
||||
serdes_core_tx_polarity_flip_physical{13}=0xb
|
||||
serdes_core_tx_polarity_flip_physical{17}=0x0
|
||||
serdes_core_tx_polarity_flip_physical{21}=0x3
|
||||
serdes_core_tx_polarity_flip_physical{25}=0x4
|
||||
serdes_core_tx_polarity_flip_physical{29}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{33}=0xf
|
||||
serdes_core_tx_polarity_flip_physical{37}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{41}=0xe
|
||||
serdes_core_tx_polarity_flip_physical{45}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{49}=0xf
|
||||
serdes_core_tx_polarity_flip_physical{53}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{57}=0xe
|
||||
serdes_core_tx_polarity_flip_physical{61}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{65}=0xf
|
||||
serdes_core_tx_polarity_flip_physical{69}=0xe
|
||||
serdes_core_tx_polarity_flip_physical{73}=0xe
|
||||
serdes_core_tx_polarity_flip_physical{77}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{81}=0xf
|
||||
serdes_core_tx_polarity_flip_physical{85}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{89}=0xe
|
||||
serdes_core_tx_polarity_flip_physical{93}=0xc
|
||||
serdes_core_tx_polarity_flip_physical{97}=0xf
|
||||
serdes_core_tx_polarity_flip_physical{101}=0x6
|
||||
serdes_core_tx_polarity_flip_physical{105}=0x1
|
||||
serdes_core_tx_polarity_flip_physical{109}=0x3
|
||||
serdes_core_tx_polarity_flip_physical{113}=0x0
|
||||
serdes_core_tx_polarity_flip_physical{117}=0x3
|
||||
serdes_core_tx_polarity_flip_physical{121}=0x1
|
||||
serdes_core_tx_polarity_flip_physical{125}=0x3
|
||||
serdes_core_tx_polarity_flip_physical{129}=0x0
|
||||
serdes_preemphasis_1=0x45808
|
||||
serdes_preemphasis_3=0x45808
|
||||
serdes_preemphasis_5=0x45808
|
||||
serdes_preemphasis_7=0x45808
|
||||
serdes_preemphasis_9=0x45808
|
||||
serdes_preemphasis_11=0x45808
|
||||
serdes_preemphasis_13=0x45808
|
||||
serdes_preemphasis_15=0x45808
|
||||
serdes_preemphasis_17=0x45808
|
||||
serdes_preemphasis_19=0x45808
|
||||
serdes_preemphasis_21=0x45808
|
||||
serdes_preemphasis_23=0x45808
|
||||
serdes_preemphasis_25=0xd3e05
|
||||
serdes_preemphasis_29=0xd3e05
|
||||
serdes_preemphasis_33=0xb3403
|
||||
serdes_preemphasis_37=0x93603
|
||||
serdes_preemphasis_41=0x580c
|
||||
serdes_preemphasis_43=0x580c
|
||||
serdes_preemphasis_45=0x580c
|
||||
serdes_preemphasis_47=0x580c
|
||||
serdes_preemphasis_49=0x580c
|
||||
serdes_preemphasis_51=0x580c
|
||||
serdes_preemphasis_53=0x580c
|
||||
serdes_preemphasis_55=0x580c
|
||||
serdes_preemphasis_57=0x580c
|
||||
serdes_preemphasis_59=0x580c
|
||||
serdes_preemphasis_61=0x580c
|
||||
serdes_preemphasis_63=0x580c
|
||||
serdes_preemphasis_67=0x580c
|
||||
serdes_preemphasis_69=0x580c
|
||||
serdes_preemphasis_71=0x580c
|
||||
serdes_preemphasis_73=0x580c
|
||||
serdes_preemphasis_75=0x580c
|
||||
serdes_preemphasis_77=0x580c
|
||||
serdes_preemphasis_79=0x580c
|
||||
serdes_preemphasis_81=0x580c
|
||||
serdes_preemphasis_83=0x580c
|
||||
serdes_preemphasis_85=0x580c
|
||||
serdes_preemphasis_87=0x580c
|
||||
serdes_preemphasis_89=0x580c
|
||||
serdes_preemphasis_91=0x93603
|
||||
serdes_preemphasis_95=0xd3e05
|
||||
serdes_preemphasis_99=0xb3403
|
||||
serdes_preemphasis_103=0xd3e05
|
||||
serdes_preemphasis_107=0x85804
|
||||
serdes_preemphasis_109=0x85804
|
||||
serdes_preemphasis_111=0x85804
|
||||
serdes_preemphasis_113=0x85804
|
||||
serdes_preemphasis_115=0x85804
|
||||
serdes_preemphasis_117=0x85804
|
||||
serdes_preemphasis_119=0x85804
|
||||
serdes_preemphasis_121=0x85804
|
||||
serdes_preemphasis_123=0x85804
|
||||
serdes_preemphasis_125=0x85804
|
||||
serdes_preemphasis_127=0x85804
|
||||
serdes_preemphasis_129=0x85804
|
@ -40,6 +40,7 @@ COPY ["no-check-valid-until", "/etc/apt/apt.conf.d"]
|
||||
# pre-install fundamental packages
|
||||
RUN apt-get update && \
|
||||
apt-get -y install \
|
||||
curl \
|
||||
less \
|
||||
perl \
|
||||
procps \
|
||||
@ -52,8 +53,12 @@ RUN apt-get update && \
|
||||
# Install dependencies of supervisor
|
||||
python-pkg-resources \
|
||||
python-meld3 \
|
||||
# Install redis-tools
|
||||
redis-tools=5:6.0.5-1~bpo10+1 \
|
||||
# Install dependencies of redis-tools
|
||||
libatomic1 \
|
||||
libjemalloc2 \
|
||||
liblua5.1-0 \
|
||||
lua-bitop \
|
||||
lua-cjson \
|
||||
# common dependencies
|
||||
libpython2.7 \
|
||||
libdaemon0 \
|
||||
@ -66,6 +71,11 @@ RUN apt-get update && \
|
||||
python-setuptools \
|
||||
python-wheel
|
||||
|
||||
# Install redis-tools
|
||||
RUN curl -o redis-tools_6.0.6-1~bpo10+1_amd64.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r"
|
||||
RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_amd64.deb || apt-get install -f -y
|
||||
RUN rm redis-tools_6.0.6-1~bpo10+1_amd64.deb
|
||||
|
||||
# For templating
|
||||
RUN pip install j2cli
|
||||
|
||||
|
@ -11,7 +11,10 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt-get update
|
||||
|
||||
# install redis-server
|
||||
RUN apt-get install -y redis-server=5:6.0.5-1~bpo10+1
|
||||
RUN curl -o redis-tools_6.0.6-1~bpo10+1_amd64.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r"
|
||||
RUN curl -o redis-server_6.0.6-1~bpo10+1_amd64.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-server_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=2Ketg7BmkZEaTxR%2FgvAFVmhjn7ywdmkc7l2T2rsL57o%3D&se=2030-09-06T19%3A45%3A20Z&sp=r"
|
||||
RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_amd64.deb redis-server_6.0.6-1~bpo10+1_amd64.deb || apt-get install -f
|
||||
RUN rm redis-tools_6.0.6-1~bpo10+1_amd64.deb redis-server_6.0.6-1~bpo10+1_amd64.deb
|
||||
|
||||
{% if docker_database_debs.strip() -%}
|
||||
# Copy locally-built Debian package dependencies
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## redis_server
|
||||
###############################################################################
|
||||
check process redis_server matching "/usr/bin/redis-server"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program database|redis_server with path "/usr/bin/process_checker database /usr/bin/redis-server"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"INSTANCES": {
|
||||
"redis":{
|
||||
"hostname" : "127.0.0.1",
|
||||
"hostname" : "{{HOST_IP}}",
|
||||
"port" : 6379,
|
||||
"unix_socket_path" : "/var/run/redis{{NAMESPACE_ID}}/redis.sock",
|
||||
"persistence_for_warm_boot" : "yes"
|
||||
|
@ -1,12 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# For linux host namespace, in both single and multi ASIC platform use the loopback interface
|
||||
# For other namespaces, use eth0 interface which is connected to the docker0 bridge in the host.
|
||||
if [[ $NAMESPACE_ID == "" ]]
|
||||
then
|
||||
INTFC=lo
|
||||
else
|
||||
INTFC=eth0
|
||||
fi
|
||||
|
||||
# Get the ip address of the interface
|
||||
# if the ip address was not retrieved correctly, put localhost(127.0.0.1) as the default.
|
||||
host_ip=$(ip -4 -o addr show $INTFC | awk '{print $4}' | cut -d'/' -f1 | head -1)
|
||||
if [[ $host_ip == "" ]]
|
||||
then
|
||||
host_ip=127.0.0.1
|
||||
fi
|
||||
|
||||
REDIS_DIR=/var/run/redis$NAMESPACE_ID
|
||||
mkdir -p $REDIS_DIR/sonic-db
|
||||
|
||||
if [ -f /etc/sonic/database_config$NAMESPACE_ID.json ]; then
|
||||
cp /etc/sonic/database_config$NAMESPACE_ID.json $REDIS_DIR/sonic-db/database_config.json
|
||||
else
|
||||
j2 /usr/share/sonic/templates/database_config.json.j2 > $REDIS_DIR/sonic-db/database_config.json
|
||||
HOST_IP=$host_ip j2 /usr/share/sonic/templates/database_config.json.j2 > $REDIS_DIR/sonic-db/database_config.json
|
||||
fi
|
||||
|
||||
mkdir -p /etc/supervisor/conf.d/
|
||||
|
@ -20,7 +20,12 @@ stderr_logfile=syslog
|
||||
{% if INSTANCES %}
|
||||
{% for redis_inst, redis_items in INSTANCES.iteritems() %}
|
||||
[program: {{ redis_inst }}]
|
||||
command=/bin/bash -c "{ [[ -s /var/lib/{{ redis_inst }}/dump.rdb ]] || rm -f /var/lib/{{ redis_inst }}/dump.rdb; } && mkdir -p /var/lib/{{ redis_inst }} && exec /usr/bin/redis-server /etc/redis/redis.conf --port {{ redis_items['port'] }} --unixsocket {{ redis_items['unix_socket_path'] }} --pidfile /var/run/redis/{{ redis_inst }}.pid --dir /var/lib/{{ redis_inst }}"
|
||||
{% if redis_items['hostname'] != '127.0.0.1' %}
|
||||
{%- set LOOPBACK_IP = '127.0.0.1' -%}
|
||||
{%- else -%}
|
||||
{%- set LOOPBACK_IP = '' -%}
|
||||
{%- endif -%}
|
||||
command=/bin/bash -c "{ [[ -s /var/lib/{{ redis_inst }}/dump.rdb ]] || rm -f /var/lib/{{ redis_inst }}/dump.rdb; } && mkdir -p /var/lib/{{ redis_inst }} && exec /usr/bin/redis-server /etc/redis/redis.conf --bind {{ LOOPBACK_IP }} {{ redis_items['hostname'] }} --port {{ redis_items['port'] }} --unixsocket {{ redis_items['unix_socket_path'] }} --pidfile /var/run/redis/{{ redis_inst }}.pid --dir /var/lib/{{ redis_inst }}"
|
||||
priority=2
|
||||
autostart=true
|
||||
autorestart=false
|
||||
|
@ -7,17 +7,17 @@
|
||||
## staticd
|
||||
## bgpcfgd
|
||||
###############################################################################
|
||||
check process zebra matching "/usr/lib/frr/zebra"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program bgp|zebra with path "/usr/bin/process_checker bgp /usr/lib/frr/zebra"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process fpmsyncd matching "fpmsyncd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program bgp|fpmsyncd with path "/usr/bin/process_checker bgp fpmsyncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process bgpd matching "/usr/lib/frr/bgpd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program bgp|bgpd with path "/usr/bin/process_checker bgp /usr/lib/frr/bgpd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process staticd matching "/usr/lib/frr/staticd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program bgp|staticd with path "/usr/bin/process_checker bgp /usr/lib/frr/staticd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process bgpcfgd matching "python /usr/local/bin/bgpcfgd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program bgp|bgpcfgd with path "/usr/bin/process_checker bgp /usr/bin/python /usr/local/bin/bgpcfgd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -5,11 +5,11 @@
|
||||
## lldp-syncd
|
||||
## lldpmgrd
|
||||
###############################################################################
|
||||
check process lldpd_monitor matching "lldpd: "
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program lldp|lldpd_monitor with path "/usr/bin/process_checker lldp lldpd:"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process lldp_syncd matching "python2 -m lldp_syncd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program lldp|lldp_syncd with path "/usr/bin/process_checker lldp python2 -m lldp_syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process lldpmgrd matching "python /usr/bin/lldpmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program lldp|lldpmgrd with path "/usr/bin/process_checker lldp python /usr/bin/lldpmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -11,33 +11,33 @@
|
||||
## buffermgrd
|
||||
## nbrmgrd
|
||||
## vxlanmgrd
|
||||
###############################################################################
|
||||
check process orchagent matching "/usr/bin/orchagent -d /var/log/swss"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
##############################################################################
|
||||
check program swss|orchagent with path "/usr/bin/process_checker swss /usr/bin/orchagent -d /var/log/swss"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process portsyncd matching "/usr/bin/portsyncd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|portsyncd with path "/usr/bin/process_checker swss /usr/bin/portsyncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process neighsyncd matching "/usr/bin/neighsyncd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|neighsyncd with path "/usr/bin/process_checker swss /usr/bin/neighsyncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process vrfmgrd matching "/usr/bin/vrfmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|vrfmgrd with path "/usr/bin/process_checker swss /usr/bin/vrfmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process vlanmgrd matching "/usr/bin/vlanmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|vlanmgrd with path "/usr/bin/process_checker swss /usr/bin/vlanmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process intfmgrd matching "/usr/bin/intfmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|intfmgrd with path "/usr/bin/process_checker swss /usr/bin/intfmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process portmgrd matching "/usr/bin/portmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|portmgrd with path "/usr/bin/process_checker swss /usr/bin/portmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process buffermgrd matching "/usr/bin/buffermgrd -l"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|buffermgrd with path "/usr/bin/process_checker swss /usr/bin/buffermgrd -l"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process nbrmgrd matching "/usr/bin/nbrmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|nbrmgrd with path "/usr/bin/process_checker swss /usr/bin/nbrmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process vxlanmgrd matching "/usr/bin/vxlanmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program swss|vxlanmgrd with path "/usr/bin/process_checker swss /usr/bin/vxlanmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## sflowmgrd
|
||||
###############################################################################
|
||||
check process sflowmgrd matching "/usr/bin/sflowmgrd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program sflow|sflowmgrd with path "/usr/bin/process_checker sflow /usr/bin/sflowmgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -4,8 +4,8 @@
|
||||
## snmpd
|
||||
## snmpd_subagent
|
||||
###############################################################################
|
||||
check process snmpd matching "/usr/sbin/snmpd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program snmp|snmpd with path "/usr/bin/process_checker snmp /usr/sbin/snmpd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process snmp_subagent matching "python3 -m sonic_ax_impl"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program snmp|snmp_subagent with path "/usr/bin/process_checker snmp python3 -m sonic_ax_impl"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## restapi
|
||||
###############################################################################
|
||||
check process restapi matching "/usr/sbin/go-server-server"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program restapi|restapi with path "/usr/bin/process_checker restapi /usr/sbin/go-server-server"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -4,8 +4,8 @@
|
||||
## telemetry
|
||||
## dialout_client
|
||||
###############################################################################
|
||||
check process telemetry matching "/usr/sbin/telemetry"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program telemetry|telemetry with path "/usr/bin/process_checker telemetry /usr/sbin/telemetry"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process dialout_client matching "/usr/sbin/dialout_client_cli"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program telemetry|dialout_client with path "/usr/bin/process_checker telemetry /usr/sbin/dialout_client_cli"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
11
dockers/docker-teamd/base_image_files/monit_teamd
Normal file
11
dockers/docker-teamd/base_image_files/monit_teamd
Normal file
@ -0,0 +1,11 @@
|
||||
###############################################################################
|
||||
## Monit configuration for teamd container
|
||||
## process list:
|
||||
## teamsyncd
|
||||
## teammgrd
|
||||
###############################################################################
|
||||
check program teamd|teamsyncd with path "/usr/bin/process_checker teamd /usr/bin/teamsyncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check program teamd|teammgrd with path "/usr/bin/process_checker teamd /usr/bin/teammgrd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
@ -27,6 +27,22 @@ link_namespace() {
|
||||
}
|
||||
{%- endif %}
|
||||
|
||||
function updateSyslogConf()
|
||||
{
|
||||
# On multiNPU platforms, change the syslog target ip to docker0 ip to allow logs from containers
|
||||
# running on the namespace to reach the rsyslog service running on the host
|
||||
# Also update the container name
|
||||
if [[ ($NUM_ASIC -gt 1) ]]; then
|
||||
TARGET_IP=$(docker network inspect bridge --format={{ "'{{(index .IPAM.Config 0).Gateway}}'" }})
|
||||
CONTAINER_NAME="{{docker_container_name}}$DEV"
|
||||
TMP_FILE="/tmp/rsyslog.$CONTAINER_NAME.conf"
|
||||
|
||||
sonic-cfggen -t /usr/share/sonic/templates/rsyslog-container.conf.j2 -a "{\"target_ip\": \"$TARGET_IP\", \"container_name\": \"$CONTAINER_NAME\" }" > $TMP_FILE
|
||||
docker cp $TMP_FILE {{docker_container_name}}$DEV:/etc/rsyslog.conf
|
||||
rm -rf $TMP_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
function getMountPoint()
|
||||
{
|
||||
echo $1 | python -c "import sys, json, os; mnts = [x for x in json.load(sys.stdin)[0]['Mounts'] if x['Destination'] == '/usr/share/sonic/hwsku']; print '' if len(mnts) == 0 else os.path.basename(mnts[0]['Source'])" 2>/dev/null
|
||||
@ -68,6 +84,7 @@ function preStartAction()
|
||||
{%- else %}
|
||||
: # nothing
|
||||
{%- endif %}
|
||||
updateSyslogConf
|
||||
}
|
||||
|
||||
function postStartAction()
|
||||
|
@ -122,6 +122,9 @@ sudo rm -rf $FILESYSTEM_ROOT/$REDIS_DUMP_LOAD_PY2_WHEEL_NAME
|
||||
# Install Python module for ipaddress
|
||||
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip install ipaddress
|
||||
|
||||
# Install Python module for psutil
|
||||
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip install psutil
|
||||
|
||||
# Install SwSS SDK Python 3 package
|
||||
# Note: the scripts will be overwritten by corresponding Python 2 package
|
||||
if [ -e {{swsssdk_py3_wheel_path}} ]; then
|
||||
@ -222,6 +225,8 @@ sudo cp $IMAGE_CONFIGS/monit/monitrc $FILESYSTEM_ROOT/etc/monit/
|
||||
sudo chmod 600 $FILESYSTEM_ROOT/etc/monit/monitrc
|
||||
sudo cp $IMAGE_CONFIGS/monit/conf.d/* $FILESYSTEM_ROOT/etc/monit/conf.d/
|
||||
sudo chmod 600 $FILESYSTEM_ROOT/etc/monit/conf.d/*
|
||||
sudo cp $IMAGE_CONFIGS/monit/process_checker $FILESYSTEM_ROOT/usr/bin/
|
||||
sudo chmod 755 $FILESYSTEM_ROOT/usr/bin/process_checker
|
||||
|
||||
# Copy crontabs
|
||||
sudo cp -f $IMAGE_CONFIGS/cron.d/* $FILESYSTEM_ROOT/etc/cron.d/
|
||||
@ -241,6 +246,7 @@ echo "warmboot-finalizer.service" | sudo tee -a $GENERATED_SERVICE_FILE
|
||||
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog-config.service $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM
|
||||
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog-config.sh $FILESYSTEM_ROOT/usr/bin/
|
||||
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog.conf.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/
|
||||
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog-container.conf.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/
|
||||
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog.d/* $FILESYSTEM_ROOT/etc/rsyslog.d/
|
||||
echo "rsyslog-config.service" | sudo tee -a $GENERATED_SERVICE_FILE
|
||||
|
||||
|
@ -284,12 +284,12 @@ class ControlPlaneAclManager(object):
|
||||
iptables_cmds.append("ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT")
|
||||
|
||||
# Add iptables/ip6tables commands to allow all incoming IPv4 DHCP packets
|
||||
iptables_cmds.append("iptables -A INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT")
|
||||
iptables_cmds.append("ip6tables -A INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT")
|
||||
iptables_cmds.append("iptables -A INPUT -p udp --dport 67:68 -j ACCEPT")
|
||||
iptables_cmds.append("ip6tables -A INPUT -p udp --dport 67:68 -j ACCEPT")
|
||||
|
||||
# Add iptables/ip6tables commands to allow all incoming IPv6 DHCP packets
|
||||
iptables_cmds.append("iptables -A INPUT -p udp --dport 546:547 --sport 546:547 -j ACCEPT")
|
||||
iptables_cmds.append("ip6tables -A INPUT -p udp --dport 546:547 --sport 546:547 -j ACCEPT")
|
||||
iptables_cmds.append("iptables -A INPUT -p udp --dport 546:547 -j ACCEPT")
|
||||
iptables_cmds.append("ip6tables -A INPUT -p udp --dport 546:547 -j ACCEPT")
|
||||
|
||||
# Add iptables/ip6tables commands to allow all incoming BGP traffic
|
||||
# TODO: Determine BGP ACLs based on configured device sessions, and remove this blanket acceptance
|
||||
|
@ -10,5 +10,5 @@ You are on
|
||||
Unauthorized access and/or use are prohibited.
|
||||
All access and/or use are subject to monitoring.
|
||||
|
||||
Help: http://azure.github.io/SONiC/
|
||||
Help: https://sonic-net.github.io/SONiC/
|
||||
|
||||
|
@ -6,17 +6,27 @@
|
||||
###############################################################################
|
||||
|
||||
check filesystem root-overlay with path /
|
||||
if space usage > 90% for 10 times within 20 cycles then alert
|
||||
if space usage > 90% for 10 times within 20 cycles then alert repeat every 1 cycles
|
||||
|
||||
check filesystem var-log with path /var/log
|
||||
if space usage > 90% for 10 times within 20 cycles then alert
|
||||
if space usage > 90% for 10 times within 20 cycles then alert repeat every 1 cycles
|
||||
|
||||
check system $HOST
|
||||
if memory usage > 90% for 10 times within 20 cycles then alert
|
||||
if cpu usage (user) > 90% for 10 times within 20 cycles then alert
|
||||
if cpu usage (system) > 90% for 10 times within 20 cycles then alert
|
||||
if memory usage > 90% for 10 times within 20 cycles then alert repeat every 1 cycles
|
||||
if cpu usage (user) > 90% for 10 times within 20 cycles then alert repeat every 1 cycles
|
||||
if cpu usage (system) > 90% for 10 times within 20 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process rsyslog with pidfile /var/run/rsyslogd.pid
|
||||
start program = "/bin/systemctl start rsyslog.service"
|
||||
stop program = "/bin/systemctl stop rsyslog.service"
|
||||
if totalmem > 800 MB for 10 times within 20 cycles then restart
|
||||
|
||||
# route_check.py Verify routes between APPL-DB & ASIC-DB are in sync.
|
||||
# For any discrepancy, details are logged and a non-zero code is returned
|
||||
# which would trigger a monit alert.
|
||||
# Hence for any discrepancy, there will be log messages for "ERR" level
|
||||
# from both route_check.py & monit.
|
||||
#
|
||||
check program routeCheck with path "/usr/bin/route_check.py"
|
||||
every 5 cycles
|
||||
if status != 0 for 3 cycle then alert repeat every 1 cycles
|
||||
|
57
files/image_config/monit/process_checker
Executable file
57
files/image_config/monit/process_checker
Executable file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/python
|
||||
import argparse
|
||||
import sys
|
||||
import syslog
|
||||
|
||||
import psutil
|
||||
import swsssdk
|
||||
|
||||
|
||||
def check_process_existence(container_name, process_cmdline):
|
||||
"""
|
||||
@summary: Check whether the process in the specified container is running or not and
|
||||
an alerting message will written into syslog if it failed to run.
|
||||
"""
|
||||
config_db = swsssdk.ConfigDBConnector()
|
||||
config_db.connect()
|
||||
feature_table = config_db.get_table("FEATURE")
|
||||
|
||||
if container_name in feature_table.keys():
|
||||
# We look into the 'FEATURE' table to verify whether the container is disabled or not.
|
||||
# If the container is diabled, we exit.
|
||||
if ("state" in feature_table[container_name].keys()
|
||||
and feature_table[container_name]["state"] == "disabled"):
|
||||
sys.exit(0)
|
||||
else:
|
||||
# We leveraged the psutil library to help us check whether the process is running or not.
|
||||
# If the process entity is found in process tree and it is also in the 'running' or 'sleeping'
|
||||
# state, then it will be marked as 'running'.
|
||||
is_running = False
|
||||
for process in psutil.process_iter(["cmdline", "status"]):
|
||||
if ((' '.join(process.cmdline())).startswith(process_cmdline) and process.status() in ["running", "sleeping"]):
|
||||
is_running = True
|
||||
break
|
||||
|
||||
if not is_running:
|
||||
# If this script is run by Monit, then the following output will be appended to
|
||||
# Monit's syslog message.
|
||||
print("'{}' is not running.".format(process_cmdline))
|
||||
sys.exit(1)
|
||||
else:
|
||||
syslog.syslog(syslog.LOG_ERR, "container '{}' is not included in SONiC image or the given container name is invalid!"
|
||||
.format(container_name))
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Check whether the process in the specified \
|
||||
container is running and an alerting message will be written into syslog if it \
|
||||
failed to run.", usage="/usr/bin/process_checker <container_name> <process_cmdline>")
|
||||
parser.add_argument("container_name", help="container name")
|
||||
parser.add_argument("process_cmdline", nargs=argparse.REMAINDER, help="process command line")
|
||||
args = parser.parse_args()
|
||||
|
||||
check_process_existence(args.container_name, ' '.join(args.process_cmdline))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -1,4 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
sonic-cfggen -d -t /usr/share/sonic/templates/rsyslog.conf.j2 >/etc/rsyslog.conf
|
||||
PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`
|
||||
|
||||
# Parse the device specific asic conf file, if it exists
|
||||
ASIC_CONF=/usr/share/sonic/device/$PLATFORM/asic.conf
|
||||
if [ -f "$ASIC_CONF" ]; then
|
||||
source $ASIC_CONF
|
||||
fi
|
||||
|
||||
# On Multi NPU platforms we need to start the rsyslog server on the docker0 ip address
|
||||
# for the syslogs from the containers in the namespaces to work.
|
||||
# on Single NPU platforms we continue to use loopback adddres
|
||||
|
||||
if [[ ($NUM_ASIC -gt 1) ]]; then
|
||||
udp_server_ip=$(ip -o -4 addr list docker0 | awk '{print $4}' | cut -d/ -f1)
|
||||
else
|
||||
udp_server_ip=$(ip -o -4 addr list lo scope host | awk '{print $4}' | cut -d/ -f1)
|
||||
fi
|
||||
|
||||
sonic-cfggen -d -t /usr/share/sonic/templates/rsyslog.conf.j2 -a "{\"udp_server_ip\": \"$udp_server_ip\"}" >/etc/rsyslog.conf
|
||||
|
||||
systemctl restart rsyslog
|
||||
|
76
files/image_config/rsyslog/rsyslog-container.conf.j2
Normal file
76
files/image_config/rsyslog/rsyslog-container.conf.j2
Normal file
@ -0,0 +1,76 @@
|
||||
#
|
||||
# /etc/rsyslog.conf Configuration file for rsyslog.
|
||||
#
|
||||
# For more information see
|
||||
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
|
||||
|
||||
|
||||
#################
|
||||
#### MODULES ####
|
||||
#################
|
||||
|
||||
$ModLoad imuxsock # provides support for local system logging
|
||||
|
||||
#
|
||||
# Set a rate limit on messages from the container
|
||||
#
|
||||
$SystemLogRateLimitInterval 300
|
||||
$SystemLogRateLimitBurst 20000
|
||||
|
||||
#$ModLoad imklog # provides kernel logging support
|
||||
#$ModLoad immark # provides --MARK-- message capability
|
||||
|
||||
# provides UDP syslog reception
|
||||
#$ModLoad imudp
|
||||
#$UDPServerRun 514
|
||||
|
||||
# provides TCP syslog reception
|
||||
#$ModLoad imtcp
|
||||
#$InputTCPServerRun 514
|
||||
|
||||
|
||||
###########################
|
||||
#### GLOBAL DIRECTIVES ####
|
||||
###########################
|
||||
|
||||
# Set remote syslog server
|
||||
template (name="ForwardFormatInContainer" type="string" string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% {{container_name}}#%syslogtag%%msg:::sp-if-no-1st-sp%%msg%")
|
||||
*.* action(type="omfwd" target="{{target_ip}}" port="514" protocol="udp" Template="ForwardFormatInContainer")
|
||||
|
||||
#
|
||||
# Use traditional timestamp format.
|
||||
# To enable high precision timestamps, comment out the following line.
|
||||
#
|
||||
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
|
||||
|
||||
# Define a custom template
|
||||
$template SONiCFileFormat,"%TIMESTAMP%.%timestamp:::date-subseconds% %HOSTNAME% %syslogseverity-text:::uppercase% {{container_name}}#%syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
|
||||
$ActionFileDefaultTemplate SONiCFileFormat
|
||||
|
||||
#
|
||||
# Set the default permissions for all log files.
|
||||
#
|
||||
$FileOwner root
|
||||
$FileGroup adm
|
||||
$FileCreateMode 0640
|
||||
$DirCreateMode 0755
|
||||
$Umask 0022
|
||||
|
||||
#
|
||||
# Where to place spool and state files
|
||||
#
|
||||
$WorkDirectory /var/spool/rsyslog
|
||||
|
||||
#
|
||||
# Include all config files in /etc/rsyslog.d/
|
||||
#
|
||||
$IncludeConfig /etc/rsyslog.d/*.conf
|
||||
|
||||
#
|
||||
# Suppress duplicate messages and report "message repeated n times"
|
||||
#
|
||||
$RepeatedMsgReduction on
|
||||
|
||||
###############
|
||||
#### RULES ####
|
||||
###############
|
@ -19,7 +19,7 @@ $ModLoad imklog # provides kernel logging support
|
||||
|
||||
# provides UDP syslog reception
|
||||
$ModLoad imudp
|
||||
$UDPServerAddress 127.0.0.1 # bind to localhost before udp server run
|
||||
$UDPServerAddress {{udp_server_ip}} #bind to localhost before udp server run
|
||||
$UDPServerRun 514
|
||||
|
||||
# provides TCP syslog reception
|
||||
|
@ -5,9 +5,6 @@
|
||||
|
||||
journal_stop() {
|
||||
systemctl stop systemd-journald.service
|
||||
systemctl stop systemd-journald.socket
|
||||
systemctl stop systemd-journald-audit.socket
|
||||
systemctl stop systemd-journald-dev-log.socket
|
||||
}
|
||||
|
||||
delete_loop_device() {
|
||||
@ -16,7 +13,10 @@ delete_loop_device() {
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
losetup -d /dev/loop1
|
||||
loop_exist=$(losetup -a | grep loop1 | wc -l)
|
||||
if [ $loop_exist -ne 0 ]; then
|
||||
losetup -d /dev/loop1
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
|
@ -213,6 +213,9 @@ umount "$root_mnt"
|
||||
|
||||
if [ $(echo -n "$root_dev" | tail -c 1) == "1" ]; then
|
||||
# Create a new partition table (content in flash_dev will be deleted)
|
||||
err_msg="Error: Failed to zero out first MB"
|
||||
cmd="dd if=/dev/zero of=$flash_dev bs=512 count=2048"
|
||||
run_cmd "$cmd" "$err_msg"
|
||||
err_msg="Error: repartitioning $flash_dev failed"
|
||||
cmd="echo '2048' | sfdisk $flash_dev || (sleep 3; blockdev --rereadpt $flash_dev && fdisk -l $flash_dev | grep -q ${root_dev}.*Linux)"
|
||||
run_cmd "$cmd" "$err_msg"
|
||||
|
@ -1,4 +1,4 @@
|
||||
BFN_PLATFORM = bfnplatform_20200618_deb9.deb
|
||||
BFN_PLATFORM = bfnplatform_20200710_deb9.deb
|
||||
$(BFN_PLATFORM)_URL = "https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/$(BFN_PLATFORM)"
|
||||
|
||||
SONIC_ONLINE_DEBS += $(BFN_PLATFORM)
|
||||
|
@ -1,4 +1,4 @@
|
||||
BFN_SAI = bfnsdk_20200618_deb9.deb
|
||||
BFN_SAI = bfnsdk_20200710_deb9.deb
|
||||
$(BFN_SAI)_URL = "https://github.com/barefootnetworks/sonic-release-pkgs/raw/dev/$(BFN_SAI)"
|
||||
|
||||
$(BFN_SAI)_DEPENDS += $(LIBNL_GENL3_DEV)
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## syncd
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 9ea7795ac085452bd14e4146a446ef842152e7de
|
||||
Subproject commit 77d887095c331ddff0bc681edfc6a6dd66d96228
|
@ -4,8 +4,8 @@
|
||||
## syncd
|
||||
## dsserve
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process dsserve matching "/usr/bin/dsserve /usr/bin/syncd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|dsserve with path "/usr/bin/process_checker syncd /usr/bin/dsserve /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -1,8 +1,8 @@
|
||||
BRCM_SAI = libsaibcm_3.7.4.2-2_amd64.deb
|
||||
$(BRCM_SAI)_URL = "https://sonicstorage.blob.core.windows.net/packages/bcmsai/3.7/libsaibcm_3.7.4.2-2_amd64.deb?sv=2015-04-05&sr=b&sig=sl819d71a%2BcgrDtOt%2BmywfSL9N2EQS58qMJFq0aKqo8%3D&se=2034-02-11T20%3A28%3A46Z&sp=r"
|
||||
BRCM_SAI_DEV = libsaibcm-dev_3.7.4.2-2_amd64.deb
|
||||
BRCM_SAI = libsaibcm_3.7.5.1_amd64.deb
|
||||
$(BRCM_SAI)_URL = "https://sonicstorage.blob.core.windows.net/packages/bcmsai/3.7/libsaibcm_3.7.5.1_amd64.deb?sv=2015-04-05&sr=b&sig=hZLFA8GbuY83MW9g2ggfe53ATx9riuyL1JYXIe1Bib4%3D&se=2034-03-04T00%3A08%3A23Z&sp=r"
|
||||
BRCM_SAI_DEV = libsaibcm-dev_3.7.5.1_amd64.deb
|
||||
$(eval $(call add_derived_package,$(BRCM_SAI),$(BRCM_SAI_DEV)))
|
||||
$(BRCM_SAI_DEV)_URL = "https://sonicstorage.blob.core.windows.net/packages/bcmsai/3.7/libsaibcm-dev_3.7.4.2-2_amd64.deb?sv=2015-04-05&sr=b&sig=cvOpP0PWFVmBNeYLMkxyI4BFBQf1DopD32t%2B3AkJHRg%3D&se=2034-02-11T20%3A27%3A46Z&sp=r"
|
||||
$(BRCM_SAI_DEV)_URL = "https://sonicstorage.blob.core.windows.net/packages/bcmsai/3.7/libsaibcm-dev_3.7.5.1_amd64.deb?sv=2015-04-05&sr=b&sig=i5GcJ8ATr4NL5iLth6DrX8YXxe7ir5OsXN7fxJISvCE%3D&se=2034-03-04T00%3A09%3A48Z&sp=r"
|
||||
|
||||
SONIC_ONLINE_DEBS += $(BRCM_SAI)
|
||||
$(BRCM_SAI_DEV)_DEPENDS += $(BRCM_SAI)
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 9ea7795ac085452bd14e4146a446ef842152e7de
|
||||
Subproject commit 77d887095c331ddff0bc681edfc6a6dd66d96228
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## syncd
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## syncd
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## syncd
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## syncd
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## syncd
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -3,5 +3,5 @@
|
||||
## process list:
|
||||
## syncd
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Mellanox SAI
|
||||
|
||||
MLNX_SAI_VERSION = SAIRel1.16.4.1-sai16
|
||||
MLNX_SAI_VERSION = SAIRel1.16.5-sai16
|
||||
|
||||
export MLNX_SAI_VERSION
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit b318bb380ac13dba98c94b163fbe644ab7eb236e
|
||||
Subproject commit 0ddcb4e6d12efdd5255529ed53cc785351e8b3b3
|
@ -4,8 +4,8 @@
|
||||
## syncd
|
||||
## dsserve
|
||||
###############################################################################
|
||||
check process syncd matching "/usr/bin/syncd\s"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
||||
check process dsserve matching "/usr/bin/dsserve /usr/bin/syncd"
|
||||
if does not exist for 5 times within 5 cycles then alert
|
||||
check program syncd|dsserve with path "/usr/bin/process_checker syncd /usr/bin/dsserve /usr/bin/syncd"
|
||||
if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles
|
||||
|
@ -41,9 +41,9 @@ echo "
|
||||
\"category\": \"router\",
|
||||
\"description\": \"SONiC Virtual Switch/Router\",
|
||||
\"vendor_name\": \"SONiC\",
|
||||
\"vendor_url\": \"https://azure.github.io/SONiC/\",
|
||||
\"vendor_url\": \"https://sonic-net.github.io/SONiC/\",
|
||||
\"product_name\": \"SONiC\",
|
||||
\"product_url\": \"https://azure.github.io/SONiC/\",
|
||||
\"product_url\": \"https://sonic-net.github.io/SONiC/\",
|
||||
\"registry_version\": 3,
|
||||
\"status\": \"experimental\",
|
||||
\"maintainer\": \"SONiC\",
|
||||
|
@ -29,4 +29,5 @@ $(DOCKER_TEAMD)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
|
||||
$(DOCKER_TEAMD)_RUN_OPT += -v /host/warmboot:/var/warmboot
|
||||
|
||||
$(DOCKER_TEAMD)_BASE_IMAGE_FILES += teamdctl:/usr/bin/teamdctl
|
||||
$(DOCKER_TEAMD)_BASE_IMAGE_FILES += monit_teamd:/etc/monit/conf.d
|
||||
$(DOCKER_TEAMD)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
|
||||
|
64
src/monit/patch/0002-change_monit_alert_log_error.patch
Normal file
64
src/monit/patch/0002-change_monit_alert_log_error.patch
Normal file
@ -0,0 +1,64 @@
|
||||
From 97a5defc6a7fcc6a00f691bb5314ceb8fb7704e9 Mon Sep 17 00:00:00 2001
|
||||
From: Abhishek Dosi <abdosi@microsoft.com>
|
||||
Date: Mon, 26 Oct 2020 11:40:02 -0700
|
||||
Subject: [PATCH] Patch on top of commit Patch is addressing these changes:-
|
||||
|
||||
a) Enable repeat keyword for alert action . Using this we can log
|
||||
syslog error message for persistent failure condition
|
||||
|
||||
b) Make sure error message is loggged if state is changed to fail first time (fault tolerance condition)
|
||||
or we have repeat clause for alert
|
||||
|
||||
Signed-off-by: Abhishek Dosi <abdosi@microsoft.com>
|
||||
|
||||
---
|
||||
src/event.c | 6 +++++-
|
||||
src/p.y | 8 +++++++-
|
||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/event.c b/src/event.c
|
||||
index ed363ee..9d08fc0 100644
|
||||
--- a/src/event.c
|
||||
+++ b/src/event.c
|
||||
@@ -336,7 +336,8 @@ static void _handleEvent(Service_T S, Event_T E) {
|
||||
if (E->state != State_Init || E->state_map & 0x1) {
|
||||
if (E->state == State_Succeeded || E->state == State_ChangedNot || E->id == Event_Instance || E->id == Event_Action)
|
||||
LogInfo("'%s' %s\n", S->name, E->message);
|
||||
- else
|
||||
+ /* Send Error log if state change to failed for 1st time or if we have repeat clause then do periodically */
|
||||
+ else if ((E->state_changed) || (E->state == State_Failed && E->action->failed->repeat && E->count % E->action->failed->repeat == 0))
|
||||
LogError("'%s' %s\n", S->name, E->message);
|
||||
}
|
||||
if (E->state == State_Init)
|
||||
return;
|
||||
diff --git a/src/p.y b/src/p.y
|
||||
index a57807d..b46b1a1 100644
|
||||
--- a/src/p.y
|
||||
+++ b/src/p.y
|
||||
@@ -2250,9 +2250,12 @@ repeat : /* EMPTY */ {
|
||||
}
|
||||
;
|
||||
|
||||
-action : ALERT {
|
||||
+action : ALERT repeat{
|
||||
$<number>$ = Action_Alert;
|
||||
}
|
||||
+ | ALERT {
|
||||
+ $<number>$ = Action_Alert;
|
||||
+ }
|
||||
| EXEC argumentlist repeat {
|
||||
$<number>$ = Action_Exec;
|
||||
}
|
||||
@@ -2281,6 +2284,9 @@ action1 : action {
|
||||
repeat = 0;
|
||||
command1 = command;
|
||||
command = NULL;
|
||||
+ } else if ($<number>1 == Action_Alert) {
|
||||
+ repeat1 = repeat;
|
||||
+ repeat = 0;
|
||||
}
|
||||
}
|
||||
;
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,2 +1,3 @@
|
||||
# This series applies on GIT commit dc9bc1c949125140d967edfc598dfad47eedc552
|
||||
0001-used_system_memory_sysdep-Use-MemAvailable-value-if-.patch
|
||||
0002-change_monit_alert_log_error.patch
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 82bbeabc59b78886b5cadffe0998c8fe67031343
|
||||
Subproject commit 42781ff90413efe2ff709908a5318c85ca67f058
|
@ -1 +1 @@
|
||||
Subproject commit 322dd01db434d00394898d4d1ac34433e95447cd
|
||||
Subproject commit ef721595520d827277610d11e24082934afc4df8
|
Loading…
Reference in New Issue
Block a user