diff options
| -rw-r--r-- | babeld/babeld.c | 9 | ||||
| -rw-r--r-- | babeld/babeld.h | 2 | ||||
| -rw-r--r-- | babeld/message.c | 14 | ||||
| -rw-r--r-- | babeld/route.c | 27 | ||||
| -rw-r--r-- | bgpd/bgpd.c | 15 | ||||
| -rw-r--r-- | doc/developer/mgmtd-dev.rst | 5 | ||||
| -rw-r--r-- | doc/figures/datastores.drawio | 291 | ||||
| -rw-r--r-- | doc/figures/datastores.svg | 3 | ||||
| -rw-r--r-- | nhrpd/nhrp_peer.c | 5 | ||||
| -rw-r--r-- | pimd/pim_iface.c | 15 |
10 files changed, 362 insertions, 24 deletions
diff --git a/babeld/babeld.c b/babeld/babeld.c index 4dff01ba3a..a9ad97509a 100644 --- a/babeld/babeld.c +++ b/babeld/babeld.c @@ -183,6 +183,10 @@ static void babel_read_protocol(struct event *thread) flog_err_sys(EC_LIB_SOCKET, "recv: %s", safe_strerror(errno)); } } else { + if(ntohs(sin6.sin6_port) != BABEL_PORT) { + return; + } + FOR_ALL_INTERFACES(vrf, ifp) { if(!if_up(ifp)) continue; @@ -212,7 +216,8 @@ static void babel_init_routing_process(struct event *thread) babel_main_loop(thread);/* this function self-add to the t_update thread */ } -/* fill "myid" with an unique id (only if myid != {0}). */ +/* fill "myid" with an unique id (only if myid != {0} and myid != {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}). */ static void babel_get_myid(void) { @@ -222,7 +227,7 @@ babel_get_myid(void) int i; /* if we already have an id (from state file), we return. */ - if (memcmp(myid, zeroes, 8) != 0) { + if (memcmp(myid, zeroes, 8) != 0 && memcmp(myid, ones, 8) != 0) { return; } diff --git a/babeld/babeld.h b/babeld/babeld.h index 17a0381d2c..f4ee09a761 100644 --- a/babeld/babeld.h +++ b/babeld/babeld.h @@ -21,6 +21,8 @@ Copyright 2011 by Matthieu Boutier and Juliusz Chroboczek #undef MAX #undef MIN +#define BABEL_PORT 6696 + #define MAX(x,y) ((x)<=(y)?(y):(x)) #define MIN(x,y) ((x)<=(y)?(x):(y)) diff --git a/babeld/message.c b/babeld/message.c index 9a199acb66..e4d3bf7d49 100644 --- a/babeld/message.c +++ b/babeld/message.c @@ -52,7 +52,7 @@ static const unsigned char tlv_min_length[MESSAGE_MAX + 1] = static bool known_ae(int ae) { - return ae <= 4; + return ae <= 3; } /* Parse a network prefix, encoded in the somewhat baroque compressed @@ -758,6 +758,10 @@ parse_packet(const unsigned char *from, struct interface *ifp, format_prefix(prefix, plen), format_address(from), ifp->name, format_eui64(message + 8), seqno); + if(message[6] == 0) { + debugf(BABEL_DEBUG_COMMON, "Received request with invalid hop count 0"); + goto done; + } handle_request(neigh, prefix, plen, message[6], seqno, message + 8); } else { debugf(BABEL_DEBUG_COMMON,"Received unknown packet type %d from %s on %s.", @@ -1929,8 +1933,14 @@ handle_request(struct neighbour *neigh, const unsigned char *prefix, /* We were about to forward a request to its requestor. Try to find a different neighbour to forward the request to. */ struct babel_route *other_route; + /* First try feasible routes as required by RFC */ + other_route = find_best_route(prefix, plen, 1, neigh); - other_route = find_best_route(prefix, plen, 0, neigh); + if(!other_route || route_metric(other_route) >= INFINITY) { + /* If no feasible route found, try non-feasible routes */ + other_route = find_best_route(prefix, plen, 0, neigh); + } + if(other_route && route_metric(other_route) < INFINITY) successor = other_route->neigh; } diff --git a/babeld/route.c b/babeld/route.c index 466f41383c..eefc5c94df 100644 --- a/babeld/route.c +++ b/babeld/route.c @@ -1078,17 +1078,26 @@ route_lost(struct source *src, unsigned oldmetric) new_route = find_best_route(src->prefix, src->plen, 1, NULL); if(new_route) { consider_route(new_route); - } else if(oldmetric < INFINITY) { - /* Avoid creating a blackhole. */ - send_update_resend(NULL, src->prefix, src->plen); - /* If the route was usable enough, try to get an alternate one. - If it was not, we could be dealing with oscillations around - the value of INFINITY. */ - if(oldmetric <= INFINITY / 2) + } else { + struct babel_route *unfeasible = find_best_route(src->prefix, src->plen, 0, NULL); + + if(unfeasible && !route_expired(unfeasible)) { + /* MUST send seqno request when we have unexpired unfeasible routes */ send_request_resend(NULL, src->prefix, src->plen, - src->metric >= INFINITY ? - src->seqno : seqno_plus(src->seqno, 1), + seqno_plus(src->seqno, 1), src->id); + } else if(oldmetric < INFINITY) { + /* Avoid creating a blackhole. */ + send_update_resend(NULL, src->prefix, src->plen); + /* If the route was usable enough, try to get an alternate one. + If it was not, we could be dealing with oscillations around + the value of INFINITY. */ + if(oldmetric <= INFINITY / 2) + send_request_resend(NULL, src->prefix, src->plen, + src->metric >= INFINITY ? + src->seqno : seqno_plus(src->seqno, 1), + src->id); + } } } diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 0d9cceb014..31cd573aee 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -3589,7 +3589,8 @@ peer_init: bgp->vpn_policy[afi].tovpn_zebra_vrf_label_last_sent = MPLS_LABEL_NONE; - bgp->vpn_policy[afi].import_vrf = list_new(); + if (!bgp->vpn_policy[afi].import_vrf) + bgp->vpn_policy[afi].import_vrf = list_new(); bgp->vpn_policy[afi].import_vrf->del = bgp_vrf_string_name_delete; if (!hidden) { @@ -3607,7 +3608,7 @@ peer_init: bgp_mplsvpn_nh_label_bind_cache_init(&bgp->mplsvpn_nh_label_bind); - if (name) + if (name && !bgp->name) bgp->name = XSTRDUP(MTYPE_BGP_NAME, name); event_add_timer(bm->master, bgp_startup_timer_expire, bgp, @@ -4264,7 +4265,7 @@ int bgp_delete(struct bgp *bgp) } } - if (bgp->peer_self && !IS_BGP_INSTANCE_HIDDEN(bgp)) { + if (bgp->peer_self && (!IS_BGP_INSTANCE_HIDDEN(bgp) || bm->terminating)) { peer_delete(bgp->peer_self); bgp->peer_self = NULL; } @@ -4281,7 +4282,7 @@ int bgp_delete(struct bgp *bgp) /* TODO - Other memory may need to be freed - e.g., NHT */ #ifdef ENABLE_BGP_VNC - if (!IS_BGP_INSTANCE_HIDDEN(bgp)) + if (!IS_BGP_INSTANCE_HIDDEN(bgp) || bm->terminating) rfapi_delete(bgp); #endif @@ -4331,7 +4332,7 @@ int bgp_delete(struct bgp *bgp) bgp_zebra_instance_deregister(bgp); } - if (!IS_BGP_INSTANCE_HIDDEN(bgp)) { + if (!IS_BGP_INSTANCE_HIDDEN(bgp) || bm->terminating) { /* Remove visibility via the master list - * there may however still be routes to be processed * still referencing the struct bgp. @@ -4343,7 +4344,7 @@ int bgp_delete(struct bgp *bgp) vrf = bgp_vrf_lookup_by_instance_type(bgp); bgp_handle_socket(bgp, vrf, VRF_UNKNOWN, false); - if (vrf && !IS_BGP_INSTANCE_HIDDEN(bgp)) + if (vrf && (!IS_BGP_INSTANCE_HIDDEN(bgp) || bm->terminating)) bgp_vrf_unlink(bgp, vrf); /* Update EVPN VRF pointer */ @@ -4354,7 +4355,7 @@ int bgp_delete(struct bgp *bgp) bgp_set_evpn(bgp_get_default()); } - if (!IS_BGP_INSTANCE_HIDDEN(bgp)) { + if (!IS_BGP_INSTANCE_HIDDEN(bgp) || bm->terminating) { if (bgp->process_queue) work_queue_free_and_null(&bgp->process_queue); bgp_unlock(bgp); /* initial reference */ diff --git a/doc/developer/mgmtd-dev.rst b/doc/developer/mgmtd-dev.rst index f113d1b521..554f767c39 100644 --- a/doc/developer/mgmtd-dev.rst +++ b/doc/developer/mgmtd-dev.rst @@ -429,3 +429,8 @@ The client and server sides of oper-state query .. figure:: ../figures/cli-oper-state.svg :align: center + +Config datastore cleanup for non-implict commits (i.e., file reads currently) + +.. figure:: ../figures/datastores.svg + :align: center diff --git a/doc/figures/datastores.drawio b/doc/figures/datastores.drawio new file mode 100644 index 0000000000..5e17087196 --- /dev/null +++ b/doc/figures/datastores.drawio @@ -0,0 +1,291 @@ +<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.2.2 Chrome/134.0.6998.178 Electron/35.1.2 Safari/537.36" version="26.2.2"> + <diagram name="Page-1" id="i24xzCYeKZV1rkTH0XTW"> + <mxGraphModel dx="1667" dy="1191" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="U9ftda_CDvz5WDsUi4ve-36" value="nb_candidate_commit_apply()" style="whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fillStyle=auto;strokeWidth=1;verticalAlign=top;" vertex="1" parent="1"> + <mxGeometry x="890" y="670" width="180" height="136.87" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-29" value="<i><font style="font-size: 16px;">Daemon CLI Parsing (lib/vty.c)</font></i>" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;fillColor=#dae8fc;strokeColor=default;fillStyle=solid;strokeWidth=1;perimeterSpacing=0;dashPattern=1 2;gradientColor=none;gradientDirection=radial;glass=0;shadow=0;opacity=50;verticalAlign=bottom;spacingBottom=30;" parent="1" vertex="1"> + <mxGeometry x="50" y="220" width="660" height="170" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-7" value="<div style="font-size: 12px;">mgmtd</div><div style="font-size: 12px;">(new config path)</div>" style="rounded=1;whiteSpace=wrap;html=1;arcSize=24;fillColor=#dae8fc;strokeColor=#6c8ebf;shadow=1;comic=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;align=center;verticalAlign=top;fontStyle=1" parent="1" vertex="1"> + <mxGeometry x="230" y="40" width="490" height="270" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-13" value="<div><font>vty_shared_</font></div><div><font>candidate_config</font></div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="136.25" y="70" width="97.5" height="130" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-14" value="<div>running_config</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="260" y="70" width="97.5" height="130" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-18" value="" style="group;shadow=0;" parent="1" vertex="1" connectable="0"> + <mxGeometry x="80" y="60" width="270" height="210" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-19" value="<div style="font-size: 12px;">B daemon&nbsp;<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">(old direct vty)</span></div>" style="rounded=1;whiteSpace=wrap;html=1;arcSize=24;fillColor=#fad9d5;strokeColor=#ae4132;shadow=1;comic=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;align=center;verticalAlign=top;fontStyle=1" parent="QL32OzfzetEIIOdSfswY-18" vertex="1"> + <mxGeometry x="-10" width="270" height="190" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-20" value="<div><font>vty_shared_</font></div><div><font>candidate_config</font></div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="QL32OzfzetEIIOdSfswY-18" vertex="1"> + <mxGeometry x="20" y="30" width="97.5" height="130" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-21" value="<div>running_config</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#d5e8d4;strokeColor=#82b366;" parent="QL32OzfzetEIIOdSfswY-18" vertex="1"> + <mxGeometry x="150" y="30" width="97.5" height="130" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-23" value="<div style="font-size: 12px;">A daemon (old direct vty)</div>" style="rounded=1;whiteSpace=wrap;html=1;arcSize=24;fillColor=#fad9d5;strokeColor=#ae4132;shadow=1;comic=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;align=center;verticalAlign=top;fontStyle=1" parent="QL32OzfzetEIIOdSfswY-18" vertex="1"> + <mxGeometry x="-40" y="20" width="270" height="190" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-25" value="<div>running_config</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="200" y="110" width="97.5" height="130" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="4hLhriEXD62TuEoW85Ij-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="648.75" y="160" as="sourcePoint" /> + <mxPoint x="487.5" y="585" as="targetPoint" /> + <Array as="points"> + <mxPoint x="790" y="160" /> + <mxPoint x="790" y="530" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-8" value="<div><font>vty_mgmt_</font></div><div><font>candidate_config</font></div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="551.25" y="70" width="97.5" height="130" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-26" value="mm-&gt;running" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="370" y="230" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="QL32OzfzetEIIOdSfswY-27" target="QL32OzfzetEIIOdSfswY-26"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-27" value="mm-&gt;candidate" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="540" y="230" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-1" value="vty_config_entry()" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fillStyle=auto;strokeWidth=3;" parent="1" vertex="1"> + <mxGeometry x="315" y="500" width="130" height="60" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="QL32OzfzetEIIOdSfswY-24" target="4hLhriEXD62TuEoW85Ij-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="120" y="260" as="sourcePoint" /> + <mxPoint x="320" y="600" as="targetPoint" /> + <Array as="points"> + <mxPoint x="120" y="530" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-24" value="<div><font>vty_shared_</font></div><div><font>candidate_config</font></div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="70" y="110" width="97.5" height="130" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-4" target="4hLhriEXD62TuEoW85Ij-7" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-4" value="CLI: config_exclusive()<div>(northbound_cli.c)</div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d0cee2;strokeColor=#56517e;" parent="1" vertex="1"> + <mxGeometry x="910" y="40" width="140" height="50" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-5" value="CLI: config_private()<div>(northbound_cli.c)</div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d0cee2;strokeColor=#56517e;" parent="1" vertex="1"> + <mxGeometry x="760" y="45" width="140" height="40" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-6" value="vty_config_entry()" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fillStyle=auto;strokeWidth=3;" parent="1" vertex="1"> + <mxGeometry x="860" y="230" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-7" target="4hLhriEXD62TuEoW85Ij-6" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-7" value="<div>private_config</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="871.25" y="130" width="97.5" height="70" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-5" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="910" y="130" as="targetPoint" /> + <Array as="points"> + <mxPoint x="850" y="110" /> + <mxPoint x="911" y="110" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="4hLhriEXD62TuEoW85Ij-11" target="4hLhriEXD62TuEoW85Ij-1" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-20" value="2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-11" target="4hLhriEXD62TuEoW85Ij-1" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;strokeWidth=2;" edge="1" parent="1" source="4hLhriEXD62TuEoW85Ij-11" target="U9ftda_CDvz5WDsUi4ve-15"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-17" value="1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="U9ftda_CDvz5WDsUi4ve-16"> + <mxGeometry x="0.0305" y="2" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-19" value="1: (mgmtd only)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="U9ftda_CDvz5WDsUi4ve-16"> + <mxGeometry x="0.0074" y="1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-11" value="CLI: config_terminal()<div>(command.c)</div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d0cee2;strokeColor=#56517e;" parent="1" vertex="1"> + <mxGeometry x="315" y="420" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-29" target="4hLhriEXD62TuEoW85Ij-11" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-27" value="<div style="font-size: 12px;"><br></div>" style="rounded=1;whiteSpace=wrap;html=1;arcSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;shadow=1;comic=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;align=center;verticalAlign=top;fontStyle=1;container=0;" parent="1" vertex="1"> + <mxGeometry x="50" y="600" width="550" height="190" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-18" value="vty_read_config()" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"> + <mxGeometry x="260" y="670" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-21" value="vty_apply_config()" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"> + <mxGeometry x="260" y="730" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-22" value="<b><i>"copy FILE to rrunning"</i></b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"> + <mxGeometry x="63.75" y="730" width="150" height="40" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-23" value="<b><i>vtysh_main.c: main()</i></b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"> + <mxGeometry x="430" y="730" width="150" height="40" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-18" target="4hLhriEXD62TuEoW85Ij-16" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-21" target="4hLhriEXD62TuEoW85Ij-18" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-22" target="4hLhriEXD62TuEoW85Ij-21" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-23" target="4hLhriEXD62TuEoW85Ij-21" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-34" value="VTYSH" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=default;fontColor=#333333;opacity=50;dashed=1;dashPattern=8 8;" parent="1" vertex="1"> + <mxGeometry x="500" y="610" width="90" height="30" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-12" value="" style="curved=0;endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;dashed=1;startFill=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="215" y="400" as="sourcePoint" /> + <mxPoint x="380" y="400" as="targetPoint" /> + <Array as="points"> + <mxPoint x="215" y="370" /> + <mxPoint x="380" y="370" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-16" value="vty_read_file()<div><b><i>"conf term file-lock"</i></b></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"> + <mxGeometry x="260" y="610" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="4hLhriEXD62TuEoW85Ij-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;jumpStyle=line;exitX=0.5;exitY=0;exitDx=0;exitDy=0;shadow=1;" parent="1" source="4hLhriEXD62TuEoW85Ij-16" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="325" y="580" /> + <mxPoint x="215" y="580" /> + </Array> + <mxPoint x="395" y="670" as="sourcePoint" /> + <mxPoint x="215" y="390" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;endArrow=oval;endFill=1;" parent="1" source="QL32OzfzetEIIOdSfswY-14" target="QL32OzfzetEIIOdSfswY-26" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="QL32OzfzetEIIOdSfswY-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;startFill=1;startArrow=classic;endFill=1;" parent="1" source="QL32OzfzetEIIOdSfswY-8" target="QL32OzfzetEIIOdSfswY-27" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-15" value="<div>lock mm-&gt;candidate</div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1"> + <mxGeometry x="580" y="420" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-20" value="If we don't lock for non-mgmtd then<div>multiple vtysh conf t are allowed!</div>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontStyle=3;fontColor=#FF0000;" vertex="1" parent="1"> + <mxGeometry x="425" y="463" width="210" height="40" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-24" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-21" target="U9ftda_CDvz5WDsUi4ve-23"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-21" value="vty_config_node_exit()" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fillStyle=auto;strokeWidth=3;" vertex="1" parent="1"> + <mxGeometry x="830" y="340" width="180" height="45" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-26" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-23" target="U9ftda_CDvz5WDsUi4ve-25"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-29" value="pendign == true" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="U9ftda_CDvz5WDsUi4ve-26"> + <mxGeometry x="-0.0182" y="-3" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-23" value="<div>&nbsp; &nbsp;nb_cli_pending_commit_check()</div><div><br></div>" style="whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fillStyle=auto;strokeWidth=1;" vertex="1" parent="1"> + <mxGeometry x="830" y="420" width="180" height="35" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-28" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" target="U9ftda_CDvz5WDsUi4ve-27"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="920" y="570" as="sourcePoint" /> + <Array as="points"> + <mxPoint x="920" y="569" /> + <mxPoint x="920" y="596" /> + <mxPoint x="910" y="596" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-27" target="U9ftda_CDvz5WDsUi4ve-36"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="920" y="574.37" as="sourcePoint" /> + <mxPoint x="1000" y="610.0000000000001" as="targetPoint" /> + <Array as="points"> + <mxPoint x="960" y="635" /> + <mxPoint x="980" y="635" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-47" value="success" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="U9ftda_CDvz5WDsUi4ve-35"> + <mxGeometry x="-0.275" y="1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-25" target="U9ftda_CDvz5WDsUi4ve-27"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-25" value="nb_cli_classic_commit()" style="whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fillStyle=auto;strokeWidth=1;" vertex="1" parent="1"> + <mxGeometry x="830" y="500" width="180" height="37.5" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-31" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-27" target="U9ftda_CDvz5WDsUi4ve-30"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="880" y="635" /> + <mxPoint x="781" y="635" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-32" value="fail" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="U9ftda_CDvz5WDsUi4ve-31"> + <mxGeometry x="-0.055" y="-3" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-27" value="nb_candidate_commit_prepare()" style="whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fillStyle=auto;strokeWidth=1;" vertex="1" parent="1"> + <mxGeometry x="830" y="566.25" width="180" height="33.75" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-30" value="" style="whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fillStyle=auto;strokeWidth=1;" vertex="1" parent="1"> + <mxGeometry x="691.25" y="670.01" width="180" height="99.99" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-38" target="U9ftda_CDvz5WDsUi4ve-39"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-38" value="<div>running</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="706.25" y="685" width="50" height="70" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-39" value="<div>private or</div><div>candidate</div><div><br></div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> + <mxGeometry x="796.25" y="685" width="60" height="70" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-42" value="<div>running</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="990" y="715" width="50" height="70" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-41" value="<div>private or</div><div>candidate</div><div><br></div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> + <mxGeometry x="900" y="715" width="65" height="70" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-36" target="U9ftda_CDvz5WDsUi4ve-36"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-48" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="U9ftda_CDvz5WDsUi4ve-41" target="U9ftda_CDvz5WDsUi4ve-42"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="960" y="705" as="sourcePoint" /> + <mxPoint x="990" y="705" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="U9ftda_CDvz5WDsUi4ve-52" value="<b><font style="font-size: 15px;">Config Datastore Non-Implicit Commit Cleanup</font></b>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="400" y="10" width="360" height="30" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/doc/figures/datastores.svg b/doc/figures/datastores.svg new file mode 100644 index 0000000000..41f612fc68 --- /dev/null +++ b/doc/figures/datastores.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1035px" height="806px" viewBox="-0.5 -0.5 1035 806"><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="U9ftda_CDvz5WDsUi4ve-36"><g><rect x="854" y="660" width="180" height="136.87" rx="20.53" ry="20.53" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 667px; margin-left: 855px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">nb_candidate_commit_apply()</div></div></div></foreignObject><text x="944" y="679" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">nb_candidate_commit_apply()</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-29"><g><rect x="14" y="210" width="660" height="170" rx="25.5" ry="25.5" fill-opacity="0.5" fill="#dae8fc" stroke="#000000" stroke-opacity="0.5" stroke-dasharray="1 2" pointer-events="all" style="fill: rgb(218, 232, 252); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 658px; height: 1px; padding-top: 347px; margin-left: 15px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><i><font style="font-size: 16px;">Daemon CLI Parsing (lib/vty.c)</font></i></div></div></div></foreignObject><text x="344" y="347" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Daemon CLI Parsing (lib/vty.c)</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-7"><g style="filter: drop-shadow(light-dark(rgba(0, 0, 0, 0.25), rgba(237, 237, 237, 0.25)) 2px 3px 2px);"><rect x="194" y="30" width="490" height="270" rx="64.8" ry="64.8" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all" style="fill: rgb(218, 232, 252); stroke: rgb(108, 142, 191);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 488px; height: 1px; padding-top: 37px; margin-left: 195px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Verdana"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; "><div style="font-size: 12px;">mgmtd</div><div style="font-size: 12px;">(new config path)</div></div></div></div></foreignObject><text x="439" y="49" fill="light-dark(#000000, #ffffff)" font-family=""Verdana"" font-size="12px" text-anchor="middle" font-weight="bold">mgmtd...</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-13"><g><path d="M 100.25 75 C 100.25 66.72 122.08 60 149 60 C 161.93 60 174.33 61.58 183.47 64.39 C 192.61 67.21 197.75 71.02 197.75 75 L 197.75 175 C 197.75 183.28 175.92 190 149 190 C 122.08 190 100.25 183.28 100.25 175 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(255, 242, 204); stroke: rgb(214, 182, 86);"/><path d="M 197.75 75 C 197.75 83.28 175.92 90 149 90 C 122.08 90 100.25 83.28 100.25 75" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(214, 182, 86);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 138px; margin-left: 101px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div><font>vty_shared_</font></div><div><font>candidate_config</font></div></div></div></div></foreignObject><text x="149" y="141" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_shared_...</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-14"><g><path d="M 224 75 C 224 66.72 245.83 60 272.75 60 C 285.68 60 298.08 61.58 307.22 64.39 C 316.36 67.21 321.5 71.02 321.5 75 L 321.5 175 C 321.5 183.28 299.67 190 272.75 190 C 245.83 190 224 183.28 224 175 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(213, 232, 212); stroke: rgb(130, 179, 102);"/><path d="M 321.5 75 C 321.5 83.28 299.67 90 272.75 90 C 245.83 90 224 83.28 224 75" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(130, 179, 102);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 138px; margin-left: 225px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>running_config</div></div></div></div></foreignObject><text x="273" y="141" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">running_config</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-18"><g/><g data-cell-id="QL32OzfzetEIIOdSfswY-19"><g style="filter: drop-shadow(light-dark(rgba(0, 0, 0, 0.25), rgba(237, 237, 237, 0.25)) 2px 3px 2px);"><rect x="34" y="50" width="270" height="190" rx="45.6" ry="45.6" fill="#fad9d5" stroke="#ae4132" pointer-events="all" style="fill: rgb(250, 217, 213); stroke: rgb(174, 65, 50);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 57px; margin-left: 35px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Verdana"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; "><div style="font-size: 12px;">B daemon <span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">(old direct vty)</span></div></div></div></div></foreignObject><text x="169" y="69" fill="light-dark(#000000, #ffffff)" font-family=""Verdana"" font-size="12px" text-anchor="middle" font-weight="bold">B daemon (old direct vty)</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-20"><g><path d="M 64 95 C 64 86.72 85.83 80 112.75 80 C 125.68 80 138.08 81.58 147.22 84.39 C 156.36 87.21 161.5 91.02 161.5 95 L 161.5 195 C 161.5 203.28 139.67 210 112.75 210 C 85.83 210 64 203.28 64 195 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(255, 242, 204); stroke: rgb(214, 182, 86);"/><path d="M 161.5 95 C 161.5 103.28 139.67 110 112.75 110 C 85.83 110 64 103.28 64 95" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(214, 182, 86);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 158px; margin-left: 65px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div><font>vty_shared_</font></div><div><font>candidate_config</font></div></div></div></div></foreignObject><text x="113" y="161" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_shared_...</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-21"><g><path d="M 194 95 C 194 86.72 215.83 80 242.75 80 C 255.68 80 268.08 81.58 277.22 84.39 C 286.36 87.21 291.5 91.02 291.5 95 L 291.5 195 C 291.5 203.28 269.67 210 242.75 210 C 215.83 210 194 203.28 194 195 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(213, 232, 212); stroke: rgb(130, 179, 102);"/><path d="M 291.5 95 C 291.5 103.28 269.67 110 242.75 110 C 215.83 110 194 103.28 194 95" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(130, 179, 102);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 158px; margin-left: 195px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>running_config</div></div></div></div></foreignObject><text x="243" y="161" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">running_config</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-23"><g style="filter: drop-shadow(light-dark(rgba(0, 0, 0, 0.25), rgba(237, 237, 237, 0.25)) 2px 3px 2px);"><rect x="4" y="70" width="270" height="190" rx="45.6" ry="45.6" fill="#fad9d5" stroke="#ae4132" pointer-events="all" style="fill: rgb(250, 217, 213); stroke: rgb(174, 65, 50);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 77px; margin-left: 5px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Verdana"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; "><div style="font-size: 12px;">A daemon (old direct vty)</div></div></div></div></foreignObject><text x="139" y="89" fill="light-dark(#000000, #ffffff)" font-family=""Verdana"" font-size="12px" text-anchor="middle" font-weight="bold">A daemon (old direct vty)</text></switch></g></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-25"><g><path d="M 164 115 C 164 106.72 185.83 100 212.75 100 C 225.68 100 238.08 101.58 247.22 104.39 C 256.36 107.21 261.5 111.02 261.5 115 L 261.5 215 C 261.5 223.28 239.67 230 212.75 230 C 185.83 230 164 223.28 164 215 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(213, 232, 212); stroke: rgb(130, 179, 102);"/><path d="M 261.5 115 C 261.5 123.28 239.67 130 212.75 130 C 185.83 130 164 123.28 164 115" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(130, 179, 102);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 178px; margin-left: 165px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>running_config</div></div></div></div></foreignObject><text x="213" y="181" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">running_config</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-2"><g><path d="M 612.75 150 L 754 150 L 754 520 L 415.37 520" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 410.12 520 L 417.12 516.5 L 415.37 520 L 417.12 523.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-8"><g><path d="M 515.25 75 C 515.25 66.72 537.08 60 564 60 C 576.93 60 589.33 61.58 598.47 64.39 C 607.61 67.21 612.75 71.02 612.75 75 L 612.75 175 C 612.75 183.28 590.92 190 564 190 C 537.08 190 515.25 183.28 515.25 175 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(255, 242, 204); stroke: rgb(214, 182, 86);"/><path d="M 612.75 75 C 612.75 83.28 590.92 90 564 90 C 537.08 90 515.25 83.28 515.25 75" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(214, 182, 86);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 138px; margin-left: 516px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div><font>vty_mgmt_</font></div><div><font>candidate_config</font></div></div></div></div></foreignObject><text x="564" y="141" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_mgmt_...</text></switch></g></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-26"><g><rect x="334" y="220" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 250px; margin-left: 335px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">mm->running</div></div></div></foreignObject><text x="394" y="254" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">mm->running</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-14"><g><path d="M 504 250 L 460.37 250" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 455.12 250 L 462.12 246.5 L 460.37 250 L 462.12 253.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-27"><g><rect x="504" y="220" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 250px; margin-left: 505px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">mm->candidate</div></div></div></foreignObject><text x="564" y="254" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">mm->candidate</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-1"><g><rect x="279" y="490" width="130" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" stroke-width="3" pointer-events="all" style="fill: rgb(248, 206, 204); stroke: rgb(184, 84, 80);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 520px; margin-left: 280px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">vty_config_entry()</div></div></div></foreignObject><text x="344" y="524" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_config_entry()</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-3"><g><path d="M 84 230 L 84 520 L 272.63 520" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 277.88 520 L 270.88 523.5 L 272.63 520 L 270.88 516.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-24"><g><path d="M 34 115 C 34 106.72 55.83 100 82.75 100 C 95.68 100 108.08 101.58 117.22 104.39 C 126.36 107.21 131.5 111.02 131.5 115 L 131.5 215 C 131.5 223.28 109.67 230 82.75 230 C 55.83 230 34 223.28 34 215 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(255, 242, 204); stroke: rgb(214, 182, 86);"/><path d="M 131.5 115 C 131.5 123.28 109.67 130 82.75 130 C 55.83 130 34 123.28 34 115" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(214, 182, 86);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 178px; margin-left: 35px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div><font>vty_shared_</font></div><div><font>candidate_config</font></div></div></div></div></foreignObject><text x="83" y="181" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_shared_...</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-8"><g><path d="M 944 80 L 944 100 L 884.1 100 L 884.1 113.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 884.1 118.88 L 880.6 111.88 L 884.1 113.63 L 887.6 111.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-4"><g><rect x="874" y="30" width="140" height="50" rx="7.5" ry="7.5" fill="#d0cee2" stroke="#56517e" pointer-events="all" style="fill: rgb(208, 206, 226); stroke: rgb(86, 81, 126);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 55px; margin-left: 875px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CLI: config_exclusive()<div>(northbound_cli.c)</div></div></div></div></foreignObject><text x="944" y="59" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">CLI: config_exclusive()...</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-5"><g><rect x="724" y="35" width="140" height="40" rx="6" ry="6" fill="#d0cee2" stroke="#56517e" pointer-events="all" style="fill: rgb(208, 206, 226); stroke: rgb(86, 81, 126);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 55px; margin-left: 725px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CLI: config_private()<div>(northbound_cli.c)</div></div></div></div></foreignObject><text x="794" y="59" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">CLI: config_private()...</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-6"><g><rect x="824" y="220" width="120" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" stroke-width="3" pointer-events="all" style="fill: rgb(248, 206, 204); stroke: rgb(184, 84, 80);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 250px; margin-left: 825px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">vty_config_entry()</div></div></div></foreignObject><text x="884" y="254" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_config_entry()</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-10"><g><path d="M 884.1 190 L 884.1 210 L 884.06 213.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 884.01 218.88 L 880.58 211.85 L 884.06 213.63 L 887.58 211.92 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-7"><g><path d="M 835.25 135 C 835.25 126.72 857.08 120 884 120 C 896.93 120 909.33 121.58 918.47 124.39 C 927.61 127.21 932.75 131.02 932.75 135 L 932.75 175 C 932.75 183.28 910.92 190 884 190 C 857.08 190 835.25 183.28 835.25 175 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(255, 242, 204); stroke: rgb(214, 182, 86);"/><path d="M 932.75 135 C 932.75 143.28 910.92 150 884 150 C 857.08 150 835.25 143.28 835.25 135" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(214, 182, 86);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 96px; height: 1px; padding-top: 168px; margin-left: 836px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>private_config</div></div></div></div></foreignObject><text x="884" y="171" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">private_config</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-9"><g><path d="M 814 75 L 814 100 L 875 100 L 874.32 113.64" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 874.06 118.88 L 870.91 111.72 L 874.32 113.64 L 877.9 112.07 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-15"><g><path d="M 344 450 L 344 483.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 344 488.88 L 340.5 481.88 L 344 483.63 L 347.5 481.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-20"><g><path d="M 344 450 L 344 483.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 344 488.88 L 340.5 481.88 L 344 483.63 L 347.5 481.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 470px; margin-left: 344px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); white-space: nowrap; ">2</div></div></div></foreignObject><text x="344" y="473" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">2</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-16"><g><path d="M 417.24 430 L 535.76 430" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 411.24 430 L 419.24 426 L 417.24 430 L 419.24 434 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 541.76 430 L 533.76 434 L 535.76 430 L 533.76 426 Z" fill="#000000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-17"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 429px; margin-left: 480px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); white-space: nowrap; ">1</div></div></div></foreignObject><text x="480" y="432" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">1</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-19"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 430px; margin-left: 478px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); white-space: nowrap; ">1: (mgmtd only)</div></div></div></foreignObject><text x="478" y="433" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">1: (mgmtd only)</text></switch></g></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-11"><g><rect x="279" y="410" width="130" height="40" rx="6" ry="6" fill="#d0cee2" stroke="#56517e" pointer-events="all" style="fill: rgb(208, 206, 226); stroke: rgb(86, 81, 126);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 430px; margin-left: 280px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CLI: config_terminal()<div>(command.c)</div></div></div></div></foreignObject><text x="344" y="434" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">CLI: config_terminal(...</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-31"><g><path d="M 344 380 L 344 400 L 344 390 L 344 403.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 344 408.88 L 340.5 401.88 L 344 403.63 L 347.5 401.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-27"><g style="filter: drop-shadow(light-dark(rgba(0, 0, 0, 0.25), rgba(237, 237, 237, 0.25)) 2px 3px 2px);"><rect x="14" y="590" width="550" height="190" rx="22.8" ry="22.8" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all" style="fill: rgb(218, 232, 252); stroke: rgb(108, 142, 191);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 548px; height: 1px; padding-top: 597px; margin-left: 15px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Verdana"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; "><div style="font-size: 12px;"><br /></div></div></div></div></foreignObject><text x="289" y="609" fill="light-dark(#000000, #ffffff)" font-family=""Verdana"" font-size="12px" text-anchor="middle" font-weight="bold">
</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-18"><g><rect x="224" y="660" width="130" height="40" rx="6" ry="6" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 680px; margin-left: 225px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">vty_read_config()</div></div></div></foreignObject><text x="289" y="684" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_read_config()</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-21"><g><rect x="224" y="720" width="130" height="40" rx="6" ry="6" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 740px; margin-left: 225px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">vty_apply_config()</div></div></div></foreignObject><text x="289" y="744" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_apply_config()</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-22"><g><rect x="27.75" y="720" width="150" height="40" rx="6" ry="6" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 740px; margin-left: 29px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><i>"copy FILE to rrunning"</i></b></div></div></div></foreignObject><text x="103" y="744" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">"copy FILE to rrunning"</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-23"><g><rect x="394" y="720" width="150" height="40" rx="6" ry="6" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 740px; margin-left: 395px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><i>vtysh_main.c: main()</i></b></div></div></div></foreignObject><text x="469" y="744" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vtysh_main.c: main()</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-19"><g><path d="M 289 660 L 289 640 L 289 660 L 289 646.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 289 641.12 L 292.5 648.12 L 289 646.37 L 285.5 648.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-26"><g><path d="M 289 720 L 289 700 L 289 720 L 289 706.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 289 701.12 L 292.5 708.12 L 289 706.37 L 285.5 708.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-25"><g><path d="M 177.75 740 L 217.63 740" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 222.88 740 L 215.88 743.5 L 217.63 740 L 215.88 736.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-24"><g><path d="M 394 740 L 360.37 740" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 355.12 740 L 362.12 736.5 L 360.37 740 L 362.12 743.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-34"><g><rect x="464" y="600" width="90" height="30" rx="4.5" ry="4.5" fill-opacity="0.5" fill="#f5f5f5" stroke="#000000" stroke-opacity="0.5" stroke-dasharray="8 8" pointer-events="all" style="fill: rgb(245, 245, 245); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 615px; margin-left: 465px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #333333; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #333333; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">VTYSH</div></div></div></foreignObject><text x="509" y="619" fill="#333333" font-family=""Helvetica"" font-size="12px" text-anchor="middle">VTYSH</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-12"><g><path d="M 179 390 L 179 360 L 344 360 L 344 390" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-16"><g><rect x="224" y="600" width="130" height="40" rx="6" ry="6" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 620px; margin-left: 225px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">vty_read_file()<div><b><i>"conf term file-lock"</i></b></div></div></div></div></foreignObject><text x="289" y="624" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_read_file()...</text></switch></g></g></g><g data-cell-id="4hLhriEXD62TuEoW85Ij-17"><g style="filter: drop-shadow(light-dark(rgba(0, 0, 0, 0.25), rgba(237, 237, 237, 0.25)) 2px 3px 2px);"><path d="M 289 600 L 289 570 L 179 570 L 179 523 M 176 523 L 182 523 M 182 517 L 176 517 M 179 517 L 179 517 L 179 386.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 179 381.12 L 182.5 388.12 L 179 386.37 L 175.5 388.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-28"><g><path d="M 327.87 125 L 394 125 L 394 217" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 322.62 125 L 329.62 121.5 L 327.87 125 L 329.62 128.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><ellipse cx="394" cy="220" rx="3" ry="3" fill="#000000" stroke="#000000" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="QL32OzfzetEIIOdSfswY-29"><g><path d="M 564.1 196.37 L 564.1 210 L 564.03 217" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 564.1 191.12 L 567.6 198.12 L 564.1 196.37 L 560.6 198.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><ellipse cx="564" cy="220" rx="3" ry="3" fill="#000000" stroke="#000000" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-15"><g><rect x="544" y="410" width="130" height="40" rx="6" ry="6" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 430px; margin-left: 545px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>lock mm->candidate</div></div></div></div></foreignObject><text x="609" y="434" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">lock mm->candidate</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-20"><g><rect x="389" y="453" width="210" height="40" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 473px; margin-left: 494px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #FF0000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #FF0000; line-height: 1.2; pointer-events: all; font-weight: bold; font-style: italic; white-space: nowrap; ">If we don't lock for non-mgmtd then<div>multiple vtysh conf t are allowed!</div></div></div></div></foreignObject><text x="494" y="477" fill="#FF0000" font-family=""Helvetica"" font-size="12px" text-anchor="middle" font-weight="bold" font-style="italic">If we don't lock for non-mgmtd then...</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-24"><g><path d="M 884 375 L 884 395 L 884 390 L 884 403.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 884 408.88 L 880.5 401.88 L 884 403.63 L 887.5 401.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-21"><g><rect x="794" y="330" width="180" height="45" rx="6.75" ry="6.75" fill="#f8cecc" stroke="#b85450" stroke-width="3" pointer-events="all" style="fill: rgb(248, 206, 204); stroke: rgb(184, 84, 80);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 353px; margin-left: 795px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">vty_config_node_exit()</div></div></div></foreignObject><text x="884" y="356" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">vty_config_node_exit()</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-26"><g><path d="M 884 445 L 884 483.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 884 488.88 L 880.5 481.88 L 884 483.63 L 887.5 481.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-29"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 468px; margin-left: 882px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); white-space: nowrap; ">pendign == true</div></div></div></foreignObject><text x="882" y="471" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">pendign == true</text></switch></g></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-23"><g><rect x="794" y="410" width="180" height="35" rx="5.25" ry="5.25" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 428px; margin-left: 795px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div> nb_cli_pending_commit_check()</div><div><br /></div></div></div></div></foreignObject><text x="884" y="431" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">nb_cli_pending_commit_check...</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-28"><g><path d="M 884 560 L 884 562.62" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 884 557.37 L 887.5 564.37 L 884 562.62 L 880.5 564.37 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-35"><g><path d="M 924 590 L 924 625 L 944 625 L 944 653.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 944 658.88 L 940.5 651.88 L 944 653.63 L 947.5 651.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-47"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 624px; margin-left: 926px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); white-space: nowrap; ">success</div></div></div></foreignObject><text x="926" y="627" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">success</text></switch></g></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-51"><g><path d="M 884 527.5 L 884 547.5 L 884 536.3 L 884 549.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 884 555.13 L 880.5 548.13 L 884 549.88 L 887.5 548.13 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-25"><g><rect x="794" y="490" width="180" height="37.5" rx="5.63" ry="5.63" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 509px; margin-left: 795px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">nb_cli_classic_commit()</div></div></div></foreignObject><text x="884" y="512" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">nb_cli_classic_commit()</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-31"><g><path d="M 844 590 L 844 625 L 745 625 L 745 653.64" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 745 658.89 L 741.5 651.89 L 745 653.64 L 748.5 651.89 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-32"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 623px; margin-left: 800px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); white-space: nowrap; ">fail</div></div></div></foreignObject><text x="800" y="626" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">fail</text></switch></g></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-27"><g><rect x="794" y="556.25" width="180" height="33.75" rx="5.06" ry="5.06" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 573px; margin-left: 795px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">nb_candidate_commit_prepare()</div></div></div></foreignObject><text x="884" y="577" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">nb_candidate_commit_prepare()</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-30"><g><rect x="655.25" y="660.01" width="180" height="99.99" rx="15" ry="15" fill="#e1d5e7" stroke="#9673a6" pointer-events="all" style="fill: rgb(225, 213, 231); stroke: rgb(150, 115, 166);"/></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-40"><g><path d="M 720.25 710 L 753.88 710" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 759.13 710 L 752.13 713.5 L 753.88 710 L 752.13 706.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-38"><g><path d="M 670.25 690 C 670.25 681.72 681.44 675 695.25 675 C 701.88 675 708.24 676.58 712.93 679.39 C 717.62 682.21 720.25 686.02 720.25 690 L 720.25 730 C 720.25 738.28 709.06 745 695.25 745 C 681.44 745 670.25 738.28 670.25 730 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(213, 232, 212); stroke: rgb(130, 179, 102);"/><path d="M 720.25 690 C 720.25 698.28 709.06 705 695.25 705 C 681.44 705 670.25 698.28 670.25 690" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(130, 179, 102);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 723px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>running</div></div></div></div></foreignObject><text x="695" y="726" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">running</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-39"><g><path d="M 760.25 690 C 760.25 681.72 773.68 675 790.25 675 C 798.21 675 805.84 676.58 811.46 679.39 C 817.09 682.21 820.25 686.02 820.25 690 L 820.25 730 C 820.25 738.28 806.82 745 790.25 745 C 773.68 745 760.25 738.28 760.25 730 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(255, 242, 204); stroke: rgb(214, 182, 86);"/><path d="M 820.25 690 C 820.25 698.28 806.82 705 790.25 705 C 773.68 705 760.25 698.28 760.25 690" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(214, 182, 86);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 723px; margin-left: 761px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>private or</div><div>candidate</div><div><br /></div></div></div></div></foreignObject><text x="790" y="726" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">private or...</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-42"><g><path d="M 954 720 C 954 711.72 965.19 705 979 705 C 985.63 705 991.99 706.58 996.68 709.39 C 1001.37 712.21 1004 716.02 1004 720 L 1004 760 C 1004 768.28 992.81 775 979 775 C 965.19 775 954 768.28 954 760 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(213, 232, 212); stroke: rgb(130, 179, 102);"/><path d="M 1004 720 C 1004 728.28 992.81 735 979 735 C 965.19 735 954 728.28 954 720" fill="none" stroke="#82b366" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(130, 179, 102);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 753px; margin-left: 955px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>running</div></div></div></div></foreignObject><text x="979" y="756" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">running</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-41"><g><path d="M 864 720 C 864 711.72 878.55 705 896.5 705 C 905.12 705 913.39 706.58 919.48 709.39 C 925.58 712.21 929 716.02 929 720 L 929 760 C 929 768.28 914.45 775 896.5 775 C 878.55 775 864 768.28 864 760 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(255, 242, 204); stroke: rgb(214, 182, 86);"/><path d="M 929 720 C 929 728.28 914.45 735 896.5 735 C 878.55 735 864 728.28 864 720" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(214, 182, 86);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 63px; height: 1px; padding-top: 753px; margin-left: 865px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>private or</div><div>candidate</div><div><br /></div></div></div></div></foreignObject><text x="897" y="756" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">private or...</text></switch></g></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-44"><g/></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-48"><g><path d="M 929 740 L 949 740 L 934 740 L 947.63 740" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 952.88 740 L 945.88 743.5 L 947.63 740 L 945.88 736.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="U9ftda_CDvz5WDsUi4ve-52"><g><rect x="364" y="0" width="360" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 15px; margin-left: 544px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: nowrap; "><b><font style="font-size: 15px;">Config Datastore Non-Implicit Commit Cleanup</font></b></div></div></div></foreignObject><text x="544" y="19" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Config Datastore Non-Implicit Commit Cleanup</text></switch></g></g></g></g></g></g></svg>
\ No newline at end of file diff --git a/nhrpd/nhrp_peer.c b/nhrpd/nhrp_peer.c index fa11980c18..97932795a3 100644 --- a/nhrpd/nhrp_peer.c +++ b/nhrpd/nhrp_peer.c @@ -1355,6 +1355,11 @@ void nhrp_peer_recv(struct nhrp_peer *p, struct zbuf *zb) } break; case NHRP_ROUTE_NBMA_NEXTHOP: + if (hdr->hop_count == 0) { + nhrp_packet_send_error(&pp, NHRP_ERROR_HOP_COUNT_EXCEEDED, 0); + info = "hop count exceeded"; + goto drop; + } nhrp_peer_forward(peer, &pp); break; case NHRP_ROUTE_BLACKHOLE: diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 75c556a5d7..86dc826378 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -195,8 +195,17 @@ void pim_if_delete(struct interface *ifp) assert(pim_ifp); pim_ifp->pim->mcast_if_count--; - if (pim_ifp->gm_join_list) + if (pim_ifp->gm_join_list) { pim_if_gm_join_del_all(ifp); + /* + * Sometimes gm_join_del_all does not delete them all + * and as such it's not actually freed. Let's + * just clean this up if it wasn't to prevent + * the problem. + */ + if (pim_ifp->gm_join_list) + list_delete(&pim_ifp->gm_join_list); + } if (pim_ifp->static_group_list) pim_if_static_group_del_all(ifp); @@ -1437,10 +1446,8 @@ int pim_if_gm_join_del(struct interface *ifp, pim_addr group_addr, } listnode_delete(pim_ifp->gm_join_list, ij); gm_join_free(ij); - if (listcount(pim_ifp->gm_join_list) < 1) { + if (listcount(pim_ifp->gm_join_list) < 1) list_delete(&pim_ifp->gm_join_list); - pim_ifp->gm_join_list = 0; - } return 0; } |
