Skip to content

Commit 388f504

Browse files
committed
Ignore crosslink in expanded intersection
1 parent a1976e6 commit 388f504

File tree

2 files changed

+61
-11
lines changed

2 files changed

+61
-11
lines changed

go/pkg/pass1/cut-netspoc.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,8 @@ func (c *spoc) markAndSubstElements(
300300
elemList *[]ast.Element, ctx string, m map[string]*ast.TopList,
301301
isUsed map[string]bool) {
302302

303-
expand := func(el ast.Element) groupObjList {
304-
l := c.expandGroup1([]ast.Element{el}, ctx, false, false)
303+
expand := func(el ast.Element, visible bool) groupObjList {
304+
l := c.expandGroup1([]ast.Element{el}, ctx, visible, false)
305305
// Remove duplicates from dual stack objects.
306306
slices.SortFunc(l, func(e1, e2 groupObj) int {
307307
return strings.Compare(e1.String(), e2.String())
@@ -395,8 +395,8 @@ func (c *spoc) markAndSubstElements(
395395
}
396396
return result
397397
}
398-
var traverse func(l []ast.Element) []ast.Element
399-
traverse = func(l []ast.Element) []ast.Element {
398+
var traverse func(l []ast.Element, visible bool) []ast.Element
399+
traverse = func(l []ast.Element, visible bool) []ast.Element {
400400
var expanded groupObjList
401401
j := 0
402402
for _, el := range l {
@@ -408,7 +408,7 @@ func (c *spoc) markAndSubstElements(
408408
}
409409
switch x.Type {
410410
case "any", "network":
411-
for _, obj := range expand(el) {
411+
for _, obj := range expand(el, visible) {
412412
markUnconnectedObj(obj.(*network), isUsed)
413413
}
414414
case "group":
@@ -419,29 +419,29 @@ func (c *spoc) markAndSubstElements(
419419
isUsed[typedName] = true
420420
case ast.AutoElem:
421421
// Ignore empty automatic group
422-
if len(expand(el)) == 0 {
422+
if len(expand(el, false)) == 0 {
423423
continue
424424
}
425425
// Remove sub elements that would evaluate to empty list.
426-
l2 := traverse(x.GetElements())
426+
l2 := traverse(x.GetElements(), false)
427427
j2 := 0
428428
for _, el2 := range l2 {
429-
if len(expand(el2)) != 0 {
429+
if len(expand(el2, false)) != 0 {
430430
l2[j2] = el2
431431
j2++
432432
}
433433
}
434434
x.SetElements(l2[:j2])
435435
case *ast.IntfRef:
436-
for _, obj := range expand(el) {
436+
for _, obj := range expand(el, visible) {
437437
switch x := obj.(type) {
438438
case *routerIntf:
439439
setIntfUsed(x, isUsed)
440440
setRouterUsed(x.router, isUsed)
441441
}
442442
}
443443
case *ast.Intersection:
444-
expanded = append(expanded, expand(el)...)
444+
expanded = append(expanded, expand(el, visible)...)
445445
continue // Ignore original intersection.
446446
}
447447
l[j] = el
@@ -453,7 +453,7 @@ func (c *spoc) markAndSubstElements(
453453
}
454454
return result
455455
}
456-
*elemList = traverse(*elemList)
456+
*elemList = traverse(*elemList, true)
457457
}
458458

459459
func (c *spoc) markElements(

go/testdata/cut-netspoc/cut-netspoc.t

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3725,6 +3725,56 @@ router:r2 = {
37253725
}
37263726
=END=
37273727

3728+
############################################################
3729+
=TITLE=Remove crosslink network from automated group
3730+
=INPUT=
3731+
area:all = { anchor = network:n1; }
3732+
network:n1 = { ip = 10.1.1.0/27; }
3733+
router:r1 = {
3734+
model = ASA;
3735+
managed;
3736+
interface:n1 = { ip = 10.1.1.1; hardware = n1; }
3737+
interface:cr = { ip = 10.3.3.1; hardware = cr; }
3738+
}
3739+
network:cr = { ip = 10.3.3.0/29; crosslink; }
3740+
router:r2 = {
3741+
model = ASA;
3742+
managed;
3743+
interface:cr = { ip = 10.3.3.2; hardware = cr; }
3744+
interface:n2 = { ip = 10.2.2.1; hardware = n2; }
3745+
}
3746+
network:n2 = { ip = 10.2.2.0/27; }
3747+
area:n1-cr = {
3748+
border = interface:r2.cr;
3749+
}
3750+
service:s1 = {
3751+
user = network:[area:all] &! network:n2;
3752+
permit src = user; dst = network:n2; prt = tcp 80;
3753+
}
3754+
=OUTPUT=
3755+
network:n1 = { ip = 10.1.1.0/27; }
3756+
router:r1 = {
3757+
model = ASA;
3758+
managed;
3759+
interface:n1 = { ip = 10.1.1.1; hardware = n1; }
3760+
interface:cr = { ip = 10.3.3.1; hardware = cr; }
3761+
}
3762+
network:cr = { ip = 10.3.3.0/29; crosslink; }
3763+
router:r2 = {
3764+
model = ASA;
3765+
managed;
3766+
interface:cr = { ip = 10.3.3.2; hardware = cr; }
3767+
interface:n2 = { ip = 10.2.2.1; hardware = n2; }
3768+
}
3769+
network:n2 = { ip = 10.2.2.0/27; }
3770+
service:s1 = {
3771+
user = network:n1;
3772+
permit src = user;
3773+
dst = network:n2;
3774+
prt = tcp 80;
3775+
}
3776+
=END=
3777+
37283778
############################################################
37293779
=TITLE=Remove border of area in unconnected part
37303780
=INPUT=

0 commit comments

Comments
 (0)