Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JUNOS: Add and fix VNI/VxLan properties #8542

Open
wants to merge 17 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -4279,6 +4279,11 @@ M_VrfTarget_DEC
F_Digit+ -> type ( DEC )
;

M_VrfTarget_AUTO
:
'auto' -> type ( AUTO )
;

M_VrfTarget_EXPORT
:
'export' -> type ( EXPORT )
Expand Down
Expand Up @@ -222,7 +222,11 @@ vlt_l3_interface

vlt_vlan_id
:
VLAN_ID id = vlan_number
VLAN_ID
(
NONE
| id = vlan_number
)
;

vlt_vlan_id_list
Expand Down
Expand Up @@ -10,12 +10,20 @@ s_switch_options
:
SWITCH_OPTIONS
(
so_vtep_source_interface
| so_route_distinguisher
so_route_distinguisher
| so_vrf_target
| so_vrf_export
| so_vrf_import
)
| so_vtep_source_interface
)
;

so_vrf_target:
VRF_TARGET
(
sovt_auto
| sovt_community
| sovt_export
| sovt_import
)
;

so_vtep_source_interface
Expand All @@ -28,17 +36,22 @@ so_route_distinguisher
ROUTE_DISTINGUISHER route_distinguisher
;

so_vrf_target
sovt_auto
:
AUTO
;

sovt_community
:
VRF_TARGET null_filler
extended_community
;

so_vrf_export
sovt_export
:
VRF_EXPORT null_filler
EXPORT extended_community
;

so_vrf_import
sovt_import
:
VRF_IMPORT null_filler
IMPORT extended_community
;
Expand Up @@ -239,6 +239,7 @@
import org.batfish.grammar.flatjuniper.FlatJuniperParser.B_enableContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.B_enforce_first_asContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.B_exportContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.B_familyContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.B_groupContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.B_importContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.B_local_addressContext;
Expand All @@ -251,6 +252,7 @@
import org.batfish.grammar.flatjuniper.FlatJuniperParser.BandwidthContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Bd_routing_interfaceContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Bd_vlan_idContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Bf_evpnContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Bfiu_add_pathContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Bfiu_loopsContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Bfiu_rib_groupContext;
Expand Down Expand Up @@ -279,7 +281,11 @@
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Encryption_algorithmContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Eo8023ad_interfaceContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Eo_redundant_parentContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Evo_vrf_targetContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Evovt_autoContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Evovt_communityContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Evovt_exportContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Evovt_importContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Extended_communityContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.F_familyContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.F_filterContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Ff_termContext;
Expand Down Expand Up @@ -529,6 +535,7 @@
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Ro_resolutionContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Ro_ribContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Ro_rib_groupsContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Ro_route_distinguisher_idContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Ro_router_idContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Ro_staticContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Roa_activeContext;
Expand Down Expand Up @@ -593,7 +600,6 @@
import org.batfish.grammar.flatjuniper.FlatJuniperParser.S_logical_systemsContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.S_routing_optionsContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.S_snmpContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.S_switch_optionsContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.S_vlans_namedContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Sc_literalContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Sc_namedContext;
Expand Down Expand Up @@ -687,6 +693,10 @@
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Snmptg_targetsContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.So_route_distinguisherContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.So_vtep_source_interfaceContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Sovt_autoContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Sovt_communityContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Sovt_exportContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Sovt_importContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Standard_communityContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.SubrangeContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Sy_authentication_methodContext;
Expand Down Expand Up @@ -727,6 +737,7 @@
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Vlt_vni_idContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Vni_numberContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Vni_rangeContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.Vt_communityContext;
import org.batfish.grammar.flatjuniper.FlatJuniperParser.ZoneContext;
import org.batfish.grammar.silent_syntax.SilentSyntaxCollection;
import org.batfish.representation.juniper.AddressAddressBookEntry;
Expand Down Expand Up @@ -760,6 +771,7 @@
import org.batfish.representation.juniper.DscpUtil;
import org.batfish.representation.juniper.Evpn;
import org.batfish.representation.juniper.EvpnEncapsulation;
import org.batfish.representation.juniper.ExtendedCommunityOrAuto;
import org.batfish.representation.juniper.Family;
import org.batfish.representation.juniper.FirewallFilter;
import org.batfish.representation.juniper.FwFrom;
Expand Down Expand Up @@ -948,6 +960,7 @@
import org.batfish.representation.juniper.Vlan;
import org.batfish.representation.juniper.VlanRange;
import org.batfish.representation.juniper.VlanReference;
import org.batfish.representation.juniper.VniOptions;
import org.batfish.representation.juniper.VrrpGroup;
import org.batfish.representation.juniper.Zone;

