From: Quentin Young Date: Mon, 1 Aug 2016 13:18:25 +0000 (+0000) Subject: lib: Add partial matching support X-Git-Tag: frr-3.0-branchpoint~129^2~274 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=6d53a10e4cf873ff61a3dada644d15be83dd54c0;p=matthieu%2Ffrr.git lib: Add partial matching support Signed-off-by: Quentin Young --- diff --git a/feed.x b/feed.x new file mode 100644 index 0000000000..a087987d40 --- /dev/null +++ b/feed.x @@ -0,0 +1,14 @@ +#!/bin/expect + +set f [open "copt.txt"] +set cmds [split [read $f] "\n"] +close $f + +spawn vtysh + +foreach command $cmds { + expect "dell-s6000-16#" + send "$command\r" +} + +interact diff --git a/lib/.command.h.swo b/lib/.command.h.swo new file mode 100644 index 0000000000..71a42cc20a Binary files /dev/null and b/lib/.command.h.swo differ diff --git a/lib/command_graph.c b/lib/command_graph.c index 7c09a5cd6c..3e52f42598 100644 --- a/lib/command_graph.c +++ b/lib/command_graph.c @@ -92,7 +92,7 @@ struct graph_node * copy_node (struct graph_node *node) { struct graph_node *new = new_node(node->type); - new->children = vector_copy (node->children); + new->children = NULL; new->is_start = node->is_start; new->end = node->end; new->text = node->text ? XSTRDUP(MTYPE_CMD_TOKENS, node->text) : NULL; diff --git a/lib/command_lex.l b/lib/command_lex.l index 5a0e76d418..ce09c5bf28 100644 --- a/lib/command_lex.l +++ b/lib/command_lex.l @@ -9,7 +9,7 @@ IPV4 A\.B\.C\.D IPV4_PREFIX A\.B\.C\.D\/M IPV6 X:X::X:X IPV6_PREFIX X:X::X:X\/M -VARIABLE [A-Z][A-Z_]+ +VARIABLE [A-Z][A-Z_:]+ NUMBER [0-9]{1,20} RANGE \({NUMBER}\-{NUMBER}\) diff --git a/lib/command_match.c b/lib/command_match.c index f02b7c821a..7b9c5f15d8 100644 --- a/lib/command_match.c +++ b/lib/command_match.c @@ -13,6 +13,9 @@ match_command_r (struct graph_node *, vector, unsigned int); static int score_precedence (struct graph_node *); +static enum match_type +min_match_level(enum node_type type); + /* token matcher prototypes */ static enum match_type match_ipv4 (const char *); @@ -30,7 +33,7 @@ static enum match_type match_range (struct graph_node *, const char *str); static enum match_type -match_word (struct graph_node *, enum filter_type, const char *); +match_word (struct graph_node *, const char *, enum filter_type); static enum match_type match_number (struct graph_node *, const char *); @@ -137,8 +140,11 @@ match_command (struct graph_node *start, const char *line, struct list **argv) static struct list * match_command_r (struct graph_node *start, vector vline, unsigned int n) { + // get the minimum match level that can count as a full match + enum match_type minmatch = min_match_level(start->type); + // if we don't match this node, die - if (match_token(start, vector_slot(vline, n), FILTER_STRICT) != exact_match) + if (match_token(start, vector_slot(vline, n), FILTER_RELAXED) < minmatch) return NULL; // arg list for this subgraph @@ -313,12 +319,30 @@ add_nexthops(struct list *l, struct graph_node *node) /* matching utility functions */ +/** + * Determines the minimum acceptable matching level + * for a given node type that can be accepted as a + * full match. Used for things like abbreviating + * commands, e.g. `conf t`. + */ +static enum match_type +min_match_level(enum node_type type) +{ + switch (type) { + case WORD_GN: + return partly_match; + default: + return exact_match; + } +} + static int score_precedence (struct graph_node *node) { switch (node->type) { - // these should be mutually exclusive + // these should be mutually exclusive, + // or never compared case IPV4_GN: case IPV4_PREFIX_GN: case IPV6_GN: @@ -344,11 +368,11 @@ match_token (struct graph_node *node, char *token, enum filter_type filter) case IPV4_GN: return match_ipv4 (token); case IPV4_PREFIX_GN: - return match_ipv4_prefix (token, filter); + return match_ipv4_prefix (token); case IPV6_GN: - return match_ipv6 (token, filter); + return match_ipv6 (token); case IPV6_PREFIX_GN: - return match_ipv6_prefix (token, filter); + return match_ipv6_prefix (token); case RANGE_GN: return match_range (node, token); case NUMBER_GN: @@ -584,8 +608,8 @@ match_range (struct graph_node *rangenode, const char *str) static enum match_type match_word(struct graph_node *wordnode, - enum filter_type filter, - const char *word) + const char *word, + enum filter_type filter) { if (filter == FILTER_RELAXED) { diff --git a/lib/grammar_sandbox.c b/lib/grammar_sandbox.c index 2443b8471c..66e530595b 100644 --- a/lib/grammar_sandbox.c +++ b/lib/grammar_sandbox.c @@ -56,7 +56,7 @@ DEFUN (grammar_test_complete, // print possible next hops, if any for (ALL_LIST_ELEMENTS_RO(result,node,cnode)) { if (cnode->type == END_GN) - fprintf(stderr, "\n"); + fprintf(stderr, " %p\n", cnode->element->func); else fprintf(stderr, "%s\n", describe_node(cnode, desc, 50)); } diff --git a/opt.txt b/opt.txt new file mode 100644 index 0000000000..a63e0b85f2 --- /dev/null +++ b/opt.txt @@ -0,0 +1,905 @@ +address-family encap +address-family encapv4 +address-family encapv6 +address-family ipv4 +address-family ipv4 +address-family ipv6 +address-family ipv6 +address-family vpnv4 +address-family vpnv4 unicast +address-family vpnv6 +address-family vpnv6 unicast +aggregate-address A.B.C.D A.B.C.D +aggregate-address A.B.C.D A.B.C.D as-set +aggregate-address A.B.C.D A.B.C.D as-set summary-only +aggregate-address A.B.C.D A.B.C.D summary-only +aggregate-address A.B.C.D A.B.C.D summary-only as-set +aggregate-address A.B.C.D/M +aggregate-address A.B.C.D/M as-set +aggregate-address A.B.C.D/M as-set summary-only +aggregate-address A.B.C.D/M summary-only +aggregate-address A.B.C.D/M summary-only as-set +aggregate-address X:X::X:X/M +aggregate-address X:X::X:X/M summary-only +bgp always-compare-med +bgp bestpath as-path confed +bgp bestpath as-path ignore +bgp bestpath as-path multipath-relax +bgp bestpath compare-routerid +bgp bestpath med +bgp bestpath med confed missing-as-worst +bgp bestpath med missing-as-worst confed +bgp client-to-client reflection +bgp cluster-id (1-4294967295) +bgp cluster-id A.B.C.D +bgp confederation identifier (1-4294967295) +bgp confederation peers . (1-4294967295) +bgp config-type +bgp dampening +bgp dampening (1-45) +bgp dampening (1-45) (1-20000) (1-20000) (1-255) +bgp default ipv4-unicast +bgp default local-preference (0-4294967295) +bgp default show-hostname +bgp default subgroup-pkt-queue-max (20-100) +bgp deterministic-med +bgp disable-ebgp-connected-route-check +bgp enforce-first-as +bgp fast-external-failover +bgp graceful-restart +bgp graceful-restart stalepath-time (1-3600) +bgp listen limit (1-5000) +bgp listen range peer-group WORD +bgp log-neighbor-changes +bgp max-med administrative +bgp max-med administrative (0-4294967294) +bgp max-med on-startup (5-86400) +bgp max-med on-startup (5-86400) (0-4294967294) +bgp multiple-instance +bgp network import-check +bgp route-map delay-timer (0-600) +bgp route-reflector allow-outbound-policy +bgp router-id A.B.C.D +bgp router-id IFNAME +clear bgp +clear bgp in +clear bgp in prefix-filter +clear bgp out +clear bgp soft +clear bgp soft in +clear bgp soft out +clear bgp * +clear bgp * in +clear bgp * in prefix-filter +clear bgp * out +clear bgp * soft +clear bgp * soft in +clear bgp * soft out +clear bgp (1-4294967295) +clear bgp (1-4294967295) in +clear bgp (1-4294967295) in prefix-filter +clear bgp (1-4294967295) out +clear bgp (1-4294967295) soft +clear bgp (1-4294967295) soft in +clear bgp (1-4294967295) soft out +clear bgp BGP_INSTANCE_CMD +clear bgp BGP_INSTANCE_CMD in +clear bgp BGP_INSTANCE_CMD out +clear bgp BGP_INSTANCE_CMD soft +clear bgp BGP_INSTANCE_CMD soft in +clear bgp BGP_INSTANCE_CMD soft out +clear bgp BGP_INSTANCE_CMD * +clear bgp BGP_INSTANCE_CMD * in +clear bgp BGP_INSTANCE_CMD * out +clear bgp BGP_INSTANCE_CMD * soft +clear bgp BGP_INSTANCE_CMD * soft in +clear bgp BGP_INSTANCE_CMD * soft out +clear bgp BGP_INSTANCE_CMD (1-4294967295) +clear bgp BGP_INSTANCE_CMD (1-4294967295) in +clear bgp BGP_INSTANCE_CMD (1-4294967295) out +clear bgp BGP_INSTANCE_CMD (1-4294967295) soft +clear bgp BGP_INSTANCE_CMD (1-4294967295) soft in +clear bgp BGP_INSTANCE_CMD (1-4294967295) soft out +clear bgp BGP_INSTANCE_CMD external +clear bgp BGP_INSTANCE_CMD external in +clear bgp BGP_INSTANCE_CMD external out +clear bgp BGP_INSTANCE_CMD external soft +clear bgp BGP_INSTANCE_CMD external soft in +clear bgp BGP_INSTANCE_CMD external soft out +clear bgp BGP_INSTANCE_CMD ipv6 +clear bgp BGP_INSTANCE_CMD ipv6 in +clear bgp BGP_INSTANCE_CMD ipv6 out +clear bgp BGP_INSTANCE_CMD ipv6 soft +clear bgp BGP_INSTANCE_CMD ipv6 soft in +clear bgp BGP_INSTANCE_CMD ipv6 soft out +clear bgp BGP_INSTANCE_CMD ipv6 prefix X:X::X:X/M +clear bgp BGP_INSTANCE_CMD ipv6 * +clear bgp BGP_INSTANCE_CMD ipv6 * in +clear bgp BGP_INSTANCE_CMD ipv6 * out +clear bgp BGP_INSTANCE_CMD ipv6 * soft +clear bgp BGP_INSTANCE_CMD ipv6 * soft in +clear bgp BGP_INSTANCE_CMD ipv6 * soft out +clear bgp BGP_INSTANCE_CMD ipv6 (1-4294967295) +clear bgp BGP_INSTANCE_CMD ipv6 (1-4294967295) in +clear bgp BGP_INSTANCE_CMD ipv6 (1-4294967295) out +clear bgp BGP_INSTANCE_CMD ipv6 (1-4294967295) soft +clear bgp BGP_INSTANCE_CMD ipv6 (1-4294967295) soft in +clear bgp BGP_INSTANCE_CMD ipv6 (1-4294967295) soft out +clear bgp BGP_INSTANCE_CMD ipv6 external +clear bgp BGP_INSTANCE_CMD ipv6 external WORD in +clear bgp BGP_INSTANCE_CMD ipv6 external WORD out +clear bgp BGP_INSTANCE_CMD ipv6 external soft +clear bgp BGP_INSTANCE_CMD ipv6 external soft in +clear bgp BGP_INSTANCE_CMD ipv6 external soft out +clear bgp BGP_INSTANCE_CMD ipv6 peer-group WORD +clear bgp BGP_INSTANCE_CMD ipv6 peer-group WORD in +clear bgp BGP_INSTANCE_CMD ipv6 peer-group WORD out +clear bgp BGP_INSTANCE_CMD ipv6 peer-group WORD soft +clear bgp BGP_INSTANCE_CMD ipv6 peer-group WORD soft in +clear bgp BGP_INSTANCE_CMD ipv6 peer-group WORD soft out +clear bgp BGP_INSTANCE_CMD peer-group WORD +clear bgp BGP_INSTANCE_CMD peer-group WORD in +clear bgp BGP_INSTANCE_CMD peer-group WORD out +clear bgp BGP_INSTANCE_CMD peer-group WORD soft +clear bgp BGP_INSTANCE_CMD peer-group WORD soft in +clear bgp BGP_INSTANCE_CMD peer-group WORD soft out +clear bgp external +clear bgp external in +clear bgp external in prefix-filter +clear bgp external out +clear bgp external soft +clear bgp external soft in +clear bgp external soft out +clear bgp ipv6 +clear bgp ipv6 in +clear bgp ipv6 in prefix-filter +clear bgp ipv6 out +clear bgp ipv6 soft +clear bgp ipv6 soft in +clear bgp ipv6 soft out +clear bgp ipv6 prefix X:X::X:X/M +clear bgp ipv6 * +clear bgp ipv6 * in +clear bgp ipv6 * in prefix-filter +clear bgp ipv6 * out +clear bgp ipv6 * soft +clear bgp ipv6 * soft in +clear bgp ipv6 * soft out +clear bgp ipv6 (1-4294967295) +clear bgp ipv6 (1-4294967295) in +clear bgp ipv6 (1-4294967295) in prefix-filter +clear bgp ipv6 (1-4294967295) out +clear bgp ipv6 (1-4294967295) soft +clear bgp ipv6 (1-4294967295) soft in +clear bgp ipv6 (1-4294967295) soft out +clear bgp ipv6 external +clear bgp ipv6 external WORD in +clear bgp ipv6 external WORD out +clear bgp ipv6 external in prefix-filter +clear bgp ipv6 external soft +clear bgp ipv6 external soft in +clear bgp ipv6 external soft out +clear bgp ipv6 peer-group WORD +clear bgp ipv6 peer-group WORD in +clear bgp ipv6 peer-group WORD in prefix-filter +clear bgp ipv6 peer-group WORD out +clear bgp ipv6 peer-group WORD soft +clear bgp ipv6 peer-group WORD soft in +clear bgp ipv6 peer-group WORD soft out +clear bgp peer-group WORD +clear bgp peer-group WORD in +clear bgp peer-group WORD in prefix-filter +clear bgp peer-group WORD out +clear bgp peer-group WORD soft +clear bgp peer-group WORD soft in +clear bgp peer-group WORD soft out +clear ip bgp in +clear ip bgp in prefix-filter +clear ip bgp ipv4 in +clear ip bgp ipv4 in prefix-filter +clear ip bgp ipv4 out +clear ip bgp ipv4 soft +clear ip bgp ipv4 soft in +clear ip bgp ipv4 soft out +clear ip bgp out +clear ip bgp soft +clear ip bgp soft in +clear ip bgp soft out +clear ip bgp vpnv4 unicast in +clear ip bgp vpnv4 unicast out +clear ip bgp vpnv4 unicast soft +clear ip bgp vpnv4 unicast soft in +clear ip bgp vpnv4 unicast soft out +clear ip bgp +clear ip bgp * +clear ip bgp * encap unicast in +clear ip bgp * encap unicast out +clear ip bgp * encap unicast soft +clear ip bgp * encap unicast soft in +clear ip bgp * encap unicast soft out +clear ip bgp * in +clear ip bgp * in prefix-filter +clear ip bgp * ipv4 in +clear ip bgp * ipv4 in prefix-filter +clear ip bgp * ipv4 out +clear ip bgp * ipv4 soft +clear ip bgp * ipv4 soft in +clear ip bgp * ipv4 soft out +clear ip bgp * out +clear ip bgp * soft +clear ip bgp * soft in +clear ip bgp * soft out +clear ip bgp * vpnv4 unicast in +clear ip bgp * vpnv4 unicast out +clear ip bgp * vpnv4 unicast soft +clear ip bgp * vpnv4 unicast soft in +clear ip bgp * vpnv4 unicast soft out +clear ip bgp (1-4294967295) +clear ip bgp (1-4294967295) encap unicast in +clear ip bgp (1-4294967295) encap unicast out +clear ip bgp (1-4294967295) encap unicast soft +clear ip bgp (1-4294967295) encap unicast soft in +clear ip bgp (1-4294967295) encap unicast soft out +clear ip bgp (1-4294967295) in +clear ip bgp (1-4294967295) in prefix-filter +clear ip bgp (1-4294967295) ipv4 in +clear ip bgp (1-4294967295) ipv4 in prefix-filter +clear ip bgp (1-4294967295) ipv4 out +clear ip bgp (1-4294967295) ipv4 soft +clear ip bgp (1-4294967295) ipv4 soft in +clear ip bgp (1-4294967295) ipv4 soft out +clear ip bgp (1-4294967295) out +clear ip bgp (1-4294967295) soft +clear ip bgp (1-4294967295) soft in +clear ip bgp (1-4294967295) soft out +clear ip bgp (1-4294967295) vpnv4 unicast in +clear ip bgp (1-4294967295) vpnv4 unicast out +clear ip bgp (1-4294967295) vpnv4 unicast soft +clear ip bgp (1-4294967295) vpnv4 unicast soft in +clear ip bgp (1-4294967295) vpnv4 unicast soft out +clear ip bgp A.B.C.D encap unicast in +clear ip bgp A.B.C.D encap unicast out +clear ip bgp A.B.C.D encap unicast soft +clear ip bgp A.B.C.D encap unicast soft in +clear ip bgp A.B.C.D encap unicast soft out +clear ip bgp BGP_INSTANCE_CMD in +clear ip bgp BGP_INSTANCE_CMD ipv4 in +clear ip bgp BGP_INSTANCE_CMD ipv4 out +clear ip bgp BGP_INSTANCE_CMD ipv4 soft +clear ip bgp BGP_INSTANCE_CMD ipv4 soft in +clear ip bgp BGP_INSTANCE_CMD ipv4 soft out +clear ip bgp BGP_INSTANCE_CMD out +clear ip bgp BGP_INSTANCE_CMD soft +clear ip bgp BGP_INSTANCE_CMD soft in +clear ip bgp BGP_INSTANCE_CMD soft out +clear ip bgp BGP_INSTANCE_CMD +clear ip bgp BGP_INSTANCE_CMD * +clear ip bgp BGP_INSTANCE_CMD * in +clear ip bgp BGP_INSTANCE_CMD * ipv4 in +clear ip bgp BGP_INSTANCE_CMD * ipv4 out +clear ip bgp BGP_INSTANCE_CMD * ipv4 soft +clear ip bgp BGP_INSTANCE_CMD * ipv4 soft in +clear ip bgp BGP_INSTANCE_CMD * ipv4 soft out +clear ip bgp BGP_INSTANCE_CMD * out +clear ip bgp BGP_INSTANCE_CMD * soft +clear ip bgp BGP_INSTANCE_CMD * soft in +clear ip bgp BGP_INSTANCE_CMD * soft out +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) in +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) ipv4 in +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) ipv4 out +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) ipv4 soft +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) ipv4 soft in +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) ipv4 soft out +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) out +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) soft +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) soft in +clear ip bgp BGP_INSTANCE_CMD (1-4294967295) soft out +clear ip bgp BGP_INSTANCE_CMD external +clear ip bgp BGP_INSTANCE_CMD external in +clear ip bgp BGP_INSTANCE_CMD external ipv4 in +clear ip bgp BGP_INSTANCE_CMD external ipv4 out +clear ip bgp BGP_INSTANCE_CMD external ipv4 soft +clear ip bgp BGP_INSTANCE_CMD external ipv4 soft in +clear ip bgp BGP_INSTANCE_CMD external ipv4 soft out +clear ip bgp BGP_INSTANCE_CMD external out +clear ip bgp BGP_INSTANCE_CMD external soft +clear ip bgp BGP_INSTANCE_CMD external soft in +clear ip bgp BGP_INSTANCE_CMD external soft out +clear ip bgp BGP_INSTANCE_CMD peer-group WORD +clear ip bgp BGP_INSTANCE_CMD peer-group WORD in +clear ip bgp BGP_INSTANCE_CMD peer-group WORD ipv4 in +clear ip bgp BGP_INSTANCE_CMD peer-group WORD ipv4 out +clear ip bgp BGP_INSTANCE_CMD peer-group WORD ipv4 soft +clear ip bgp BGP_INSTANCE_CMD peer-group WORD ipv4 soft in +clear ip bgp BGP_INSTANCE_CMD peer-group WORD ipv4 soft out +clear ip bgp BGP_INSTANCE_CMD peer-group WORD out +clear ip bgp BGP_INSTANCE_CMD peer-group WORD soft +clear ip bgp BGP_INSTANCE_CMD peer-group WORD soft in +clear ip bgp BGP_INSTANCE_CMD peer-group WORD soft out +clear ip bgp BGP_INSTANCE_CMD prefix A.B.C.D/M +clear ip bgp dampening +clear ip bgp dampening A.B.C.D +clear ip bgp dampening A.B.C.D A.B.C.D +clear ip bgp dampening A.B.C.D/M +clear ip bgp external +clear ip bgp external in +clear ip bgp external in prefix-filter +clear ip bgp external ipv4 in +clear ip bgp external ipv4 in prefix-filter +clear ip bgp external ipv4 out +clear ip bgp external ipv4 soft +clear ip bgp external ipv4 soft in +clear ip bgp external ipv4 soft out +clear ip bgp external out +clear ip bgp external soft +clear ip bgp external soft in +clear ip bgp external soft out +clear ip bgp peer-group WORD +clear ip bgp peer-group WORD in +clear ip bgp peer-group WORD in prefix-filter +clear ip bgp peer-group WORD ipv4 in +clear ip bgp peer-group WORD ipv4 in prefix-filter +clear ip bgp peer-group WORD ipv4 out +clear ip bgp peer-group WORD ipv4 soft +clear ip bgp peer-group WORD ipv4 soft in +clear ip bgp peer-group WORD ipv4 soft out +clear ip bgp peer-group WORD out +clear ip bgp peer-group WORD soft +clear ip bgp peer-group WORD soft in +clear ip bgp peer-group WORD soft out +clear ip bgp prefix A.B.C.D/M +coalesce-time (0-4294967295) +debug bgp as4 +debug bgp as4 segment +debug bgp bestpath +debug bgp keepalives +debug bgp keepalives +debug bgp neighbor-events +debug bgp neighbor-events +debug bgp nht +debug bgp update-groups +debug bgp updates +debug bgp updates +debug bgp updates +debug bgp updates prefix +debug bgp zebra +debug bgp zebra prefix +distance (1-255) A.B.C.D/M +distance (1-255) A.B.C.D/M WORD +distance bgp (1-255) (1-255) (1-255) +dump bgp PATH [INTERVAL] +exit-address-family +ip community-list (1-99) +ip community-list (1-99) AA:NN +ip community-list (100-500) LINE +ip community-list expanded WORD LINE +ip community-list standard WORD +ip community-list standard WORD AA:NN +ip extcommunity-list (1-99) +ip extcommunity-list (1-99) AA:NN +ip extcommunity-list (100-500) LINE +ip extcommunity-list expanded WORD LINE +ip extcommunity-list standard WORD +ip extcommunity-list standard WORD AA:NN +ipv6 bgp aggregate-address X:X::X:X/M +ipv6 bgp aggregate-address X:X::X:X/M summary-only +ipv6 bgp network X:X::X:X/M +match as-path WORD +match community <(1-99)|(100-500)|WORD> +match community <(1-99)|(100-500)|WORD> exact-match +match extcommunity <(1-99)|(100-500)|WORD> +match interface WORD +match ip address <(1-199)|(1300-2699)|WORD> +match ip address prefix-list WORD +match ip next-hop <(1-199)|(1300-2699)|WORD> +match ip next-hop prefix-list WORD +match ip route-source <(1-199)|(1300-2699)|WORD> +match ip route-source prefix-list WORD +match ipv6 address WORD +match ipv6 address prefix-list WORD +match ipv6 next-hop X:X::X:X +match local-preference (0-4294967295) +match metric (0-4294967295) +match origin +match peer +match peer local +match probability (0-100) +match tag (1-65535) +maximum-paths (1-255) +maximum-paths ibgp (1-255) +maximum-paths ibgp (1-255) equal-cluster-length +neighbor interface WORD +neighbor port (0-65535) +neighbor strict-capability-match +neighbor activate +neighbor addpath-tx-all-paths +neighbor addpath-tx-bestpath-per-AS +neighbor advertisement-interval (0-600) +neighbor allowas-in +neighbor allowas-in (1-10) +neighbor as-override +neighbor attribute-unchanged +neighbor attribute-unchanged +neighbor attribute-unchanged as-path +neighbor attribute-unchanged as-path med next-hop +neighbor attribute-unchanged as-path next-hop med +neighbor attribute-unchanged med +neighbor attribute-unchanged med as-path next-hop +neighbor attribute-unchanged med next-hop as-path +neighbor attribute-unchanged next-hop +neighbor attribute-unchanged next-hop as-path med +neighbor attribute-unchanged next-hop med as-path +neighbor bfd +neighbor bfd (2-255) BFD_CMD_MIN_RX_RANGE (50-60000) +neighbor capability dynamic +neighbor capability extended-nexthop +neighbor capability orf prefix-list +neighbor default-originate +neighbor default-originate route-map WORD +neighbor description LINE +neighbor disable-connected-check +neighbor distribute-list <(1-199)|(1300-2699)|WORD> +neighbor dont-capability-negotiate +neighbor ebgp-multihop +neighbor ebgp-multihop (1-255) +neighbor enforce-multihop +neighbor filter-list WORD +neighbor local-as (1-4294967295) +neighbor local-as (1-4294967295) no-prepend +neighbor local-as (1-4294967295) no-prepend replace-as +neighbor maximum-prefix (1-4294967295) +neighbor maximum-prefix (1-4294967295) (1-100) +neighbor maximum-prefix (1-4294967295) (1-100) restart (1-65535) +neighbor maximum-prefix (1-4294967295) (1-100) warning-only +neighbor maximum-prefix (1-4294967295) restart (1-65535) +neighbor maximum-prefix (1-4294967295) warning-only +neighbor next-hop-self +neighbor next-hop-self force +neighbor nexthop-local unchanged +neighbor override-capability +neighbor passive +neighbor password LINE +neighbor peer-group WORD +neighbor prefix-list WORD +neighbor remote-as <(1-4294967295)|external|internal> +neighbor remove-private-AS +neighbor remove-private-AS all +neighbor remove-private-AS all replace-AS +neighbor remove-private-AS replace-AS +neighbor route-map WORD +neighbor route-reflector-client +neighbor route-server-client +neighbor send-community +neighbor send-community +neighbor shutdown +neighbor soft-reconfiguration inbound +neighbor solo +neighbor timers (0-65535) (0-65535) +neighbor timers connect (1-65535) +neighbor ttl-security hops (1-254) +neighbor unsuppress-map WORD +neighbor update-source +neighbor weight (0-65535) +neighbor WORD interface +neighbor WORD interface peer-group WORD +neighbor WORD interface v6only +neighbor WORD interface v6only peer-group WORD +neighbor WORD peer-group +network A.B.C.D +network A.B.C.D backdoor +network A.B.C.D mask A.B.C.D +network A.B.C.D mask A.B.C.D backdoor +network A.B.C.D mask A.B.C.D route-map WORD +network A.B.C.D route-map WORD +network A.B.C.D/M +network A.B.C.D/M backdoor +network A.B.C.D/M rd ASN:nn_or_IP-address:nn tag WORD +network A.B.C.D/M rd ASN:nn_or_IP-address:nn tag WORD route-map WORD +network A.B.C.D/M route-map WORD +network X:X::X:X/M +network X:X::X:X/M route-map WORD +redistribute +redistribute metric (0-4294967295) +redistribute metric (0-4294967295) route-map WORD +redistribute route-map WORD +redistribute route-map WORD metric (0-4294967295) +redistribute +redistribute metric (0-4294967295) +redistribute metric (0-4294967295) route-map WORD +redistribute route-map WORD +redistribute route-map WORD metric (0-4294967295) +redistribute (1-65535) +redistribute (1-65535) metric (0-4294967295) +redistribute (1-65535) metric (0-4294967295) route-map WORD +redistribute (1-65535) route-map WORD +redistribute (1-65535) route-map WORD metric (0-4294967295) +router bgp +router bgp (1-4294967295) +router bgp (1-4294967295) WORD +set aggregator as (1-4294967295) A.B.C.D +set as-path exclude . (1-4294967295) +set as-path prepend (last-as) (1-10) +set as-path prepend . (1-4294967295) +set atomic-aggregate +set comm-list <(1-99)|(100-500)|WORD> delete +set community AA:NN +set community none +set extcommunity rt .ASN:nn_or_IP-address:nn +set extcommunity soo .ASN:nn_or_IP-address:nn +set ip next-hop A.B.C.D +set ip next-hop peer-address +set ip next-hop unchanged +set ipv6 next-hop global X:X::X:X +set ipv6 next-hop local X:X::X:X +set ipv6 next-hop peer-address +set local-preference (0-4294967295) +set metric +set metric <+/-metric> +set metric (0-4294967295) +set origin +set originator-id A.B.C.D +set tag (1-65535) +set vpnv4 next-hop A.B.C.D +set weight (0-4294967295) +show bgp statistics +show bgp update-groups +show bgp update-groups +show bgp update-groups SUBGROUP-ID +show bgp update-groups SUBGROUP-ID +show bgp BGP_INSTANCE_ALL_CMD summary [json] +show bgp BGP_INSTANCE_ALL_CMD update-groups +show bgp BGP_INSTANCE_ALL_CMD [json] +show bgp BGP_INSTANCE_CMD community +show bgp BGP_INSTANCE_CMD community +show bgp BGP_INSTANCE_CMD community +show bgp BGP_INSTANCE_CMD community +show bgp BGP_INSTANCE_CMD community +show bgp BGP_INSTANCE_CMD neighbors [json] +show bgp BGP_INSTANCE_CMD statistics +show bgp BGP_INSTANCE_CMD X:X::X:X [json] +show bgp BGP_INSTANCE_CMD X:X::X:X [json] +show bgp BGP_INSTANCE_CMD X:X::X:X/M [json] +show bgp BGP_INSTANCE_CMD X:X::X:X/M longer-prefixes +show bgp BGP_INSTANCE_CMD X:X::X:X/M [json] +show bgp BGP_INSTANCE_CMD community-list <(1-500)|WORD> +show bgp BGP_INSTANCE_CMD filter-list WORD +show bgp BGP_INSTANCE_CMD ipv6 summary [json] +show bgp BGP_INSTANCE_CMD ipv6 X:X::X:X [json] +show bgp BGP_INSTANCE_CMD ipv6 X:X::X:X [json] +show bgp BGP_INSTANCE_CMD ipv6 X:X::X:X/M [json] +show bgp BGP_INSTANCE_CMD ipv6 X:X::X:X/M longer-prefixes +show bgp BGP_INSTANCE_CMD ipv6 X:X::X:X/M [json] +show bgp BGP_INSTANCE_CMD ipv6 community-list <(1-500)|WORD> +show bgp BGP_INSTANCE_CMD ipv6 filter-list WORD +show bgp BGP_INSTANCE_CMD ipv6 neighbors advertised-routes [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors dampened-routes [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors flap-statistics [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors prefix-counts [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors received prefix-filter [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors received-routes [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors routes [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors [json] +show bgp BGP_INSTANCE_CMD ipv6 neighbors [json] +show bgp BGP_INSTANCE_CMD ipv6 prefix-list WORD +show bgp BGP_INSTANCE_CMD ipv6 route-map WORD +show bgp BGP_INSTANCE_CMD ipv6 summary [json] +show bgp BGP_INSTANCE_CMD ipv6 [json] +show bgp BGP_INSTANCE_CMD neighbors advertised-routes [json] +show bgp BGP_INSTANCE_CMD neighbors dampened-routes [json] +show bgp BGP_INSTANCE_CMD neighbors flap-statistics [json] +show bgp BGP_INSTANCE_CMD neighbors received prefix-filter [json] +show bgp BGP_INSTANCE_CMD neighbors received-routes [json] +show bgp BGP_INSTANCE_CMD neighbors routes [json] +show bgp BGP_INSTANCE_CMD neighbors [json] +show bgp BGP_INSTANCE_CMD neighbors [json] +show bgp BGP_INSTANCE_CMD prefix-list WORD +show bgp BGP_INSTANCE_CMD route-map WORD +show bgp BGP_INSTANCE_CMD summary [json] +show bgp BGP_INSTANCE_CMD update-groups +show bgp BGP_INSTANCE_CMD update-groups +show bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID +show bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID +show bgp BGP_INSTANCE_CMD [json] +show bgp X:X::X:X [json] +show bgp X:X::X:X [json] +show bgp X:X::X:X/M [json] +show bgp X:X::X:X/M longer-prefixes +show bgp X:X::X:X/M [json] +show bgp community +show bgp community +show bgp community +show bgp community +show bgp community +show bgp community exact-match +show bgp community exact-match +show bgp community exact-match +show bgp community exact-match +show bgp community-list <(1-500)|WORD> +show bgp community-list <(1-500)|WORD> exact-match +show bgp filter-list WORD +show bgp ipv4 A.B.C.D [json] +show bgp ipv4 A.B.C.D [json] +show bgp ipv4 A.B.C.D/M [json] +show bgp ipv4 A.B.C.D/M [json] +show bgp ipv4 summary [json] +show bgp ipv4 [json] +show bgp ipv4 encap +show bgp ipv4 encap neighbors A.B.C.D advertised-routes +show bgp ipv4 encap neighbors A.B.C.D routes +show bgp ipv4 encap rd ASN:nn_or_IP-address:nn +show bgp ipv4 encap rd ASN:nn_or_IP-address:nn neighbors advertised-routes +show bgp ipv4 encap rd ASN:nn_or_IP-address:nn neighbors routes +show bgp ipv4 encap rd ASN:nn_or_IP-address:nn tags +show bgp ipv4 encap tags +show bgp ipv6 X:X::X:X [json] +show bgp ipv6 X:X::X:X [json] +show bgp ipv6 X:X::X:X/M [json] +show bgp ipv6 X:X::X:X/M [json] +show bgp ipv6 summary [json] +show bgp ipv6 [json] +show bgp ipv6 X:X::X:X [json] +show bgp ipv6 X:X::X:X [json] +show bgp ipv6 X:X::X:X/M [json] +show bgp ipv6 X:X::X:X/M longer-prefixes +show bgp ipv6 X:X::X:X/M [json] +show bgp ipv6 community +show bgp ipv6 community +show bgp ipv6 community +show bgp ipv6 community +show bgp ipv6 community +show bgp ipv6 community exact-match +show bgp ipv6 community exact-match +show bgp ipv6 community exact-match +show bgp ipv6 community exact-match +show bgp ipv6 community-list <(1-500)|WORD> +show bgp ipv6 community-list <(1-500)|WORD> exact-match +show bgp ipv6 encap +show bgp ipv6 encap neighbors A.B.C.D advertised-routes +show bgp ipv6 encap neighbors A.B.C.D routes +show bgp ipv6 encap rd ASN:nn_or_IP-address:nn +show bgp ipv6 encap rd ASN:nn_or_IP-address:nn neighbors advertised-routes +show bgp ipv6 encap rd ASN:nn_or_IP-address:nn neighbors routes +show bgp ipv6 encap rd ASN:nn_or_IP-address:nn tags +show bgp ipv6 encap tags +show bgp ipv6 filter-list WORD +show bgp ipv6 neighbors advertised-routes [json] +show bgp ipv6 neighbors dampened-routes [json] +show bgp ipv6 neighbors flap-statistics [json] +show bgp ipv6 neighbors prefix-counts [json] +show bgp ipv6 neighbors received prefix-filter [json] +show bgp ipv6 neighbors received-routes [json] +show bgp ipv6 neighbors routes [json] +show bgp ipv6 neighbors [json] +show bgp ipv6 neighbors [json] +show bgp ipv6 prefix-list WORD +show bgp ipv6 regexp LINE +show bgp ipv6 route-map WORD +show bgp ipv6 summary [json] +show bgp ipv6 [json] +show bgp memory +show bgp neighbors advertised-routes [json] +show bgp neighbors dampened-routes [json] +show bgp neighbors flap-statistics [json] +show bgp neighbors received prefix-filter [json] +show bgp neighbors received-routes [json] +show bgp neighbors routes [json] +show bgp neighbors [json] +show bgp neighbors [json] +show bgp prefix-list WORD +show bgp regexp LINE +show bgp route-map WORD +show bgp summary [json] +show bgp update-groups +show bgp update-groups +show bgp update-groups SUBGROUP-ID +show bgp update-groups SUBGROUP-ID +show bgp view WORD ipv4 summary [json] +show bgp views +show bgp vrfs [json] +show bgp [json] +show debugging bgp +show ip as-path-access-list +show ip as-path-access-list WORD +show ip bgp A.B.C.D [json] +show ip bgp A.B.C.D [json] +show ip bgp A.B.C.D/M [json] +show ip bgp A.B.C.D/M longer-prefixes +show ip bgp A.B.C.D/M [json] +show ip bgp BGP_INSTANCE_ALL_CMD neighbors [json] +show ip bgp BGP_INSTANCE_ALL_CMD nexthop +show ip bgp BGP_INSTANCE_ALL_CMD summary [json] +show ip bgp BGP_INSTANCE_ALL_CMD update-groups +show ip bgp BGP_INSTANCE_ALL_CMD [json] +show ip bgp BGP_INSTANCE_CMD A.B.C.D [json] +show ip bgp BGP_INSTANCE_CMD A.B.C.D [json] +show ip bgp BGP_INSTANCE_CMD A.B.C.D/M [json] +show ip bgp BGP_INSTANCE_CMD A.B.C.D/M longer-prefixes +show ip bgp BGP_INSTANCE_CMD A.B.C.D/M [json] +show ip bgp BGP_INSTANCE_CMD community-list <(1-500)|WORD> +show ip bgp BGP_INSTANCE_CMD filter-list WORD +show ip bgp BGP_INSTANCE_CMD neighbors advertised-routes route-map WORD [json] +show ip bgp BGP_INSTANCE_CMD neighbors advertised-routes [json] +show ip bgp BGP_INSTANCE_CMD neighbors prefix-counts [json] +show ip bgp BGP_INSTANCE_CMD neighbors received-routes route-map WORD [json] +show ip bgp BGP_INSTANCE_CMD neighbors received-routes [json] +show ip bgp BGP_INSTANCE_CMD neighbors routes [json] +show ip bgp BGP_INSTANCE_CMD neighbors [json] +show ip bgp BGP_INSTANCE_CMD neighbors [json] +show ip bgp BGP_INSTANCE_CMD nexthop +show ip bgp BGP_INSTANCE_CMD nexthop detail +show ip bgp BGP_INSTANCE_CMD peer-group +show ip bgp BGP_INSTANCE_CMD peer-group WORD +show ip bgp BGP_INSTANCE_CMD prefix-list WORD +show ip bgp BGP_INSTANCE_CMD route-map WORD +show ip bgp BGP_INSTANCE_CMD summary [json] +show ip bgp BGP_INSTANCE_CMD update-groups +show ip bgp BGP_INSTANCE_CMD update-groups +show ip bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID +show ip bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID +show ip bgp BGP_INSTANCE_CMD [json] +show ip bgp attribute-info +show ip bgp cidr-only +show ip bgp community +show ip bgp community +show ip bgp community +show ip bgp community +show ip bgp community +show ip bgp community exact-match +show ip bgp community exact-match +show ip bgp community exact-match +show ip bgp community exact-match +show ip bgp community-info +show ip bgp community-list <(1-500)|WORD> +show ip bgp community-list <(1-500)|WORD> exact-match +show ip bgp dampened-paths +show ip bgp dampening dampened-paths +show ip bgp dampening flap-statistics +show ip bgp dampening flap-statistics A.B.C.D +show ip bgp dampening flap-statistics A.B.C.D/M longer-prefixes +show ip bgp dampening flap-statistics cidr-only +show ip bgp dampening flap-statistics filter-list WORD +show ip bgp dampening flap-statistics prefix-list WORD +show ip bgp dampening flap-statistics regexp LINE +show ip bgp dampening flap-statistics route-map WORD +show ip bgp dampening parameters +show ip bgp filter-list WORD +show ip bgp flap-statistics +show ip bgp flap-statistics A.B.C.D +show ip bgp flap-statistics A.B.C.D/M +show ip bgp flap-statistics A.B.C.D/M longer-prefixes +show ip bgp flap-statistics cidr-only +show ip bgp flap-statistics filter-list WORD +show ip bgp flap-statistics prefix-list WORD +show ip bgp flap-statistics regexp LINE +show ip bgp flap-statistics route-map WORD +show ip bgp ipv4 A.B.C.D [json] +show ip bgp ipv4 A.B.C.D/M [json] +show ip bgp ipv4 A.B.C.D/M longer-prefixes +show ip bgp ipv4 A.B.C.D/M [json] +show ip bgp ipv4 cidr-only +show ip bgp ipv4 community +show ip bgp ipv4 community +show ip bgp ipv4 community +show ip bgp ipv4 community +show ip bgp ipv4 community +show ip bgp ipv4 community exact-match +show ip bgp ipv4 community exact-match +show ip bgp ipv4 community exact-match +show ip bgp ipv4 community exact-match +show ip bgp ipv4 community-list <(1-500)|WORD> +show ip bgp ipv4 community-list <(1-500)|WORD> exact-match +show ip bgp ipv4 filter-list WORD +show ip bgp ipv4 neighbors advertised-routes route-map WORD [json] +show ip bgp ipv4 neighbors advertised-routes [json] +show ip bgp ipv4 neighbors prefix-counts [json] +show ip bgp ipv4 neighbors received prefix-filter [json] +show ip bgp ipv4 neighbors received-routes route-map WORD [json] +show ip bgp ipv4 neighbors received-routes [json] +show ip bgp ipv4 neighbors routes [json] +show ip bgp ipv4 neighbors [json] +show ip bgp ipv4 neighbors [json] +show ip bgp ipv4 paths +show ip bgp ipv4 prefix-list WORD +show ip bgp ipv4 regexp LINE +show ip bgp ipv4 route-map WORD +show ip bgp ipv4 summary [json] +show ip bgp ipv4 [json] +show ip bgp neighbors advertised-routes route-map WORD [json] +show ip bgp neighbors advertised-routes [json] +show ip bgp neighbors dampened-routes [json] +show ip bgp neighbors flap-statistics [json] +show ip bgp neighbors prefix-counts [json] +show ip bgp neighbors received prefix-filter [json] +show ip bgp neighbors received-routes route-map WORD [json] +show ip bgp neighbors received-routes [json] +show ip bgp neighbors routes [json] +show ip bgp neighbors [json] +show ip bgp neighbors [json] +show ip bgp nexthop +show ip bgp nexthop detail +show ip bgp paths +show ip bgp peer-group +show ip bgp peer-group WORD +show ip bgp prefix-list WORD +show ip bgp regexp LINE +show ip bgp route-map WORD +show ip bgp summary [json] +show ip bgp update-groups +show ip bgp update-groups +show ip bgp update-groups SUBGROUP-ID +show ip bgp update-groups SUBGROUP-ID +show ip bgp view WORD ipv4 summary [json] +show ip bgp vpnv4 all +show ip bgp vpnv4 all A.B.C.D [json] +show ip bgp vpnv4 all A.B.C.D/M [json] +show ip bgp vpnv4 all neighbors prefix-counts [json] +show ip bgp vpnv4 all neighbors A.B.C.D advertised-routes [json] +show ip bgp vpnv4 all neighbors A.B.C.D routes [json] +show ip bgp vpnv4 all neighbors A.B.C.D [json] +show ip bgp vpnv4 all neighbors [json] +show ip bgp vpnv4 all summary [json] +show ip bgp vpnv4 all tags +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn A.B.C.D [json] +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn A.B.C.D/M [json] +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D advertised-routes [json] +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D routes [json] +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D [json] +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors [json] +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn summary [json] +show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn tags +show ip bgp [json] +show ip community-list +show ip community-list <(1-500)|WORD> +show ip extcommunity-list +show ip extcommunity-list <(1-500)|WORD> +show ipv6 bgp X:X::X:X [json] +show ipv6 bgp X:X::X:X/M longer-prefixes +show ipv6 bgp X:X::X:X/M [json] +show ipv6 bgp community +show ipv6 bgp community +show ipv6 bgp community +show ipv6 bgp community +show ipv6 bgp community +show ipv6 bgp community exact-match +show ipv6 bgp community exact-match +show ipv6 bgp community exact-match +show ipv6 bgp community exact-match +show ipv6 bgp community-list WORD +show ipv6 bgp community-list WORD exact-match +show ipv6 bgp filter-list WORD +show ipv6 bgp neighbors advertised-routes [json] +show ipv6 bgp neighbors received-routes [json] +show ipv6 bgp neighbors routes [json] +show ipv6 bgp prefix-list WORD +show ipv6 bgp regexp LINE +show ipv6 bgp summary [json] +show ipv6 bgp [json] +show ipv6 mbgp X:X::X:X [json] +show ipv6 mbgp X:X::X:X/M longer-prefixes +show ipv6 mbgp X:X::X:X/M [json] +show ipv6 mbgp community +show ipv6 mbgp community +show ipv6 mbgp community +show ipv6 mbgp community +show ipv6 mbgp community +show ipv6 mbgp community exact-match +show ipv6 mbgp community exact-match +show ipv6 mbgp community exact-match +show ipv6 mbgp community exact-match +show ipv6 mbgp community-list WORD +show ipv6 mbgp community-list WORD exact-match +show ipv6 mbgp filter-list WORD +show ipv6 mbgp neighbors advertised-routes [json] +show ipv6 mbgp neighbors received-routes [json] +show ipv6 mbgp neighbors routes [json] +show ipv6 mbgp prefix-list WORD +show ipv6 mbgp regexp LINE +show ipv6 mbgp summary [json] +show ipv6 mbgp [json] +table-map WORD +timers bgp (0-65535) (0-65535) +update-delay (0-3600) +update-delay (0-3600) (1-3600) +write-quanta (1-10000) diff --git a/quagga_parser_to_network_docopt.py b/quagga_parser_to_network_docopt.py new file mode 100755 index 0000000000..89a6fd7985 --- /dev/null +++ b/quagga_parser_to_network_docopt.py @@ -0,0 +1,1327 @@ +#!/usr/bin/env python + +""" +The primary use case of this tool is to print a network-docopt compatible +docstring that covers all bgp and ospf commands in quagga. +""" + +import argparse +import logging +import os +import re +import sys +from pprint import pprint, pformat + +# All of the clear commands in bgp_clear_ignore will be covered by these clear commands: +# quagga clear bgp (|||*) +# quagga clear bgp (|||*) soft [in|out] +# quagga clear bgp prefix +bgp_clear_ignore = """ quagga clear bgp (||) + quagga clear bgp (||) in + quagga clear bgp (||) in prefix-filter + quagga clear bgp (||) out + quagga clear bgp (||) soft + quagga clear bgp (||) soft in + quagga clear bgp (||) soft out + quagga clear bgp * + quagga clear bgp * in + quagga clear bgp * in prefix-filter + quagga clear bgp * out + quagga clear bgp * soft + quagga clear bgp * soft in + quagga clear bgp * soft out + quagga clear bgp <1-4294967295> + quagga clear bgp <1-4294967295> in + quagga clear bgp <1-4294967295> in prefix-filter + quagga clear bgp <1-4294967295> out + quagga clear bgp <1-4294967295> soft + quagga clear bgp <1-4294967295> soft in + quagga clear bgp <1-4294967295> soft out + quagga clear bgp BGP_INSTANCE_CMD * + quagga clear bgp BGP_INSTANCE_CMD * soft + quagga clear bgp BGP_INSTANCE_CMD * soft in + quagga clear bgp BGP_INSTANCE_CMD * soft out + quagga clear bgp external + quagga clear bgp external in + quagga clear bgp external in prefix-filter + quagga clear bgp external out + quagga clear bgp external soft + quagga clear bgp external soft in + quagga clear bgp external soft out + quagga clear bgp ipv6 (||) + quagga clear bgp ipv6 (||) in + quagga clear bgp ipv6 (||) in prefix-filter + quagga clear bgp ipv6 (||) out + quagga clear bgp ipv6 (||) soft + quagga clear bgp ipv6 (||) soft in + quagga clear bgp ipv6 (||) soft out + quagga clear bgp ipv6 (unicast|multicast) prefix + quagga clear bgp ipv6 * + quagga clear bgp ipv6 * in + quagga clear bgp ipv6 * in prefix-filter + quagga clear bgp ipv6 * out + quagga clear bgp ipv6 * soft + quagga clear bgp ipv6 * soft in + quagga clear bgp ipv6 * soft out + quagga clear bgp ipv6 <1-4294967295> + quagga clear bgp ipv6 <1-4294967295> in + quagga clear bgp ipv6 <1-4294967295> in prefix-filter + quagga clear bgp ipv6 <1-4294967295> out + quagga clear bgp ipv6 <1-4294967295> soft + quagga clear bgp ipv6 <1-4294967295> soft in + quagga clear bgp ipv6 <1-4294967295> soft out + quagga clear bgp ipv6 external + quagga clear bgp ipv6 external WORD in + quagga clear bgp ipv6 external WORD out + quagga clear bgp ipv6 external in prefix-filter + quagga clear bgp ipv6 external soft + quagga clear bgp ipv6 external soft in + quagga clear bgp ipv6 external soft out + quagga clear bgp ipv6 peer-group WORD + quagga clear bgp ipv6 peer-group WORD in + quagga clear bgp ipv6 peer-group WORD in prefix-filter + quagga clear bgp ipv6 peer-group WORD out + quagga clear bgp ipv6 peer-group WORD soft + quagga clear bgp ipv6 peer-group WORD soft in + quagga clear bgp ipv6 peer-group WORD soft out + quagga clear bgp peer-group WORD + quagga clear bgp peer-group WORD in + quagga clear bgp peer-group WORD in prefix-filter + quagga clear bgp peer-group WORD out + quagga clear bgp peer-group WORD soft + quagga clear bgp peer-group WORD soft in + quagga clear bgp peer-group WORD soft out + quagga clear ip bgp (|) in + quagga clear ip bgp (|) in prefix-filter + quagga clear ip bgp (|) ipv4 (unicast|multicast) in + quagga clear ip bgp (|) ipv4 (unicast|multicast) in prefix-filter + quagga clear ip bgp (|) ipv4 (unicast|multicast) out + quagga clear ip bgp (|) ipv4 (unicast|multicast) soft + quagga clear ip bgp (|) ipv4 (unicast|multicast) soft in + quagga clear ip bgp (|) ipv4 (unicast|multicast) soft out + quagga clear ip bgp (|) out + quagga clear ip bgp (|) soft + quagga clear ip bgp (|) soft in + quagga clear ip bgp (|) soft out + quagga clear ip bgp (|) vpnv4 unicast in + quagga clear ip bgp (|) vpnv4 unicast out + quagga clear ip bgp (|) vpnv4 unicast soft + quagga clear ip bgp (|) vpnv4 unicast soft in + quagga clear ip bgp (|) vpnv4 unicast soft out + quagga clear ip bgp (||) + quagga clear ip bgp * + quagga clear ip bgp * in + quagga clear ip bgp * in prefix-filter + quagga clear ip bgp * ipv4 (unicast|multicast) in + quagga clear ip bgp * ipv4 (unicast|multicast) in prefix-filter + quagga clear ip bgp * ipv4 (unicast|multicast) out + quagga clear ip bgp * ipv4 (unicast|multicast) soft + quagga clear ip bgp * ipv4 (unicast|multicast) soft in + quagga clear ip bgp * ipv4 (unicast|multicast) soft out + quagga clear ip bgp * out + quagga clear ip bgp * soft + quagga clear ip bgp * soft in + quagga clear ip bgp * soft out + quagga clear ip bgp * vpnv4 unicast in + quagga clear ip bgp * vpnv4 unicast out + quagga clear ip bgp * vpnv4 unicast soft + quagga clear ip bgp * vpnv4 unicast soft in + quagga clear ip bgp * vpnv4 unicast soft out + quagga clear ip bgp <1-4294967295> + quagga clear ip bgp <1-4294967295> in + quagga clear ip bgp <1-4294967295> in prefix-filter + quagga clear ip bgp <1-4294967295> ipv4 (unicast|multicast) in + quagga clear ip bgp <1-4294967295> ipv4 (unicast|multicast) in prefix-filter + quagga clear ip bgp <1-4294967295> ipv4 (unicast|multicast) out + quagga clear ip bgp <1-4294967295> ipv4 (unicast|multicast) soft + quagga clear ip bgp <1-4294967295> ipv4 (unicast|multicast) soft in + quagga clear ip bgp <1-4294967295> ipv4 (unicast|multicast) soft out + quagga clear ip bgp <1-4294967295> out + quagga clear ip bgp <1-4294967295> soft + quagga clear ip bgp <1-4294967295> soft in + quagga clear ip bgp <1-4294967295> soft out + quagga clear ip bgp <1-4294967295> vpnv4 unicast in + quagga clear ip bgp <1-4294967295> vpnv4 unicast out + quagga clear ip bgp <1-4294967295> vpnv4 unicast soft + quagga clear ip bgp <1-4294967295> vpnv4 unicast soft in + quagga clear ip bgp <1-4294967295> vpnv4 unicast soft out + quagga clear ip bgp BGP_INSTANCE_CMD * + quagga clear ip bgp BGP_INSTANCE_CMD * in prefix-filter + quagga clear ip bgp BGP_INSTANCE_CMD * ipv4 (unicast|multicast) in prefix-filter + quagga clear ip bgp BGP_INSTANCE_CMD * ipv4 (unicast|multicast) soft + quagga clear ip bgp BGP_INSTANCE_CMD * ipv4 (unicast|multicast) soft in + quagga clear ip bgp BGP_INSTANCE_CMD * ipv4 (unicast|multicast) soft out + quagga clear ip bgp BGP_INSTANCE_CMD * soft + quagga clear ip bgp BGP_INSTANCE_CMD * soft in + quagga clear ip bgp BGP_INSTANCE_CMD * soft out + quagga clear ip bgp dampening + quagga clear ip bgp dampening + quagga clear ip bgp dampening + quagga clear ip bgp dampening + quagga clear ip bgp external + quagga clear ip bgp external in + quagga clear ip bgp external in prefix-filter + quagga clear ip bgp external ipv4 (unicast|multicast) in + quagga clear ip bgp external ipv4 (unicast|multicast) in prefix-filter + quagga clear ip bgp external ipv4 (unicast|multicast) out + quagga clear ip bgp external ipv4 (unicast|multicast) soft + quagga clear ip bgp external ipv4 (unicast|multicast) soft in + quagga clear ip bgp external ipv4 (unicast|multicast) soft out + quagga clear ip bgp external out + quagga clear ip bgp external soft + quagga clear ip bgp external soft in + quagga clear ip bgp external soft out + quagga clear ip bgp peer-group WORD + quagga clear ip bgp peer-group WORD in + quagga clear ip bgp peer-group WORD in prefix-filter + quagga clear ip bgp peer-group WORD ipv4 (unicast|multicast) in + quagga clear ip bgp peer-group WORD ipv4 (unicast|multicast) in prefix-filter + quagga clear ip bgp peer-group WORD ipv4 (unicast|multicast) out + quagga clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft + quagga clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft in + quagga clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft out + quagga clear ip bgp peer-group WORD out + quagga clear ip bgp peer-group WORD soft + quagga clear ip bgp peer-group WORD soft in + quagga clear ip bgp peer-group WORD soft out + quagga clear ip bgp prefix """.splitlines() + +# All of the debug commands in bgp_debug_ignore will be covered by these debug commands: +# quagga (add|del) debug bgp bestpath +# quagga (add|del) debug bgp keepalives (||) +# quagga (add|del) debug bgp neighbor-events (||) +# quagga (add|del) debug bgp nht +# quagga (add|del) debug bgp update-groups +# quagga (add|del) debug bgp updates prefix +# quagga (add|del) debug bgp zebra prefix +bgp_debug_ignore = """ quagga debug bgp as4 + quagga debug bgp as4 segment + quagga debug bgp bestpath (|) + quagga debug bgp keepalives + quagga debug bgp keepalives (||) + quagga debug bgp neighbor-events + quagga debug bgp neighbor-events (||) + quagga debug bgp nht + quagga debug bgp update-groups + quagga debug bgp updates + quagga debug bgp updates (in|out) + quagga debug bgp updates (in|out) (||) + quagga debug bgp updates prefix (|) + quagga debug bgp zebra + quagga debug bgp zebra prefix (|)""".splitlines() + + +bgp_show_ignore = """ quagga show bgp (ipv4) (vpnv4) statistics + quagga show bgp (ipv4|ipv6) (unicast|multicast) statistics + quagga show bgp (ipv4|ipv6) (unicast|multicast) update-groups + quagga show bgp (ipv4|ipv6) (unicast|multicast) update-groups (advertise-queue|advertised-routes|packet-queue) + quagga show bgp (ipv4|ipv6) (unicast|multicast) update-groups SUBGROUP-ID + quagga show bgp (ipv4|ipv6) (unicast|multicast) update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue) + quagga show bgp (bestpath|multipath) [json] + quagga show bgp [json] + quagga show bgp longer-prefixes + quagga show bgp (bestpath|multipath) [json] + quagga show bgp [json] + quagga show bgp BGP_INSTANCE_CMD (ipv4) (vpnv4) statistics + quagga show bgp BGP_INSTANCE_CMD (ipv4|ipv6) (unicast|multicast) community + quagga show bgp BGP_INSTANCE_CMD (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp BGP_INSTANCE_CMD (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp BGP_INSTANCE_CMD (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp BGP_INSTANCE_CMD (ipv4|ipv6) (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp BGP_INSTANCE_CMD (ipv4|ipv6) (unicast|multicast) neighbors (||) (advertised-routes|received-routes) [json] + quagga show bgp BGP_INSTANCE_CMD (ipv4|ipv6) (unicast|multicast) statistics + quagga show bgp BGP_INSTANCE_CMD (bestpath|multipath) [json] + quagga show bgp BGP_INSTANCE_CMD [json] + quagga show bgp BGP_INSTANCE_CMD longer-prefixes + quagga show bgp BGP_INSTANCE_CMD (bestpath|multipath) [json] + quagga show bgp BGP_INSTANCE_CMD [json] + quagga show bgp BGP_INSTANCE_CMD [json] + quagga show bgp BGP_INSTANCE_CMD community-list (<1-500>|WORD) + quagga show bgp BGP_INSTANCE_CMD filter-list WORD + quagga show bgp BGP_INSTANCE_CMD ipv6 (unicast|multicast) summary [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 (bestpath|multipath) [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 longer-prefixes + quagga show bgp BGP_INSTANCE_CMD ipv6 (bestpath|multipath) [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 community-list (<1-500>|WORD) + quagga show bgp BGP_INSTANCE_CMD ipv6 filter-list WORD + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) advertised-routes [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) dampened-routes [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) flap-statistics [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) prefix-counts [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) received prefix-filter [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) received-routes [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors (||) routes [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 neighbors [json] + quagga show bgp BGP_INSTANCE_CMD ipv6 prefix-list WORD + quagga show bgp BGP_INSTANCE_CMD ipv6 route-map WORD + quagga show bgp BGP_INSTANCE_CMD ipv6 summary [json] + quagga show bgp BGP_INSTANCE_CMD neighbors (||) [json] + quagga show bgp BGP_INSTANCE_CMD neighbors (||) advertised-routes [json] + quagga show bgp BGP_INSTANCE_CMD neighbors (||) dampened-routes [json] + quagga show bgp BGP_INSTANCE_CMD neighbors (||) flap-statistics [json] + quagga show bgp BGP_INSTANCE_CMD neighbors (||) received prefix-filter [json] + quagga show bgp BGP_INSTANCE_CMD neighbors (||) received-routes [json] + quagga show bgp BGP_INSTANCE_CMD neighbors (||) routes [json] + quagga show bgp BGP_INSTANCE_CMD neighbors [json] + quagga show bgp BGP_INSTANCE_CMD prefix-list WORD + quagga show bgp BGP_INSTANCE_CMD route-map WORD + quagga show bgp BGP_INSTANCE_CMD summary [json] + quagga show bgp BGP_INSTANCE_CMD update-groups + quagga show bgp BGP_INSTANCE_CMD update-groups (advertise-queue|advertised-routes|packet-queue) + quagga show bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID + quagga show bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue) + quagga show bgp [json] + quagga show bgp community + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp community (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp community-list (<1-500>|WORD) + quagga show bgp community-list (<1-500>|WORD) exact-match + quagga show bgp filter-list WORD + quagga show bgp ipv4 (unicast|multicast) (bestpath|multipath) [json] + quagga show bgp ipv4 (unicast|multicast) [json] + quagga show bgp ipv4 (unicast|multicast) (bestpath|multipath) [json] + quagga show bgp ipv4 (unicast|multicast) [json] + quagga show bgp ipv4 (unicast|multicast) [json] + quagga show bgp ipv4 (unicast|multicast) summary [json] + quagga show bgp ipv6 (unicast|multicast) (bestpath|multipath) [json] + quagga show bgp ipv6 (unicast|multicast) [json] + quagga show bgp ipv6 (unicast|multicast) (bestpath|multipath) [json] + quagga show bgp ipv6 (unicast|multicast) [json] + quagga show bgp ipv6 (unicast|multicast) [json] + quagga show bgp ipv6 (unicast|multicast) summary [json] + quagga show bgp ipv6 (bestpath|multipath) [json] + quagga show bgp ipv6 [json] + quagga show bgp ipv6 longer-prefixes + quagga show bgp ipv6 (bestpath|multipath) [json] + quagga show bgp ipv6 [json] + quagga show bgp ipv6 [json] + quagga show bgp ipv6 community + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show bgp ipv6 community-list (<1-500>|WORD) + quagga show bgp ipv6 community-list (<1-500>|WORD) exact-match + quagga show bgp ipv6 filter-list WORD + quagga show bgp ipv6 neighbors (||) [json] + quagga show bgp ipv6 neighbors (||) advertised-routes [json] + quagga show bgp ipv6 neighbors (||) dampened-routes [json] + quagga show bgp ipv6 neighbors (||) flap-statistics [json] + quagga show bgp ipv6 neighbors (||) prefix-counts [json] + quagga show bgp ipv6 neighbors (||) received prefix-filter [json] + quagga show bgp ipv6 neighbors (||) received-routes [json] + quagga show bgp ipv6 neighbors (||) routes [json] + quagga show bgp ipv6 neighbors [json] + quagga show bgp ipv6 prefix-list WORD + quagga show bgp ipv6 regexp LINE + quagga show bgp ipv6 route-map WORD + quagga show bgp ipv6 summary [json] + quagga show bgp memory + quagga show bgp neighbors (||) [json] + quagga show bgp neighbors (||) advertised-routes [json] + quagga show bgp neighbors (||) dampened-routes [json] + quagga show bgp neighbors (||) flap-statistics [json] + quagga show bgp neighbors (||) received prefix-filter [json] + quagga show bgp neighbors (||) received-routes [json] + quagga show bgp neighbors (||) routes [json] + quagga show bgp neighbors [json] + quagga show bgp prefix-list WORD + quagga show bgp regexp LINE + quagga show bgp route-map WORD + quagga show bgp summary [json] + quagga show bgp update-groups + quagga show bgp update-groups (advertise-queue|advertised-routes|packet-queue) + quagga show bgp update-groups SUBGROUP-ID + quagga show bgp update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue) + quagga show bgp view WORD ipv4 (unicast|multicast) summary [json] + quagga show bgp views + quagga show bgp vrfs [json] + quagga show debugging bgp + quagga show ip as-path-access-list + quagga show ip as-path-access-list WORD + quagga show ip bgp (bestpath|multipath) [json] + quagga show ip bgp [json] + quagga show ip bgp longer-prefixes + quagga show ip bgp (bestpath|multipath) [json] + quagga show ip bgp [json] + quagga show ip bgp BGP_INSTANCE_CMD (bestpath|multipath) [json] + quagga show ip bgp BGP_INSTANCE_CMD [json] + quagga show ip bgp BGP_INSTANCE_CMD longer-prefixes + quagga show ip bgp BGP_INSTANCE_CMD (bestpath|multipath) [json] + quagga show ip bgp BGP_INSTANCE_CMD [json] + quagga show ip bgp BGP_INSTANCE_CMD [json] + quagga show ip bgp BGP_INSTANCE_CMD community-list (<1-500>|WORD) + quagga show ip bgp BGP_INSTANCE_CMD filter-list WORD + quagga show ip bgp BGP_INSTANCE_CMD neighbors (||) [json] + quagga show ip bgp BGP_INSTANCE_CMD neighbors (||) advertised-routes [json] + quagga show ip bgp BGP_INSTANCE_CMD neighbors (||) advertised-routes route-map WORD [json] + quagga show ip bgp BGP_INSTANCE_CMD neighbors (||) prefix-counts [json] + quagga show ip bgp BGP_INSTANCE_CMD neighbors (||) received-routes [json] + quagga show ip bgp BGP_INSTANCE_CMD neighbors (||) received-routes route-map WORD [json] + quagga show ip bgp BGP_INSTANCE_CMD neighbors (||) routes [json] + quagga show ip bgp BGP_INSTANCE_CMD neighbors [json] + quagga show ip bgp BGP_INSTANCE_CMD nexthop + quagga show ip bgp BGP_INSTANCE_CMD nexthop detail + quagga show ip bgp BGP_INSTANCE_CMD peer-group + quagga show ip bgp BGP_INSTANCE_CMD peer-group WORD + quagga show ip bgp BGP_INSTANCE_CMD prefix-list WORD + quagga show ip bgp BGP_INSTANCE_CMD route-map WORD + quagga show ip bgp BGP_INSTANCE_CMD summary [json] + quagga show ip bgp BGP_INSTANCE_CMD update-groups + quagga show ip bgp BGP_INSTANCE_CMD update-groups (advertise-queue|advertised-routes|packet-queue) + quagga show ip bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID + quagga show ip bgp BGP_INSTANCE_CMD update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue) + quagga show ip bgp [json] + quagga show ip bgp attribute-info + quagga show ip bgp cidr-only + quagga show ip bgp community + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp community (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp community-info + quagga show ip bgp community-list (<1-500>|WORD) + quagga show ip bgp community-list (<1-500>|WORD) exact-match + quagga show ip bgp dampened-paths + quagga show ip bgp filter-list WORD + quagga show ip bgp flap-statistics + quagga show ip bgp flap-statistics + quagga show ip bgp flap-statistics longer-prefixes + quagga show ip bgp flap-statistics + quagga show ip bgp flap-statistics cidr-only + quagga show ip bgp flap-statistics filter-list WORD + quagga show ip bgp flap-statistics prefix-list WORD + quagga show ip bgp flap-statistics regexp LINE + quagga show ip bgp flap-statistics route-map WORD + quagga show ip bgp ipv4 (unicast|multicast) (bestpath|multipath) [json] + quagga show ip bgp ipv4 (unicast|multicast) [json] + quagga show ip bgp ipv4 (unicast|multicast) longer-prefixes + quagga show ip bgp ipv4 (unicast|multicast) [json] + quagga show ip bgp ipv4 (unicast|multicast) [json] + quagga show ip bgp ipv4 (unicast|multicast) cidr-only + quagga show ip bgp ipv4 (unicast|multicast) community + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ip bgp ipv4 (unicast|multicast) community-list (<1-500>|WORD) + quagga show ip bgp ipv4 (unicast|multicast) community-list (<1-500>|WORD) exact-match + quagga show ip bgp ipv4 (unicast|multicast) filter-list WORD + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) advertised-routes [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) advertised-routes route-map WORD [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) prefix-counts [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) received prefix-filter [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) received-routes [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) received-routes route-map WORD [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors (||) routes [json] + quagga show ip bgp ipv4 (unicast|multicast) neighbors [json] + quagga show ip bgp ipv4 (unicast|multicast) paths + quagga show ip bgp ipv4 (unicast|multicast) prefix-list WORD + quagga show ip bgp ipv4 (unicast|multicast) regexp LINE + quagga show ip bgp ipv4 (unicast|multicast) route-map WORD + quagga show ip bgp ipv4 (unicast|multicast) summary [json] + quagga show ip bgp neighbors (||) [json] + quagga show ip bgp neighbors (||) advertised-routes [json] + quagga show ip bgp neighbors (||) advertised-routes route-map WORD [json] + quagga show ip bgp neighbors (||) dampened-routes [json] + quagga show ip bgp neighbors (||) flap-statistics [json] + quagga show ip bgp neighbors (||) prefix-counts [json] + quagga show ip bgp neighbors (||) received prefix-filter [json] + quagga show ip bgp neighbors (||) received-routes [json] + quagga show ip bgp neighbors (||) received-routes route-map WORD [json] + quagga show ip bgp neighbors (||) routes [json] + quagga show ip bgp neighbors [json] + quagga show ip bgp nexthop + quagga show ip bgp nexthop detail + quagga show ip bgp paths + quagga show ip bgp peer-group + quagga show ip bgp peer-group WORD + quagga show ip bgp prefix-list WORD + quagga show ip bgp regexp LINE + quagga show ip bgp route-map WORD + quagga show ip bgp summary [json] + quagga show ip bgp update-groups + quagga show ip bgp update-groups (advertise-queue|advertised-routes|packet-queue) + quagga show ip bgp update-groups SUBGROUP-ID + quagga show ip bgp update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue) + quagga show ip bgp view WORD ipv4 (unicast|multicast) summary [json] + quagga show ip bgp vpnv4 all + quagga show ip bgp vpnv4 all [json] + quagga show ip bgp vpnv4 all [json] + quagga show ip bgp vpnv4 all neighbors (||) prefix-counts [json] + quagga show ip bgp vpnv4 all neighbors [json] + quagga show ip bgp vpnv4 all neighbors advertised-routes [json] + quagga show ip bgp vpnv4 all neighbors routes [json] + quagga show ip bgp vpnv4 all neighbors [json] + quagga show ip bgp vpnv4 all summary [json] + quagga show ip bgp vpnv4 all tags + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn [json] + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn [json] + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors [json] + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors advertised-routes [json] + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors routes [json] + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors [json] + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn summary [json] + quagga show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn tags + quagga show ip community-list + quagga show ip community-list (<1-500>|WORD) + quagga show ip extcommunity-list + quagga show ip extcommunity-list (<1-500>|WORD) + quagga show ipv6 bgp [json] + quagga show ipv6 bgp longer-prefixes + quagga show ipv6 bgp [json] + quagga show ipv6 bgp [json] + quagga show ipv6 bgp community + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 bgp community-list WORD + quagga show ipv6 bgp community-list WORD exact-match + quagga show ipv6 bgp filter-list WORD + quagga show ipv6 bgp neighbors (||) advertised-routes [json] + quagga show ipv6 bgp neighbors (||) received-routes [json] + quagga show ipv6 bgp neighbors (||) routes [json] + quagga show ipv6 bgp prefix-list WORD + quagga show ipv6 bgp regexp LINE + quagga show ipv6 bgp summary [json] + quagga show ipv6 mbgp [json] + quagga show ipv6 mbgp longer-prefixes + quagga show ipv6 mbgp [json] + quagga show ipv6 mbgp [json] + quagga show ipv6 mbgp community + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) exact-match + quagga show ipv6 mbgp community-list WORD + quagga show ipv6 mbgp community-list WORD exact-match + quagga show ipv6 mbgp filter-list WORD + quagga show ipv6 mbgp neighbors (||) advertised-routes [json] + quagga show ipv6 mbgp neighbors (||) received-routes [json] + quagga show ipv6 mbgp neighbors (||) routes [json] + quagga show ipv6 mbgp prefix-list WORD + quagga show ipv6 mbgp regexp LINE + quagga show ipv6 mbgp summary [json]""".splitlines() + +bgp_config_ignore = """ quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) activate + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) addpath-tx-all-paths + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) addpath-tx-bestpath-per-AS + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) allowas-in + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) allowas-in <1-10> + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) as-override + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged (as-path|next-hop|med) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged as-path (next-hop|med) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged as-path med next-hop + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged as-path next-hop med + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged med (as-path|next-hop) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged med as-path next-hop + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged med next-hop as-path + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged next-hop (as-path|med) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged next-hop as-path med + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) attribute-unchanged next-hop med as-path + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) capability orf prefix-list (both|send|receive) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) default-originate + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) default-originate route-map WORD + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) distribute-list (<1-199>|<1300-2699>|WORD) (in|out) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) filter-list WORD (in|out) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) maximum-prefix <1-4294967295> + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) maximum-prefix <1-4294967295> <1-100> + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) maximum-prefix <1-4294967295> <1-100> restart <1-65535> + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) maximum-prefix <1-4294967295> <1-100> warning-only + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) maximum-prefix <1-4294967295> restart <1-65535> + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) maximum-prefix <1-4294967295> warning-only + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) next-hop-self + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) next-hop-self force + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) peer-group WORD + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) prefix-list WORD (in|out) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) remove-private-AS + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) remove-private-AS all + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) remove-private-AS all replace-AS + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) remove-private-AS replace-AS + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) route-map WORD (in|out) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) route-reflector-client + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) route-server-client + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) send-community + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) send-community (both|extended|standard) + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) soft-reconfiguration inbound + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (||) unsuppress-map WORD + quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] table-map WORD + quagga (add|del) bgp [ipv4|ipv6] unicast maximum-paths <1-255> + quagga (add|del) bgp [ipv4|ipv6] unicast maximum-paths ibgp <1-255> + quagga (add|del) bgp [ipv4|ipv6] unicast maximum-paths ibgp <1-255> equal-cluster-length + quagga (add|del) bgp always-compare-med + quagga (add|del) bgp bestpath as-path confed + quagga (add|del) bgp bestpath as-path ignore + quagga (add|del) bgp bestpath as-path multipath-relax [as-set|no-as-set] + quagga (add|del) bgp bestpath compare-routerid + quagga (add|del) bgp bestpath med (confed|missing-as-worst) + quagga (add|del) bgp bestpath med confed missing-as-worst + quagga (add|del) bgp bestpath med missing-as-worst confed + quagga (add|del) bgp client-to-client reflection + quagga (add|del) bgp cluster-id <1-4294967295> + quagga (add|del) bgp cluster-id + quagga (add|del) bgp confederation identifier <1-4294967295> + quagga (add|del) bgp confederation peers . <1-4294967295> + quagga (add|del) bgp default ipv4-unicast + quagga (add|del) bgp default local-preference <0-4294967295> + quagga (add|del) bgp default show-hostname + quagga (add|del) bgp default subgroup-pkt-queue-max <20-100> + quagga (add|del) bgp deterministic-med + quagga (add|del) bgp disable-ebgp-connected-route-check + quagga (add|del) bgp enforce-first-as + quagga (add|del) bgp fast-external-failover + quagga (add|del) bgp graceful-restart + quagga (add|del) bgp graceful-restart stalepath-time <1-3600> + quagga (add|del) bgp listen limit <1-5000> + quagga (add|del) bgp listen range (|) peer-group WORD + quagga (add|del) bgp log-neighbor-changes + quagga (add|del) bgp max-med administrative + quagga (add|del) bgp max-med administrative <0-4294967294> + quagga (add|del) bgp max-med on-startup <5-86400> + quagga (add|del) bgp max-med on-startup <5-86400> <0-4294967294> + quagga (add|del) bgp network import-check + quagga (add|del) bgp route-map delay-timer <0-600> + quagga (add|del) bgp route-reflector allow-outbound-policy + quagga (add|del) bgp router-id + quagga (add|del) bgp coalesce-time <0-4294967295> + quagga (add|del) bgp distance <1-255> + quagga (add|del) bgp distance <1-255> WORD + quagga (add|del) bgp distance bgp <1-255> <1-255> <1-255> + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address as-set + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address as-set summary-only + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address summary-only + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address summary-only as-set + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address as-set + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address as-set summary-only + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address summary-only + quagga (add|del) bgp ipv4 [unicast|multicast] aggregate-address summary-only as-set + quagga (add|del) bgp ipv4 [unicast|multicast] network + quagga (add|del) bgp ipv4 [unicast|multicast] network route-map WORD + quagga (add|del) bgp ipv4 [unicast|multicast] network + quagga (add|del) bgp ipv4 [unicast|multicast] network prefixlen + quagga (add|del) bgp ipv4 [unicast|multicast] network prefixlen route-map WORD + quagga (add|del) bgp ipv4 [unicast|multicast] network route-map WORD + quagga (add|del) bgp ipv4 unicast bgp dampening + quagga (add|del) bgp ipv4 unicast bgp dampening <1-45> + quagga (add|del) bgp ipv4 unicast bgp dampening <1-45> <1-20000> <1-20000> <1-255> + quagga (add|del) bgp ipv4 unicast redistribute (kernel|connected|static|rip|ospf|isis) + quagga (add|del) bgp ipv4 unicast redistribute (kernel|connected|static|rip|ospf|isis) metric <0-4294967295> + quagga (add|del) bgp ipv4 unicast redistribute (kernel|connected|static|rip|ospf|isis) metric <0-4294967295> route-map WORD + quagga (add|del) bgp ipv4 unicast redistribute (kernel|connected|static|rip|ospf|isis) route-map WORD + quagga (add|del) bgp ipv4 unicast redistribute (kernel|connected|static|rip|ospf|isis) route-map WORD metric <0-4294967295> + quagga (add|del) bgp ipv4 unicast redistribute (ospf|table) <1-65535> + quagga (add|del) bgp ipv4 unicast redistribute (ospf|table) <1-65535> metric <0-4294967295> + quagga (add|del) bgp ipv4 unicast redistribute (ospf|table) <1-65535> metric <0-4294967295> route-map WORD + quagga (add|del) bgp ipv4 unicast redistribute (ospf|table) <1-65535> route-map WORD + quagga (add|del) bgp ipv4 unicast redistribute (ospf|table) <1-65535> route-map WORD metric <0-4294967295> + quagga (add|del) bgp ipv6 [unicast|multicast] network + quagga (add|del) bgp ipv6 bgp aggregate-address + quagga (add|del) bgp ipv6 bgp aggregate-address summary-only + quagga (add|del) bgp ipv6 bgp network + quagga (add|del) bgp ipv6 unicast aggregate-address + quagga (add|del) bgp ipv6 unicast aggregate-address summary-only + quagga (add|del) bgp ipv6 unicast neighbor (||) nexthop-local unchanged + quagga (add|del) bgp ipv6 unicast network route-map WORD + quagga (add|del) bgp ipv6 unicast redistribute (kernel|connected|static|ripng|ospf6|isis) + quagga (add|del) bgp ipv6 unicast redistribute (kernel|connected|static|ripng|ospf6|isis) metric <0-4294967295> + quagga (add|del) bgp ipv6 unicast redistribute (kernel|connected|static|ripng|ospf6|isis) metric <0-4294967295> route-map WORD + quagga (add|del) bgp ipv6 unicast redistribute (kernel|connected|static|ripng|ospf6|isis) route-map WORD + quagga (add|del) bgp ipv6 unicast redistribute (kernel|connected|static|ripng|ospf6|isis) route-map WORD metric <0-4294967295> + quagga (add|del) bgp neighbor (|) interface WORD + quagga (add|del) bgp neighbor (|) port <0-65535> + quagga (add|del) bgp neighbor (|) strict-capability-match + quagga (add|del) bgp neighbor (||) advertisement-interval <0-600> + quagga (add|del) bgp neighbor (||) bfd + quagga (add|del) bgp neighbor (||) bfd <2-255> BFD_CMD_MIN_RX_RANGE <50-60000> + quagga (add|del) bgp neighbor (||) capability dynamic + quagga (add|del) bgp neighbor (||) capability extended-nexthop + quagga (add|del) bgp neighbor (||) description LINE + quagga (add|del) bgp neighbor (||) disable-connected-check + quagga (add|del) bgp neighbor (||) dont-capability-negotiate + quagga (add|del) bgp neighbor (||) ebgp-multihop + quagga (add|del) bgp neighbor (||) ebgp-multihop <1-255> + quagga (add|del) bgp neighbor (||) enforce-multihop + quagga (add|del) bgp neighbor (||) local-as <1-4294967295> + quagga (add|del) bgp neighbor (||) local-as <1-4294967295> no-prepend + quagga (add|del) bgp neighbor (||) local-as <1-4294967295> no-prepend replace-as + quagga (add|del) bgp neighbor (||) override-capability + quagga (add|del) bgp neighbor (||) passive + quagga (add|del) bgp neighbor (||) password LINE + quagga (add|del) bgp neighbor (||) remote-as (<1-4294967295>|external|internal) + quagga (add|del) bgp neighbor (||) shutdown + quagga (add|del) bgp neighbor (||) solo + quagga (add|del) bgp neighbor (||) timers <0-65535> <0-65535> + quagga (add|del) bgp neighbor (||) timers connect <1-65535> + quagga (add|del) bgp neighbor (||) ttl-security hops <1-254> + quagga (add|del) bgp neighbor (||) update-source (||) + quagga (add|del) bgp neighbor (||) weight <0-65535> + quagga (add|del) bgp neighbor WORD interface + quagga (add|del) bgp neighbor WORD interface peer-group WORD + quagga (add|del) bgp neighbor WORD interface v6only + quagga (add|del) bgp neighbor WORD interface v6only peer-group WORD + quagga (add|del) bgp neighbor WORD peer-group + quagga (add|del) bgp network backdoor + quagga (add|del) bgp network backdoor + quagga (add|del) bgp network prefixlen backdoor + quagga (add|del) bgp timers bgp <0-65535> <0-65535> + quagga (add|del) bgp update-delay <0-3600> + quagga (add|del) bgp update-delay <0-3600> <1-3600> + quagga (add|del) bgp write-quanta <1-10000>""".splitlines() + +ospf_clear_ignore = [" quagga clear ip ospf interface [IFNAME]", ] + +ospf_debug_ignore = """ quagga debug ospf <1-65535> event + quagga debug ospf <1-65535> ism + quagga debug ospf <1-65535> ism (status|events|timers) + quagga debug ospf <1-65535> lsa + quagga debug ospf <1-65535> lsa (generate|flooding|install|refresh) + quagga debug ospf <1-65535> nsm + quagga debug ospf <1-65535> nsm (status|events|timers) + quagga debug ospf <1-65535> nssa + quagga debug ospf <1-65535> packet (hello|dd|ls-request|ls-update|ls-ack|all) + quagga debug ospf <1-65535> packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) (detail|) + quagga debug ospf <1-65535> packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv|detail) + quagga debug ospf <1-65535> zebra + quagga debug ospf <1-65535> zebra (interface|redistribute) + quagga debug ospf event + quagga debug ospf ism + quagga debug ospf ism (status|events|timers) + quagga debug ospf lsa + quagga debug ospf lsa (generate|flooding|install|refresh) + quagga debug ospf nsm + quagga debug ospf nsm (status|events|timers) + quagga debug ospf nssa + quagga debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) + quagga debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) (detail|) + quagga debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv|detail) + quagga debug ospf zebra + quagga debug ospf zebra (interface|redistribute)""".splitlines() + +ospf_show_ignore = """ quagga show debugging ospf + quagga show debugging ospf <1-65535> + quagga show ip ospf <1-65535> [json] + quagga show ip ospf <1-65535> border-routers + quagga show ip ospf <1-65535> database + quagga show ip ospf <1-65535> database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) (self-originate|) + quagga show ip ospf <1-65535> database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) + quagga show ip ospf <1-65535> database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) (self-originate|) + quagga show ip ospf <1-65535> database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) adv-router + quagga show ip ospf <1-65535> database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) adv-router + quagga show ip ospf <1-65535> database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as|max-age|self-originate) + quagga show ip ospf <1-65535> interface [INTERFACE] [json] + quagga show ip ospf <1-65535> neighbor [json] + quagga show ip ospf <1-65535> neighbor IFNAME [json] + quagga show ip ospf <1-65535> neighbor IFNAME detail [json] + quagga show ip ospf <1-65535> neighbor [json] + quagga show ip ospf <1-65535> neighbor all [json] + quagga show ip ospf <1-65535> neighbor detail [json] + quagga show ip ospf <1-65535> neighbor detail all [json] + quagga show ip ospf <1-65535> route + quagga show ip ospf [json] + quagga show ip ospf border-routers + quagga show ip ospf database + quagga show ip ospf database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) (self-originate|) + quagga show ip ospf database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) + quagga show ip ospf database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) (self-originate|) + quagga show ip ospf database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) adv-router + quagga show ip ospf database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as) adv-router + quagga show ip ospf database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as|max-age|self-originate) + quagga show ip ospf interface [INTERFACE] [json] + quagga show ip ospf neighbor [json] + quagga show ip ospf neighbor IFNAME [json] + quagga show ip ospf neighbor IFNAME detail [json] + quagga show ip ospf neighbor [json] + quagga show ip ospf neighbor all [json] + quagga show ip ospf neighbor detail [json] + quagga show ip ospf neighbor detail all [json] + quagga show ip ospf route + quagga show mpls-te interface [INTERFACE] + quagga show mpls-te router""".splitlines() + +ospf_config_ignore = """ quagga (add|del) ip ospf <1-65535> area (|<0-4294967295>) + quagga (add|del) ip ospf area (|<0-4294967295>) + quagga (add|del) ip ospf authentication + quagga (add|del) ip ospf authentication (null|message-digest) + quagga (add|del) ip ospf authentication (null|message-digest) + quagga (add|del) ip ospf authentication + quagga (add|del) ip ospf authentication-key AUTH_KEY + quagga (add|del) ip ospf authentication-key AUTH_KEY + quagga (add|del) ip ospf bfd + quagga (add|del) ip ospf bfd <2-255> BFD_CMD_MIN_RX_RANGE <50-60000> + quagga (add|del) ip ospf cost <1-65535> + quagga (add|del) ip ospf cost <1-65535> + quagga (add|del) ip ospf dead-interval <1-65535> + quagga (add|del) ip ospf dead-interval <1-65535> + quagga (add|del) ip ospf dead-interval minimal hello-multiplier <1-10> + quagga (add|del) ip ospf dead-interval minimal hello-multiplier <1-10> + quagga (add|del) ip ospf hello-interval <1-65535> + quagga (add|del) ip ospf hello-interval <1-65535> + quagga (add|del) ip ospf message-digest-key <1-255> md5 KEY + quagga (add|del) ip ospf message-digest-key <1-255> md5 KEY + quagga (add|del) ip ospf mtu-ignore + quagga (add|del) ip ospf mtu-ignore + quagga (add|del) ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point) + quagga (add|del) ip ospf priority <0-255> + quagga (add|del) ip ospf priority <0-255> + quagga (add|del) ip ospf retransmit-interval <3-65535> + quagga (add|del) ip ospf retransmit-interval <3-65535> + quagga (add|del) ip ospf transmit-delay <1-65535> + quagga (add|del) ip ospf transmit-delay <1-65535> + quagga (add|del) mpls-te link max-bw BANDWIDTH + quagga (add|del) mpls-te link max-rsv-bw BANDWIDTH + quagga (add|del) mpls-te link metric <0-4294967295> + quagga (add|del) mpls-te link rsc-clsclr BITPATTERN + quagga (add|del) mpls-te link unrsv-bw <0-7> BANDWIDTH + quagga (add|del) ospf abr-type (cisco|ibm|shortcut|standard) + quagga (add|del) ospf area (|<0-4294967295>) authentication + quagga (add|del) ospf area (|<0-4294967295>) authentication message-digest + quagga (add|del) ospf area (|<0-4294967295>) default-cost <0-16777215> + quagga (add|del) ospf area (|<0-4294967295>) export-list NAME + quagga (add|del) ospf area (|<0-4294967295>) filter-list prefix WORD (in|out) + quagga (add|del) ospf area (|<0-4294967295>) import-list NAME + quagga (add|del) ospf area (|<0-4294967295>) nssa + quagga (add|del) ospf area (|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always) + quagga (add|del) ospf area (|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always) no-summary + quagga (add|del) ospf area (|<0-4294967295>) nssa no-summary + quagga (add|del) ospf area (|<0-4294967295>) range + quagga (add|del) ospf area (|<0-4294967295>) range advertise + quagga (add|del) ospf area (|<0-4294967295>) range advertise cost <0-16777215> + quagga (add|del) ospf area (|<0-4294967295>) range cost <0-16777215> + quagga (add|del) ospf area (|<0-4294967295>) range not-advertise + quagga (add|del) ospf area (|<0-4294967295>) range substitute + quagga (add|del) ospf area (|<0-4294967295>) shortcut (default|enable|disable) + quagga (add|del) ospf area (|<0-4294967295>) stub + quagga (add|del) ospf area (|<0-4294967295>) stub no-summary + quagga (add|del) ospf area (|<0-4294967295>) virtual-link + quagga (add|del) ospf area (|<0-4294967295>) virtual-link + quagga (add|del) ospf auto-cost reference-bandwidth <1-4294967> + quagga (add|del) ospf capability opaque + quagga (add|del) ospf compatible rfc1583 + quagga (add|del) ospf default-information originate + quagga (add|del) ospf default-metric <0-16777214> + quagga (add|del) ospf distance <1-255> + quagga (add|del) ospf distance <1-255> + quagga (add|del) ospf distance <1-255> WORD + quagga (add|del) ospf distance ospf + quagga (add|del) ospf distribute-list WORD out QUAGGA_REDIST_STR_OSPFD + quagga (add|del) ospf log-adjacency-changes + quagga (add|del) ospf log-adjacency-changes detail + quagga (add|del) ospf max-metric router-lsa administrative + quagga (add|del) ospf max-metric router-lsa on-shutdown <5-100> + quagga (add|del) ospf max-metric router-lsa on-startup <5-86400> + quagga (add|del) ospf mpls-te + quagga (add|del) ospf mpls-te on + quagga (add|del) ospf mpls-te router-address + quagga (add|del) ospf neighbor + quagga (add|del) ospf neighbor poll-interval <1-65535> + quagga (add|del) ospf neighbor poll-interval <1-65535> priority <0-255> + quagga (add|del) ospf neighbor priority <0-255> + quagga (add|del) ospf neighbor priority <0-255> poll-interval <1-65535> + quagga (add|del) ospf network area (|<0-4294967295>) + quagga (add|del) ospf opaque-lsa + quagga (add|del) ospf passive-interface IFNAME + quagga (add|del) ospf passive-interface IFNAME + quagga (add|del) ospf passive-interface default + quagga (add|del) ospf redistribute (ospf|table) <1-65535> + quagga (add|del) ospf redistribute QUAGGA_REDIST_STR_OSPFD + quagga (add|del) ospf rfc1583compatibility + quagga (add|del) ospf router-id + quagga (add|del) ospf timers lsa arrival <0-1000> + quagga (add|del) ospf timers lsa min-arrival <0-600000> + quagga (add|del) ospf timers throttle lsa all <0-5000> + quagga (add|del) ospf timers throttle spf <0-600000> <0-600000> <0-600000> + quagga (add|del) ospf write-multiplier <1-100> + quagga (add|del) ospf write-multiplier <1-100>""".splitlines() + +def replace_constants(line): + line = line.replace('NO_NEIGHBOR_CMD2', 'no neighbor (A.B.C.D|X:X::X:X|WORD) ') + line = line.replace('NEIGHBOR_CMD2', 'neighbor (A.B.C.D|X:X::X:X|WORD) ') + line = line.replace('NO_NEIGHBOR_CMD', 'no neighbor (A.B.C.D|X:X::X:X) ') + line = line.replace('NEIGHBOR_CMD', 'neighbor (A.B.C.D|X:X::X:X) ') + line = line.replace('CMD_AS_RANGE', '<1-4294967295>') + line = line.replace('LISTEN_RANGE_CMD', 'bgp listen range (A.B.C.D/M|X:X::X:X/M) ') + line = line.replace('DYNAMIC_NEIGHBOR_LIMIT_RANGE', '<1-5000>') + line = line.replace('QUAGGA_IP_REDIST_STR_BGPD', '(kernel|connected|static|rip|ospf|isis)') + line = line.replace('QUAGGA_IP6_REDIST_STR_BGPD', '(kernel|connected|static|ripng|ospf6|isis)') + line = line.replace('QUAGGA_IP6_REDIST_STR_ZEBRA', '(kernel|connected|static|ripng|ospf6|isis|bgp)') + line = line.replace('QUAGGA_IP_REDIST_STR_ZEBRA', '(kernel|connected|static|rip|ospf|isis|bgp)') + line = line.replace('OSPF_LSA_TYPES_CMD_STR', 'asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as') + line = line.replace('CMD_RANGE_STR(1, MULTIPATH_NUM)', '<1-255>') + line = line.replace('CMD_RANGE_STR(1, MAXTTL)', '<1-255>') + line = line.replace('BFD_CMD_DETECT_MULT_RANGE', '<2-255>') + line = line.replace('BFD_CMD_MIN_TX_RANGE', '<50-60000>') + line = line.replace('BGP_UPDATE_SOURCE_REQ_STR', '(A.B.C.D|X:X::X:X|WORD)') + line = line.replace('BGP_UPDATE_SOURCE_OPT_STR', '{A.B.C.D|X:X::X:X|WORD}') + line = line.replace('.LINE', 'LINE') + line = line.replace('.AA:NN', 'AA:NN') + # line = line.replace('', '') + return line + + +ignore = {} +ignore['bgpd'] = [] +ignore['bgpd'].append('address-family ipv4') +ignore['bgpd'].append('address-family ipv4 (unicast|multicast)') +ignore['bgpd'].append('address-family ipv6') +ignore['bgpd'].append('address-family ipv6 (unicast|multicast)') +ignore['bgpd'].append('address-family vpnv4') +ignore['bgpd'].append('address-family vpnv4 unicast') +ignore['bgpd'].append('exit-address-family') + +ignore['ospfd'] = [] + + +class Command(object): + + def __init__(self, defun, text, line_number): + self.defun = defun + self.text = text + self.line_number = line_number + self.context = [] + self.docstring = None + + def __str__(self): + return "%s - %s" % (self.context, self.text) + + def set_docstring(self): + ds = self.text + + if self.text in ignore['bgpd']: + return None + + # For these two WORD means an interface name + ds = ds.replace('A.B.C.D|X:X::X:X|WORD', '||') + ds = ds.replace('A.B.C.D|WORD', '|') + + ds = ds.replace('A.B.C.D/M', '') + ds = ds.replace('A.B.C.D', '') + ds = ds.replace('X:X::X:X/M', '') + ds = ds.replace('X:X::X:X', '') + ds = ds.replace('{json}', '[json]') + ds = ds.replace('{', '[') + ds = ds.replace('}', ']') + ds = ds.replace(' PATH ', ' ') + + afis = [] + safis = [] + + if 'BGP_IPV4_NODE' in self.context: + afis.append('ipv4') + safis.append('unicast') + + if 'BGP_IPV4M_NODE' in self.context: + afis.append('ipv4') + safis.append('multicast') + + if 'BGP_IPV6_NODE' in self.context: + afis.append('ipv6') + safis.append('unicast') + + if 'BGP_IPV6M_NODE' in self.context: + afis.append('ipv6') + safis.append('multicast') + + afis = list(set(afis)) + safis = list(set(safis)) + + # clear, debug, show, etc + if 'ENABLE_NODE' in self.context: + pass + + # config command so need to add (add|del) and maybe afi/safi + else: + if afis: + if len(afis) > 1: + afi_string = "[%s]" % '|'.join(afis) + else: + afi_string = afis[0] + + if len(safis) > 1: + safi_string = "[%s]" % '|'.join(safis) + else: + safi_string = safis[0] + + ds = "(add|del) bgp %s %s " % (afi_string, safi_string) + ds + + elif 'BGP_NODE' in self.context: + if ds.startswith('bgp'): + ds = "(add|del) " + ds + else: + ds = "(add|del) bgp " + ds + + elif 'INTERFACE_NODE' in self.context: + ds = "(add|del) " + ds + + elif 'OSPF_NODE' in self.context: + if ds.startswith('ospf'): + ds = "(add|del) " + ds + else: + ds = "(add|del) ospf " + ds + + # Ignore the route-map commands, ip community-list, etc for now + else: + ds = None + + if ds: + ds = ds.rstrip() + self.docstring = ' quagga ' + ds + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='Parse the quagga parser') + parser.add_argument('directory', help='quagga directory') + parser.add_argument('daemon', help='bgpd, ospfd, etc') + parser.add_argument('--print-quagga', action='store_true', help='print the raw quagga commands') + parser.add_argument('--print-docstring', action='store_true', help='print a docstring for network-docopt') + parser.add_argument('--print-context', action='store_true', help='print quagga commands with their context') + args = parser.parse_args() + + logging.basicConfig(level=logging.INFO, + format='%(asctime)s %(levelname)7s: %(message)s') + log = logging.getLogger(__name__) + + # Color the errors and warnings in red + logging.addLevelName(logging.ERROR, "\033[91m %s\033[0m" % logging.getLevelName(logging.ERROR)) + logging.addLevelName(logging.WARNING, "\033[91m%s\033[0m" % logging.getLevelName(logging.WARNING)) + + bgpd = os.path.join(args.directory, 'bgpd') + isisd = os.path.join(args.directory, 'isisd') + ospfd = os.path.join(args.directory, 'ospfd') + ospf6d = os.path.join(args.directory, 'ospf6d') + ripd = os.path.join(args.directory, 'ripd') + ripngd = os.path.join(args.directory, 'ripngd') + zebra = os.path.join(args.directory, 'zebra') + parser_files = [] + + for (directory, foo, files) in sorted(os.walk(args.directory)): + + # We do not care about crunching files in these directories + if (directory.endswith('vtysh') or + directory.endswith('quagga-0.99.23.1/') or + directory.endswith('lib') or + directory.endswith('isisd') or + directory.endswith('ripd') or + directory.endswith('ripngd') or + directory.endswith('m4') or + directory.endswith('tests')): + continue + + if args.daemon not in directory: + continue + + for x in sorted(files): + if x.endswith('.c'): + filename = os.path.join(directory, x) + parser_files.append(filename) + + commands = {} + defun_to_context = {} + + for filename in parser_files: + + with open(filename, 'r') as fh: + state = 'LIMBO' + line_number = 1 + + for line in fh.readlines(): + + if state == 'LIMBO': + if (line.startswith('DEFUN ') or line.startswith('ALIAS ')): + state = 'DEFUN_LINE_1' + + elif 'install_element' in line: + # install_element (BGP_NODE, &neighbor_bfd_cmd); + re_line = re.search('install_element\s*\(\s*(\S+)\s*, \&(\S+)\)', line) + + if re_line: + context = re_line.group(1) + defun = re_line.group(2) + + if defun not in defun_to_context: + defun_to_context[defun] = [] + defun_to_context[defun].append(context) + else: + log.warning("regex failed on '%s'" % line.strip()) + + elif state == 'DEFUN_LINE_1': + state = 'DEFUN_LINE_2' + # remove spaces and trailing comma + defun = line.strip()[0:-1] + + elif state == 'DEFUN_LINE_2': + if 'ifdef HAVE_IPV6' in line: + pass + else: + state = 'LIMBO' + + # remove the leading and trailing spaces + # remove the leading and trailing " + # remove the trailing , + line = line.strip() + line = replace_constants(line) + + if line.endswith(','): + line = line.rstrip().lstrip()[:-1] + + if line.startswith('"'): + line = line.rstrip().lstrip()[1:] + + if line.endswith('"'): + line = line.rstrip().lstrip()[:-1] + + line = line.replace(' " ', ' ') + line = line.replace(' "', ' ') + line = line.replace('" ', ' ') + line = line.replace('( ', '(') + line = line.replace(' )', ')') + + line = line.replace('| ', '|') + line = line.replace(' |', '|') + + # compress multiple whitespaces + while ' ' in line: + line = line.replace(' ', ' ') + + commands[line] = Command(defun, line, line_number) + defun = None + line_number += 1 + + # Fill in the context for each Command based on its defun + for cmd in commands.itervalues(): + cmd.context = defun_to_context.get(cmd.defun) + if cmd.context is None: + log.error("%s: could not find defun for %s" % (cmd, cmd.defun)) + continue + cmd.set_docstring() + + normal = [] + expert = [] + + if args.print_docstring: + if args.daemon == 'bgpd': + normal.append(' quagga show bgp [ipv4|ipv6] [unicast|multicast] summary [json]') + normal.append(' quagga show bgp [ipv4|ipv6] [unicast|multicast] [|] [bestpath|multipath] [json]') + normal.append(' quagga show bgp neighbor [|]') + normal.append(' quagga clear bgp (||*)') + normal.append(' quagga clear bgp (||*) soft [in|out]') + normal.append(' quagga clear bgp prefix ') + normal.append(' quagga (add|del) debug bgp bestpath ') + normal.append(' quagga (add|del) debug bgp keepalives ()') + normal.append(' quagga (add|del) debug bgp neighbor-events (|)') + expert.append(' quagga (add|del) debug bgp nht') + expert.append(' quagga (add|del) debug bgp update-groups') + normal.append(' quagga (add|del) debug bgp updates prefix ') + normal.append(' quagga (add|del) debug bgp zebra prefix ') + + bgp_bgp = ['always-compare-med', + 'bestpath', + 'client-to-client reflection', + 'cluster-id', + 'confederation peers', + 'default ipv4-unicast', + 'default local-preference', + 'default show-hostname', + 'default subgroup-pkt-queue-max', + 'deterministic-med', + 'disable-ebgp-connected-route-check', + 'enforce-first-as', + 'fast-external-failover', + 'graceful-restart', + 'listen', + 'log-neighbor-changes', + 'max-med', + 'network import-check', + 'route-map delay-timer', + 'route-reflector allow-outbound-policy', + 'router-id'] + + # ====== + # global + # ====== + normal.append(' quagga (add|del) bgp always-compare-med') + expert.append(' quagga (add|del) bgp bestpath as-path (confed|ignore)') + normal.append(' quagga (add|del) bgp bestpath as-path multipath-relax [as-set|no-as-set]') + expert.append(' quagga (add|del) bgp bestpath med (confed|missing-as-worst)') + expert.append(' quagga (add|del) bgp client-to-client reflection') + expert.append(' quagga (add|del) bgp cluster-id (|<1-4294967295>)') + expert.append(' quagga (add|del) bgp confederation peers <1-4294967295>') + expert.append(' quagga (add|del) bgp default ipv4-unicast') + expert.append(' quagga (add|del) bgp default local-preference <0-4294967295>') + expert.append(' quagga (add|del) bgp default show-hostname') + expert.append(' quagga (add|del) bgp default subgroup-pkt-queue-max <20-100>') + expert.append(' quagga (add|del) bgp deterministic-med') + expert.append(' quagga (add|del) bgp disable-ebgp-connected-route-check') + expert.append(' quagga (add|del) bgp enforce-first-as') + expert.append(' quagga (add|del) bgp fast-external-failover') + expert.append(' quagga (add|del) bgp graceful-restart') + expert.append(' quagga (add|del) bgp listen limit <1-5000>') + expert.append(' quagga (add|del) bgp listen range (|) peer-group ') + expert.append(' quagga (add|del) bgp log-neighbor-changes') + expert.append(' quagga (add|del) bgp max-med administrative <0-4294967294>') + expert.append(' quagga (add|del) bgp max-med on-startup <5-86400> [<0-4294967294>]') + expert.append(' quagga (add|del) bgp network import-check') + expert.append(' quagga (add|del) bgp route-map delay-timer <0-600>') + expert.append(' quagga (add|del) bgp route-reflector allow-outbound-policy') + normal.append(' quagga (add|del) bgp router-id ') + expert.append(' quagga (add|del) bgp coalesce-time <0-4294967295>') + expert.append(' quagga (add|del) bgp distance <1-255> ') + expert.append(' quagga (add|del) bgp distance bgp <1-255> <1-255> <1-255>') + expert.append(' quagga (add|del) bgp timers bgp <0-65535> <0-65535>') + expert.append(' quagga (add|del) bgp update-delay <0-3600> [<1-3600>]') + expert.append(' quagga (add|del) bgp write-quanta <1-10000>') + + # ==================== + # peer global afi/safi + # ==================== + normal.append(' quagga (add|del) bgp neighbor interface') + normal.append(' quagga (add|del) bgp neighbor interface peer-group ') + expert.append(' quagga (add|del) bgp neighbor interface v6only') + expert.append(' quagga (add|del) bgp neighbor interface v6only peer-group ') + normal.append(' quagga (add|del) bgp neighbor peer-group') + expert.append(' quagga (add|del) bgp neighbor (|) advertisement-interval <0-600>') + expert.append(' quagga (add|del) bgp neighbor (|) bfd') + expert.append(' quagga (add|del) bgp neighbor (|) capability dynamic') + normal.append(' quagga (add|del) bgp neighbor (|) capability extended-nexthop') + normal.append(' quagga (add|del) bgp neighbor (|) description ') + expert.append(' quagga (add|del) bgp neighbor (|) disable-connected-check') + expert.append(' quagga (add|del) bgp neighbor (|) dont-capability-negotiate') + normal.append(' quagga (add|del) bgp neighbor (|) ebgp-multihop [<1-255>]') + expert.append(' quagga (add|del) bgp neighbor (|) enforce-multihop') + expert.append(' quagga (add|del) bgp neighbor (|) local-as <1-4294967295> [no-prepend] [replace-as]') + expert.append(' quagga (add|del) bgp neighbor (|) override-capability') + expert.append(' quagga (add|del) bgp neighbor (|) passive') + normal.append(' quagga (add|del) bgp neighbor (|) password ') + expert.append(' quagga (add|del) bgp neighbor (|) port <0-65535>') + normal.append(' quagga (add|del) bgp neighbor (|) remote-as (<1-4294967295>|external|internal)') + normal.append(' quagga (add|del) bgp neighbor (|) shutdown') + expert.append(' quagga (add|del) bgp neighbor (|) solo') + expert.append(' quagga (add|del) bgp neighbor (|) strict-capability-match') + normal.append(' quagga (add|del) bgp neighbor (|) timers <0-65535> <0-65535>') + normal.append(' quagga (add|del) bgp neighbor (|) timers connect <1-65535>') + expert.append(' quagga (add|del) bgp neighbor (|) ttl-security hops <1-254>') + normal.append(' quagga (add|del) bgp neighbor (|) update-source (||)') + expert.append(' quagga (add|del) bgp neighbor (|) weight <0-65535>') + + # ================= + # peer per afi/safi + # ================= + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) addpath-tx-all-paths') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) addpath-tx-bestpath-per-AS') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) allowas-in [<1-10>]') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) as-override') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) attribute-unchanged [as-path] [next-hop] [med]') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) capability orf prefix-list (both|send|receive)') + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) default-originate [route-map ]') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) distribute-list (<1-199>|<1300-2699>|) (in|out)') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) filter-list (in|out)') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) maximum-prefix <1-4294967295>') + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) next-hop-self [force]') + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) peer-group ') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) prefix-list (in|out)') + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) remove-private-AS [all] [replace-AS]') + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) route-map (in|out)') + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) route-reflector-client') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) route-server-client') + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) send-community [both|extended|standard]') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) soft-reconfiguration inbound') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] neighbor (|) unsuppress-map ') + expert.append(' quagga (add|del) bgp ipv6 unicast neighbor (|) nexthop-local unchanged') + + # ============ + # per afi/safi + # ============ + normal.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] maximum-paths [ibgp] <1-255> [equal-cluster-length]') + normal.append(' quagga (add|del) bgp (ipv4|ipv6) [unicast|multicast] aggregate-address [as-set] [summary-only]') + normal.append(' quagga (add|del) bgp (ipv4|ipv6) [unicast|multicast] network (|)') + expert.append(' quagga (add|del) bgp (ipv4|ipv6) [unicast|multicast] network (|) route-map ') + expert.append(' quagga (add|del) bgp (ipv4|ipv6) [unicast|multicast] bgp dampening <1-45> <1-20000> <1-20000> <1-255>') + normal.append(' quagga (add|del) bgp (ipv4|ipv6) [unicast|multicast] redistribute (kernel|connected|static|rip|ospf|isis) [metric <0-4294967295>] [route-map ]') + expert.append(' quagga (add|del) bgp [ipv4|ipv6] [unicast|multicast] table-map ') + + if args.daemon == 'ospfd': + normal.append(' quagga clear ip ospf interface []') + normal.append(' quagga (add|del) debug ospf [<1-65535>] ism [status|events|timers]') + normal.append(' quagga (add|del) debug ospf [<1-65535>] lsa [generate|flooding|install|refresh]') + normal.append(' quagga (add|del) debug ospf [<1-65535>] nsm [status|events|timers]') + expert.append(' quagga (add|del) debug ospf [<1-65535>] nssa') + normal.append(' quagga (add|del) debug ospf [<1-65535>] packet [hello|dd|ls-request|ls-update|ls-ack|all] [send|recv|detail]') + normal.append(' quagga (add|del) debug ospf [<1-65535>] zebra [interface|redistribute]') + normal.append(' quagga show ip ospf [<1-65535>]') + expert.append(' quagga show ip ospf [<1-65535>] border-routers') + expert.append(' quagga show ip ospf [<1-65535>] database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as|max-age|self-originate) [self-originate]') + expert.append(' quagga show ip ospf [<1-65535>] database (asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as|max-age|self-originate) adv-router ') + normal.append(' quagga show ip ospf [<1-65535>] interface [] [json]') + normal.append(' quagga show ip ospf [<1-65535>] neighbor (all||) [detail] [json]') + normal.append(' quagga show ip ospf [<1-65535>] route') + + normal.append(' quagga (add|del) ip ospf [<1-65535>] area (|<0-4294967295>)') + normal.append(' quagga (add|del) ip ospf dead-interval <1-65535>') + normal.append(' quagga (add|del) ip ospf hello-interval <1-65535>') + normal.append(' quagga (add|del) ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)') + normal.append(' quagga (add|del) ospf network area (|<0-4294967295>)') + normal.append(' quagga (add|del) ospf passive-interface IFNAME') + normal.append(' quagga (add|del) ospf router-id ') + normal.append(' quagga (add|del) ospf timers throttle spf <0-600000> <0-600000> <0-600000>') + + + + ignore_list = bgp_clear_ignore + bgp_debug_ignore + bgp_show_ignore + bgp_config_ignore + ignore_list += ospf_clear_ignore + ospf_debug_ignore + ospf_show_ignore + ospf_config_ignore + + for cmd in commands.itervalues(): + if not cmd.text.startswith('no ') and cmd.context: + if cmd.docstring: + if cmd.docstring not in ignore_list: + normal.append(cmd.docstring) + + elif args.print_quagga: + for cmd in commands.itervalues(): + if not cmd.text.startswith('no ') and cmd.context: + normal.append(cmd.text) + + elif args.print_context: + for cmd in commands.itervalues(): + if not cmd.text.startswith('no ') and cmd.context: + normal.append("%s - %s" % (cmd.context, cmd.text)) + else: + raise Exception("No print option specified") + + normal = sorted(normal) + print '\n'.join(map(str, normal))