|
72 | 72 | PLATFORM_JSON = 'platform.json'
|
73 | 73 | HWSKU_JSON = 'hwsku.json'
|
74 | 74 | PORT_STR = "Ethernet"
|
| 75 | +BMP_STATE_DB = 'BMP_STATE_DB' |
75 | 76 |
|
76 | 77 | VLAN_SUB_INTERFACE_SEPARATOR = '.'
|
77 | 78 |
|
@@ -2128,6 +2129,138 @@ def ztp(status, verbose):
|
2128 | 2129 | run_command(cmd, display_cmd=verbose)
|
2129 | 2130 |
|
2130 | 2131 |
|
| 2132 | +# |
| 2133 | +# 'bmp' group ("show bmp ...") |
| 2134 | +# |
| 2135 | +@cli.group(cls=clicommon.AliasedGroup) |
| 2136 | +def bmp(): |
| 2137 | + """Show details of the bmp dataset""" |
| 2138 | + pass |
| 2139 | + |
| 2140 | + |
| 2141 | +# 'bgp-neighbor-table' subcommand ("show bmp bgp-neighbor-table") |
| 2142 | +@bmp.command('bgp-neighbor-table') |
| 2143 | +@clicommon.pass_db |
| 2144 | +def bmp_neighbor_table(db): |
| 2145 | + """Show bmp bgp-neighbor-table information""" |
| 2146 | + bmp_headers = ["Neighbor_Address", "Peer_Address", "Peer_ASN", "Peer_RD", "Peer_Port", |
| 2147 | + "Local_Address", "Local_ASN", "Local_Port", "Advertised_Capabilities", "Received_Capabilities"] |
| 2148 | + |
| 2149 | + # BGP_NEIGHBOR_TABLE|10.0.1.2 |
| 2150 | + bmp_keys = db.db.keys(BMP_STATE_DB, "BGP_NEIGHBOR_TABLE|*") |
| 2151 | + |
| 2152 | + click.echo("Total number of bmp neighbors: {}".format(0 if bmp_keys is None else len(bmp_keys))) |
| 2153 | + |
| 2154 | + bmp_body = [] |
| 2155 | + if bmp_keys is not None: |
| 2156 | + for key in bmp_keys: |
| 2157 | + values = db.db.get_all(BMP_STATE_DB, key) |
| 2158 | + bmp_body.append([ |
| 2159 | + values["peer_addr"], # Neighbor_Address |
| 2160 | + values["peer_addr"], |
| 2161 | + values["peer_asn"], |
| 2162 | + values["peer_rd"], |
| 2163 | + values["peer_port"], |
| 2164 | + values["local_addr"], |
| 2165 | + values["local_asn"], |
| 2166 | + values["local_port"], |
| 2167 | + values["sent_cap"], |
| 2168 | + values["recv_cap"] |
| 2169 | + ]) |
| 2170 | + |
| 2171 | + click.echo(tabulate(bmp_body, bmp_headers)) |
| 2172 | + |
| 2173 | + |
| 2174 | +# 'bmp-rib-out-table' subcommand ("show bmp bgp-rib-out-table") |
| 2175 | +@bmp.command('bgp-rib-out-table') |
| 2176 | +@clicommon.pass_db |
| 2177 | +def bmp_rib_out_table(db): |
| 2178 | + """Show bmp bgp-rib-out-table information""" |
| 2179 | + bmp_headers = ["Neighbor_Address", "NLRI", "Origin", "AS_Path", "Origin_AS", "Next_Hop", "Local_Pref", |
| 2180 | + "Originator_ID", "Community_List", "Ext_Community_List"] |
| 2181 | + |
| 2182 | + # BGP_RIB_OUT_TABLE|192.181.168.0/25|10.0.0.59 |
| 2183 | + bmp_keys = db.db.keys(BMP_STATE_DB, "BGP_RIB_OUT_TABLE|*") |
| 2184 | + delimiter = db.db.get_db_separator(BMP_STATE_DB) |
| 2185 | + |
| 2186 | + click.echo("Total number of bmp bgp-rib-out-table: {}".format(0 if bmp_keys is None else len(bmp_keys))) |
| 2187 | + |
| 2188 | + bmp_body = [] |
| 2189 | + if bmp_keys is not None: |
| 2190 | + for key in bmp_keys: |
| 2191 | + key_values = key.split(delimiter) |
| 2192 | + if len(key_values) < 3: |
| 2193 | + continue |
| 2194 | + values = db.db.get_all(BMP_STATE_DB, key) |
| 2195 | + bmp_body.append([ |
| 2196 | + key_values[2], # Neighbor_Address |
| 2197 | + key_values[1], # NLRI |
| 2198 | + values["origin"], |
| 2199 | + values["as_path"], |
| 2200 | + values["origin_as"], |
| 2201 | + values["next_hop"], |
| 2202 | + values["local_pref"], |
| 2203 | + values["originator_id"], |
| 2204 | + values["community_list"], |
| 2205 | + values["ext_community_list"] |
| 2206 | + ]) |
| 2207 | + |
| 2208 | + click.echo(tabulate(bmp_body, bmp_headers)) |
| 2209 | + |
| 2210 | + |
| 2211 | +# 'bgp-rib-in-table' subcommand ("show bmp bgp-rib-in-table") |
| 2212 | +@bmp.command('bgp-rib-in-table') |
| 2213 | +@clicommon.pass_db |
| 2214 | +def bmp_rib_in_table(db): |
| 2215 | + """Show bmp bgp-rib-in-table information""" |
| 2216 | + bmp_headers = ["Neighbor_Address", "NLRI", "Origin", "AS_Path", "Origin_AS", "Next_Hop", "Local_Pref", |
| 2217 | + "Originator_ID", "Community_List", "Ext_Community_List"] |
| 2218 | + |
| 2219 | + # BGP_RIB_IN_TABLE|20c0:ef50::/64|10.0.0.57 |
| 2220 | + bmp_keys = db.db.keys(BMP_STATE_DB, "BGP_RIB_IN_TABLE|*") |
| 2221 | + delimiter = db.db.get_db_separator(BMP_STATE_DB) |
| 2222 | + |
| 2223 | + click.echo("Total number of bmp bgp-rib-in-table: {}".format(0 if bmp_keys is None else len(bmp_keys))) |
| 2224 | + |
| 2225 | + bmp_body = [] |
| 2226 | + if bmp_keys is not None: |
| 2227 | + for key in bmp_keys: |
| 2228 | + key_values = key.split(delimiter) |
| 2229 | + if len(key_values) < 3: |
| 2230 | + continue |
| 2231 | + values = db.db.get_all(BMP_STATE_DB, key) |
| 2232 | + bmp_body.append([ |
| 2233 | + key_values[2], # Neighbor_Address |
| 2234 | + key_values[1], # NLRI |
| 2235 | + values["origin"], |
| 2236 | + values["as_path"], |
| 2237 | + values["origin_as"], |
| 2238 | + values["next_hop"], |
| 2239 | + values["local_pref"], |
| 2240 | + values["originator_id"], |
| 2241 | + values["community_list"], |
| 2242 | + values["ext_community_list"] |
| 2243 | + ]) |
| 2244 | + |
| 2245 | + click.echo(tabulate(bmp_body, bmp_headers)) |
| 2246 | + |
| 2247 | + |
| 2248 | +# 'tables' subcommand ("show bmp tables") |
| 2249 | +@bmp.command('tables') |
| 2250 | +@clicommon.pass_db |
| 2251 | +def tables(db): |
| 2252 | + """Show bmp table status information""" |
| 2253 | + bmp_headers = ["Table_Name", "Enabled"] |
| 2254 | + bmp_body = [] |
| 2255 | + click.echo("BMP tables: ") |
| 2256 | + bmp_keys = db.cfgdb.get_table('BMP') |
| 2257 | + if bmp_keys['table']: |
| 2258 | + bmp_body.append(['bgp_neighbor_table', bmp_keys['table']['bgp_neighbor_table']]) |
| 2259 | + bmp_body.append(['bgp_rib_in_table', bmp_keys['table']['bgp_rib_in_table']]) |
| 2260 | + bmp_body.append(['bgp_rib_out_table', bmp_keys['table']['bgp_rib_out_table']]) |
| 2261 | + click.echo(tabulate(bmp_body, bmp_headers)) |
| 2262 | + |
| 2263 | + |
2131 | 2264 | #
|
2132 | 2265 | # 'bfd' group ("show bfd ...")
|
2133 | 2266 | #
|
|
0 commit comments