Netspoc marks paths P by adding {path} attributes to each node located on P.
{path} is used only on linear parts of P. Cyclic parts use other mechanisms.
If P starts with some linear part and if the cyclic part can't be passed because of pathrestrictions,
then path_walk shows message "Error: No valid path" and aborts this walk.
If different paths Q and P with identical destination D share at least one node of linear part of P, then path_mark finds attribute {path} set for D and erroneously thinks, that D is reachable.
This leads to inherited warnings "Use of uninitialized value".
network:n1 = { ip = 10.1.1.0/24; }
network:n2 = { ip = 10.1.2.0/24; }
router:r1 = {
managed;
model = IOS, FW;
interface:n1 = { ip = 10.1.1.1; hardware = E1; }
interface:n2 = { ip = 10.1.2.1; hardware = E2; }
interface:t1 = { ip = 10.9.1.1; hardware = E0; }
}
network:t1 = { ip = 10.9.1.0/24; }
router:r2 = {
managed;
model = IOS, FW;
routing = manual;
interface:t1 = { ip = 10.9.1.2; hardware = E1; }
interface:t2 = { ip = 10.9.2.3; hardware = E2; }
}
network:t2 = { ip = 10.9.2.0/24; }
router:filter1 = {
managed;
model = ASA;
routing = manual;
interface:t2 = { ip = 10.9.2.1; hardware = Vlan20; }
interface:t3 = { ip = 10.5.6.1; hardware = G0/1;
}
}
router:filter2 = {
managed;
model = IOS;
routing = manual;
interface:t2 = { ip = 10.9.2.2; hardware = Vlan20; }
interface:t3 = { ip = 10.5.6.2; hardware = G0/1; }
}
network:t3 = { ip = 10.5.6.0/24; }
router:Kunde = {
managed;
model = IOS;
routing = manual;
interface:t3 = { ip = 10.5.6.70; hardware = E0; }
interface:n3 = { ip = 10.1.3.1; hardware = E1; }
}
network:n3 = { ip = 10.1.3.0/24; }
pathrestriction:restrict1 =
interface:filter1.t2,
interface:Kunde.t3,
;
pathrestriction:restrict2 =
interface:filter2.t2,
interface:Kunde.t3,
;
service:test = {
user = network:n1, network:n2;
permit src = user; dst = interface:Kunde.n3; prt = tcp 80;
}