Expand Down Expand Up @@ -2023,6 +2036,22 @@
}
}

private static @Nonnull ExtendedCommunity toExtendedCommunity(Vt_communityContext ctx) {
if (ctx.getText() != null) {
return ExtendedCommunity.parse(ctx.getText());
} else {
throw new BatfishException("invalid extended community: " + ctx.getText());

Check warning on line 2043 in projects/batfish/src/main/java/org/batfish/grammar/flatjuniper/ConfigurationBuilder.java

View check run for this annotation

Codecov / codecov/patch

projects/batfish/src/main/java/org/batfish/grammar/flatjuniper/ConfigurationBuilder.java#L2043

Added line #L2043 was not covered by tests
}
}

private static @Nonnull ExtendedCommunity toExtendedCommunity(Extended_communityContext ctx) {
if (ctx.getText() != null) {
return ExtendedCommunity.parse(ctx.getText());
} else {
throw new BatfishException("invalid extended community: " + ctx.getText());

Check warning on line 2051 in projects/batfish/src/main/java/org/batfish/grammar/flatjuniper/ConfigurationBuilder.java

View check run for this annotation

Codecov / codecov/patch

projects/batfish/src/main/java/org/batfish/grammar/flatjuniper/ConfigurationBuilder.java#L2051

Added line #L2051 was not covered by tests
}
}

private @Nonnull Optional<SubRange> toSubRange(
ParserRuleContext messageCtx, Vlan_rangeContext ctx) {
Optional<Integer> rangeStart = toInteger(messageCtx, ctx.start);
Expand Down Expand Up @@ -2250,6 +2279,8 @@

private Vlan _currentNamedVlan;

private Integer _currentVni;

private Zone _currentZone;

private ConcreteFirewallFilter _currentZoneInboundFilter;
Expand Down Expand Up @@ -3405,11 +3436,6 @@
_currentSnmpServer = snmpServer;
}

@Override
public void enterS_switch_options(S_switch_optionsContext ctx) {
todo(ctx);
}

@Override
public void exitSo_route_distinguisher(So_route_distinguisherContext ctx) {
RouteDistinguisher rd = toRouteDistinguisher(ctx.route_distinguisher());
Expand All @@ -3423,6 +3449,39 @@
_currentLogicalSystem.getOrInitSwitchOptions().setVtepSourceInterface(ifaceName);
}

@Override
public void exitSovt_community(Sovt_communityContext ctx) {
if (ctx.extended_community() != null) {
_currentLogicalSystem
.getOrInitSwitchOptions()
.setVrfTargetCommunityorAuto(
ExtendedCommunityOrAuto.of(toExtendedCommunity(ctx.extended_community())));
}
}

@Override
public void exitSovt_auto(Sovt_autoContext ctx) {
if (ctx.AUTO() != null) {
_currentLogicalSystem
.getOrInitSwitchOptions()
.setVrfTargetCommunityorAuto(ExtendedCommunityOrAuto.auto());
}
}

@Override
public void exitSovt_export(Sovt_exportContext ctx) {
_currentLogicalSystem
.getOrInitSwitchOptions()
.setVrfTargetExport(toExtendedCommunity(ctx.extended_community()));
}

@Override
public void exitSovt_import(Sovt_importContext ctx) {
_currentLogicalSystem
.getOrInitSwitchOptions()
.setVrfTargetImport(toExtendedCommunity(ctx.extended_community()));
}

@Override
public void enterSe_address_book(Se_address_bookContext ctx) {
String name = toString(ctx.name);
Expand Down Expand Up @@ -4197,6 +4256,11 @@
_currentBgpGroup.getExportPolicies().add(toComplexPolicyStatement(expr, BGP_EXPORT_POLICY));
}

@Override
public void enterB_family(B_familyContext ctx) {
_currentBgpGroup.setEvpnAf(false);
}

@Override
public void exitB_import(B_importContext ctx) {
Policy_expressionContext expr = ctx.expr;
Expand Down Expand Up @@ -4340,8 +4404,10 @@
}

@Override
public void exitE_vni_options(E_vni_optionsContext ctx) {
todo(ctx);
public void enterE_vni_options(E_vni_optionsContext ctx) {
_currentVni = toInt(ctx.id);
assert _currentLogicalSystem.getVniOptions() != null;
_currentLogicalSystem.getVniOptions().putIfAbsent(toInt(ctx.id), new VniOptions(toInt(ctx.id)));
}

@Override
Expand All @@ -4351,8 +4417,42 @@
}

