@Override protected IsisInterfaceLevelSettings featureValueOf(IsisInterfaceSettings actual) { return actual.getLevel2(); } }
@Nullable private static IsisLevel interfaceSettingsLevel(IsisInterfaceSettings settings) { return union( settings.getLevel1() != null ? LEVEL_1 : null, settings.getLevel2() != null ? LEVEL_2 : null); }
/** * Generate IS-IS L1/L2 routes from a given interface and merge them into appropriate L1/L2 RIBs. */ private void generateAllIsisInterfaceRoutes( Builder<IsisRoute> d1, Builder<IsisRoute> d2, int l1Admin, int l2Admin, @Nullable IsisLevelSettings l1Settings, @Nullable IsisLevelSettings l2Settings, IsisRoute.Builder routeBuilder, Interface iface) { IsisInterfaceSettings ifaceSettings = iface.getIsis(); if (ifaceSettings == null) { return; } IsisInterfaceLevelSettings ifaceL1Settings = ifaceSettings.getLevel1(); IsisInterfaceLevelSettings ifaceL2Settings = ifaceSettings.getLevel2(); if (ifaceL1Settings != null && l1Settings != null) { generateIsisInterfaceRoutesPerLevel(l1Admin, routeBuilder, iface, IsisLevel.LEVEL_1) .forEach(r -> d1.from(_isisL1Rib.mergeRouteGetDelta(r))); } if (ifaceL2Settings != null && l2Settings != null) { generateIsisInterfaceRoutesPerLevel(l2Admin, routeBuilder, iface, IsisLevel.LEVEL_2) .forEach(r -> d2.from(_isisL2Rib.mergeRouteGetDelta(r))); } }
/** * Generate IS-IS from a given interface for a given level (with a given metric/admin cost) and * merge them into the appropriate RIB. */ private static Set<IsisRoute> generateIsisInterfaceRoutesPerLevel( int adminCost, IsisRoute.Builder routeBuilder, Interface iface, IsisLevel level) { IsisInterfaceLevelSettings ifaceLevelSettings = level == IsisLevel.LEVEL_1 ? iface.getIsis().getLevel1() : iface.getIsis().getLevel2(); RoutingProtocol isisProtocol = level == IsisLevel.LEVEL_1 ? RoutingProtocol.ISIS_L1 : RoutingProtocol.ISIS_L2; long metric = ifaceLevelSettings.getMode() == IsisInterfaceMode.PASSIVE ? 0L : firstNonNull(ifaceLevelSettings.getCost(), IsisRoute.DEFAULT_METRIC); routeBuilder.setAdmin(adminCost).setLevel(level).setMetric(metric).setProtocol(isisProtocol); return iface.getAllAddresses().stream() .map( address -> routeBuilder.setNetwork(address.getPrefix()).setNextHopIp(address.getIp()).build()) .collect(ImmutableSet.toImmutableSet()); }
IsisInterfaceLevelSettings level2Settings = iface.getIsis().getLevel2(); IsisLevel activeLevels = null; if (level1Settings != null && level1Settings.getMode() == IsisInterfaceMode.ACTIVE) {
routeLevel == IsisLevel.LEVEL_1 ? iface.getIsis().getLevel1() : iface.getIsis().getLevel2();