@Override
public void exitEvo_vrf_target(Evo_vrf_targetContext ctx) {
todo(ctx);
public void exitEvovt_auto(Evovt_autoContext ctx) {
if (ctx.AUTO() != null) {
_currentLogicalSystem
.getVniOptions()
.get(_currentVni)
.setVrfTargetCommunityorAuto(ExtendedCommunityOrAuto.auto());
}
}

@Override
public void exitEvovt_community(Evovt_communityContext ctx) {
_currentLogicalSystem
.getVniOptions()
.get(_currentVni)
.setVrfTargetCommunityorAuto(
ExtendedCommunityOrAuto.of(toExtendedCommunity(ctx.vt_community())));
}

@Override
public void exitEvovt_export(Evovt_exportContext ctx) {
if (ctx.vt_community() != null) {
_currentLogicalSystem
.getVniOptions()
.get(_currentVni)
.setVrfTargetExport(toExtendedCommunity(ctx.vt_community()));
}
}

@Override
public void exitEvovt_import(Evovt_importContext ctx) {
if (ctx.vt_community() != null) {
_currentLogicalSystem
.getVniOptions()
.get(_currentVni)
.setVrfTargetImport(toExtendedCommunity(ctx.vt_community()));
}
}

@Override
Expand Down Expand Up @@ -5976,6 +6076,14 @@
INTERFACE, ifaceName, VTEP_SOURCE_INTERFACE, getLine(ctx.iface.getStart()));
}

@Override
public void enterRo_route_distinguisher_id(Ro_route_distinguisher_idContext ctx) {
if (ctx.ip_address() != null) {
Ip rdIp = toIp(ctx.ip_address());
_currentRoutingInstance.setRouteDistinguisherId(rdIp);
}
}

@Override
public void exitRo_autonomous_system(Ro_autonomous_systemContext ctx) {
if (ctx.asn != null) {
Expand Down Expand Up @@ -6988,8 +7096,12 @@

@Override
public void exitVlt_vlan_id(Vlt_vlan_idContext ctx) {
Optional<Integer> vlan = toInteger(ctx, ctx.id);
vlan.ifPresent(_currentNamedVlan::setVlanId);
if (ctx.NONE() != null) {
_currentNamedVlan.setVlanId(null);
} else if (ctx.id != null) {
Optional<Integer> vlan = toInteger(ctx, ctx.id);
vlan.ifPresent(_currentNamedVlan::setVlanId);
}
}

@Override
Expand Down Expand Up @@ -7119,6 +7231,14 @@
_currentBridgeDomain.setVlanId(vlanId);
}

@Override
public void exitBf_evpn(Bf_evpnContext ctx) {
_currentBgpGroup.setEvpnAf(false);
if (ctx.EVPN() != null) {
_currentBgpGroup.setEvpnAf(true);
}
}

@Override
public void enterBfiu_add_path(Bfiu_add_pathContext ctx) {
todo(ctx);
Expand Down
Expand Up @@ -29,6 +29,7 @@ public enum BgpGroupType {
private Boolean _ebgpMultihop;
private Boolean _enforceFirstAs;
private final List<String> _exportPolicies;
private Boolean _evpnAf;
protected String _groupName;
private final List<String> _importPolicies;
protected transient boolean _inherited;
Expand Down Expand Up @@ -89,6 +90,9 @@ public final void cascadeInheritance() {
if (_enforceFirstAs == null) {
_enforceFirstAs = _parent._enforceFirstAs;
}
if (_evpnAf == null) {
_evpnAf = _parent._evpnAf;
}
if (_ebgpMultihop == null) {
_ebgpMultihop = _parent._ebgpMultihop;
}
Expand Down Expand Up @@ -195,6 +199,10 @@ public Boolean getEnforceFirstAs() {
return _enforceFirstAs;
}

public Boolean getEvpnAf() {
return _evpnAf;
}

public final List<String> getExportPolicies() {
return _exportPolicies;
}
Expand Down Expand Up @@ -308,6 +316,10 @@ public void setEnforceFirstAs(Boolean enforceFirstAs) {
_enforceFirstAs = enforceFirstAs;
}

public void setEvpnAf(Boolean evpnAf) {
_evpnAf = evpnAf;
}

public void setIpv6(boolean ipv6) {
_ipv6 = ipv6;
}
Expand Down