Bandwidth update to NetworkConfig

Change-Id: I26117bcbe57ec3b6c016ddaac1b9c075ff739199
This commit is contained in:
Satish K 2017-04-04 15:12:38 +05:30
parent 246334bb48
commit 690d5cffa0
4 changed files with 119 additions and 99 deletions

View File

@ -4,6 +4,7 @@ COMPILE_DEPS = [
'//protocols/bgp/bgpio:onos-protocols-bgp-bgpio', '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
'//incubator/store:onos-incubator-store', '//incubator/store:onos-incubator-store',
'//incubator/api:onos-incubator-api', '//incubator/api:onos-incubator-api',
'//apps/pcep-api:onos-apps-pcep-api',
] ]
TEST_DEPS = [ TEST_DEPS = [

View File

@ -28,5 +28,9 @@
<groupId>org.onosproject</groupId> <groupId>org.onosproject</groupId>
<artifactId>onos-bgp-api</artifactId> <artifactId>onos-bgp-api</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-app-pcep-api</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -13,26 +13,13 @@
package org.onosproject.provider.bgp.topology.impl; package org.onosproject.provider.bgp.topology.impl;
import static org.onosproject.bgp.controller.BgpDpid.uri;
import static org.onosproject.net.DeviceId.deviceId;
import static org.onosproject.net.Device.Type.ROUTER;
import static org.onosproject.net.Device.Type.VIRTUAL;
import static org.onosproject.incubator.net.resource.label.LabelResourceId.labelResourceId;
import static java.util.stream.Collectors.toList;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.HashMap;
import org.onlab.packet.ChassisId;
import org.onlab.packet.Ip4Address;
import org.onlab.util.Bandwidth;
import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality; import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.onlab.packet.ChassisId;
import org.onlab.packet.Ip4Address;
import org.onosproject.bgp.controller.BgpController; import org.onosproject.bgp.controller.BgpController;
import org.onosproject.bgp.controller.BgpDpid; import org.onosproject.bgp.controller.BgpDpid;
import org.onosproject.bgp.controller.BgpLinkListener; import org.onosproject.bgp.controller.BgpLinkListener;
@ -60,7 +47,7 @@ import org.onosproject.bgpio.types.attr.BgpAttrRouterIdV4;
import org.onosproject.bgpio.types.attr.BgpLinkAttrIgpMetric; import org.onosproject.bgpio.types.attr.BgpLinkAttrIgpMetric;
import org.onosproject.bgpio.types.attr.BgpLinkAttrMaxLinkBandwidth; import org.onosproject.bgpio.types.attr.BgpLinkAttrMaxLinkBandwidth;
import org.onosproject.bgpio.types.attr.BgpLinkAttrTeDefaultMetric; import org.onosproject.bgpio.types.attr.BgpLinkAttrTeDefaultMetric;
import org.onosproject.core.CoreService; import org.onosproject.bgpio.types.attr.BgpLinkAttrUnRsrvdLinkBandwidth;
import org.onosproject.incubator.net.resource.label.LabelResourceAdminService; import org.onosproject.incubator.net.resource.label.LabelResourceAdminService;
import org.onosproject.incubator.net.resource.label.LabelResourceId; import org.onosproject.incubator.net.resource.label.LabelResourceId;
import org.onosproject.mastership.MastershipService; import org.onosproject.mastership.MastershipService;
@ -70,10 +57,10 @@ import org.onosproject.net.DefaultAnnotations;
import org.onosproject.net.Device; import org.onosproject.net.Device;
import org.onosproject.net.DeviceId; import org.onosproject.net.DeviceId;
import org.onosproject.net.Link; import org.onosproject.net.Link;
import org.onosproject.net.LinkKey;
import org.onosproject.net.MastershipRole; import org.onosproject.net.MastershipRole;
import org.onosproject.net.PortNumber; import org.onosproject.net.PortNumber;
import org.onosproject.net.config.NetworkConfigService; import org.onosproject.net.config.NetworkConfigService;
import org.onosproject.net.config.basics.BandwidthCapacity;
import org.onosproject.net.device.DefaultDeviceDescription; import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DefaultPortDescription; import org.onosproject.net.device.DefaultPortDescription;
import org.onosproject.net.device.DeviceDescription; import org.onosproject.net.device.DeviceDescription;
@ -92,9 +79,22 @@ import org.onosproject.net.link.LinkProviderService;
import org.onosproject.net.link.LinkService; import org.onosproject.net.link.LinkService;
import org.onosproject.net.provider.AbstractProvider; import org.onosproject.net.provider.AbstractProvider;
import org.onosproject.net.provider.ProviderId; import org.onosproject.net.provider.ProviderId;
import org.onosproject.pcep.api.TeLinkConfig;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import static java.util.stream.Collectors.toList;
import static org.onosproject.bgp.controller.BgpDpid.uri;
import static org.onosproject.incubator.net.resource.label.LabelResourceId.labelResourceId;
import static org.onosproject.net.Device.Type.ROUTER;
import static org.onosproject.net.Device.Type.VIRTUAL;
import static org.onosproject.net.DeviceId.deviceId;
/** /**
* Provider which uses an BGP controller to detect network infrastructure topology. * Provider which uses an BGP controller to detect network infrastructure topology.
*/ */
@ -125,9 +125,6 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected DeviceService deviceService; protected DeviceService deviceService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected CoreService coreService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected MastershipService mastershipService; protected MastershipService mastershipService;
@ -316,17 +313,14 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
LinkDescription linkDes = buildLinkDes(linkNlri, details, true); LinkDescription linkDes = buildLinkDes(linkNlri, details, true);
//If already link exists, return
if (linkService.getLink(linkDes.src(), linkDes.dst()) != null || linkProviderService == null) {
return;
}
/* /*
* Update link ports and configure bandwidth on source and destination port using networkConfig service * Update link ports and configure bandwidth on source and destination port using networkConfig service
* Only master of source link registers for bandwidth * Only master of source link registers for bandwidth
*/ */
if (mastershipService.isLocalMaster(linkDes.src().deviceId())) { if (mastershipService.isLocalMaster(linkDes.src().deviceId())) {
registerBandwidth(linkDes, details); registerBandwidthAndTeMetric(linkDes, details);
} }
//Updating ports of the link //Updating ports of the link
@ -458,8 +452,7 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
*/ */
if (networkConfigService != null && mastershipService.isLocalMaster(linkDes.src().deviceId())) { if (networkConfigService != null && mastershipService.isLocalMaster(linkDes.src().deviceId())) {
// Releases registered resource for this link // Releases registered resource for this link
networkConfigService.removeConfig(linkDes.src(), BandwidthCapacity.class); networkConfigService.removeConfig(LinkKey.linkKey(linkDes.src(), linkDes.dst()), TeLinkConfig.class);
networkConfigService.removeConfig(linkDes.dst(), BandwidthCapacity.class);
} }
linkProviderService.linkVanished(linkDes); linkProviderService.linkVanished(linkDes);
@ -467,6 +460,11 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
linkDes = new DefaultLinkDescription(linkDes.dst(), linkDes.src(), Link.Type.DIRECT, linkDes = new DefaultLinkDescription(linkDes.dst(), linkDes.src(), Link.Type.DIRECT,
false, linkDes.annotations()); false, linkDes.annotations());
linkProviderService.linkVanished(linkDes); linkProviderService.linkVanished(linkDes);
if (networkConfigService != null && mastershipService.isLocalMaster(linkDes.src().deviceId())) {
// Releases registered resource for this link
networkConfigService.removeConfig(LinkKey.linkKey(linkDes.src(), linkDes.dst()), TeLinkConfig.class);
}
} }
} }
@ -479,7 +477,7 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
labelResourceAdminService.createDevicePool(deviceId, beginLabel, endLabel); labelResourceAdminService.createDevicePool(deviceId, beginLabel, endLabel);
} }
private void registerBandwidth(LinkDescription linkDes, PathAttrNlriDetails details) { private void registerBandwidthAndTeMetric(LinkDescription linkDes, PathAttrNlriDetails details) {
if (details == null) { if (details == null) {
log.error("Couldnot able to register bandwidth "); log.error("Couldnot able to register bandwidth ");
return; return;
@ -492,7 +490,10 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
} }
List<BgpValueType> tlvs = ((LinkStateAttributes) attribute.iterator().next()).linkStateAttributes(); List<BgpValueType> tlvs = ((LinkStateAttributes) attribute.iterator().next()).linkStateAttributes();
float maxReservableBw = 0; double maxReservableBw = 0;
List<Float> unreservedBw = new ArrayList<>();
int teMetric = 0;
int igpMetric = 0;
for (BgpValueType tlv : tlvs) { for (BgpValueType tlv : tlvs) {
switch (tlv.getType()) { switch (tlv.getType()) {
@ -501,20 +502,33 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
//will get in bits/second , convert to MBPS to store in network config service //will get in bits/second , convert to MBPS to store in network config service
maxReservableBw = maxReservableBw / 1000000; maxReservableBw = maxReservableBw / 1000000;
break; break;
case LinkStateAttributes.ATTR_LINK_UNRES_BANDWIDTH:
unreservedBw = ((BgpLinkAttrUnRsrvdLinkBandwidth) tlv).getLinkAttrUnRsrvdLinkBandwidth();
break;
case LinkStateAttributes.ATTR_LINK_TE_DEFAULT_METRIC:
teMetric = ((BgpLinkAttrTeDefaultMetric) tlv).attrLinkDefTeMetric();
break;
case LinkStateAttributes.ATTR_LINK_IGP_METRIC:
igpMetric = ((BgpLinkAttrIgpMetric) tlv).attrLinkIgpMetric();
break;
default: // do nothing default: // do nothing
} }
} }
if (maxReservableBw == 0.0) { //Configure bandwidth for src and dst port
return; TeLinkConfig config = networkConfigService.addConfig(LinkKey.linkKey(linkDes.src(), linkDes.dst()),
TeLinkConfig.class);
Double bw = 0.0;
if (unreservedBw.size() > 0) {
bw = unreservedBw.get(0).doubleValue(); //Low priority
} }
//Configure bandwidth for src and dst port config.maxResvBandwidth(maxReservableBw)
BandwidthCapacity config = networkConfigService.addConfig(linkDes.src(), BandwidthCapacity.class); .unResvBandwidth(bw).teCost(teMetric).igpCost(igpMetric);
config.capacity(Bandwidth.bps(maxReservableBw)).apply(); //.apply();
config = networkConfigService.addConfig(linkDes.dst(), BandwidthCapacity.class); networkConfigService.applyConfig(LinkKey.linkKey(linkDes.src(),
config.capacity(Bandwidth.bps(maxReservableBw)).apply(); linkDes.dst()), TeLinkConfig.class, config.node());
} }
private DefaultAnnotations.Builder getAnnotations(DefaultAnnotations.Builder annotationBuilder, boolean isNode, private DefaultAnnotations.Builder getAnnotations(DefaultAnnotations.Builder annotationBuilder, boolean isNode,
@ -529,8 +543,6 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
boolean abrBit = false; boolean abrBit = false;
boolean externalBit = false; boolean externalBit = false;
boolean pseudo = false; boolean pseudo = false;
int igpMetric = 0;
int teMetric = 0;
byte[] areaId = null; byte[] areaId = null;
Ip4Address routerId = null; Ip4Address routerId = null;
for (BgpValueType tlv : tlvs) { for (BgpValueType tlv : tlvs) {
@ -550,12 +562,6 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
case LinkStateAttributes.ATTR_NODE_IPV4_LOCAL_ROUTER_ID: case LinkStateAttributes.ATTR_NODE_IPV4_LOCAL_ROUTER_ID:
routerId = ((BgpAttrRouterIdV4) tlv).attrRouterId(); routerId = ((BgpAttrRouterIdV4) tlv).attrRouterId();
break; break;
case LinkStateAttributes.ATTR_LINK_IGP_METRIC:
igpMetric = ((BgpLinkAttrIgpMetric) tlv).attrLinkIgpMetric();
break;
case LinkStateAttributes.ATTR_LINK_TE_DEFAULT_METRIC:
teMetric = ((BgpLinkAttrTeDefaultMetric) tlv).attrLinkDefTeMetric();
break;
default: // do nothing default: // do nothing
} }
} }
@ -579,15 +585,6 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
// LsrID // LsrID
annotationBuilder.set(LSRID, String.valueOf(routerId)); annotationBuilder.set(LSRID, String.valueOf(routerId));
} }
} else {
// Annotations for link
if (igpMetric != 0) {
annotationBuilder.set(COST, String.valueOf(igpMetric));
}
if (teMetric != 0) {
annotationBuilder.set(TE_COST, String.valueOf(teMetric));
}
} }
return annotationBuilder; return annotationBuilder;
} }

View File

@ -12,22 +12,10 @@
*/ */
package org.onosproject.provider.bgp.topology.impl; package org.onosproject.provider.bgp.topology.impl;
import static org.hamcrest.MatcherAssert.assertThat; import com.fasterxml.jackson.databind.JsonNode;
import static org.hamcrest.core.Is.is; import com.fasterxml.jackson.databind.ObjectMapper;
import static org.hamcrest.core.IsNot.not; import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import static org.onosproject.net.Link.State.ACTIVE; import com.fasterxml.jackson.databind.node.ObjectNode;
import static org.onosproject.net.MastershipRole.MASTER;
import static org.hamcrest.Matchers.nullValue;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -35,7 +23,6 @@ import org.onlab.junit.TestUtils;
import org.onlab.junit.TestUtils.TestUtilsException; import org.onlab.junit.TestUtils.TestUtilsException;
import org.onlab.packet.ChassisId; import org.onlab.packet.ChassisId;
import org.onlab.packet.Ip4Address; import org.onlab.packet.Ip4Address;
import org.onlab.util.Bandwidth;
import org.onosproject.bgp.controller.BgpLinkListener; import org.onosproject.bgp.controller.BgpLinkListener;
import org.onosproject.bgp.controller.BgpNodeListener; import org.onosproject.bgp.controller.BgpNodeListener;
import org.onosproject.bgpio.exceptions.BgpParseException; import org.onosproject.bgpio.exceptions.BgpParseException;
@ -49,13 +36,8 @@ import org.onosproject.bgpio.protocol.linkstate.PathAttrNlriDetails;
import org.onosproject.bgpio.types.AutonomousSystemTlv; import org.onosproject.bgpio.types.AutonomousSystemTlv;
import org.onosproject.bgpio.types.BgpValueType; import org.onosproject.bgpio.types.BgpValueType;
import org.onosproject.bgpio.types.IsIsNonPseudonode; import org.onosproject.bgpio.types.IsIsNonPseudonode;
import org.onosproject.bgpio.types.LinkStateAttributes;
import org.onosproject.incubator.net.resource.label.LabelResourceAdminService;
import org.onosproject.incubator.net.resource.label.LabelResourceId;
import org.onosproject.incubator.net.resource.label.LabelResourcePool;
import org.onosproject.mastership.MastershipServiceAdapter;
import org.onosproject.net.link.LinkServiceAdapter;
import org.onosproject.bgpio.types.LinkLocalRemoteIdentifiersTlv; import org.onosproject.bgpio.types.LinkLocalRemoteIdentifiersTlv;
import org.onosproject.bgpio.types.LinkStateAttributes;
import org.onosproject.bgpio.types.RouteDistinguisher; import org.onosproject.bgpio.types.RouteDistinguisher;
import org.onosproject.bgpio.types.attr.BgpAttrNodeFlagBitTlv; import org.onosproject.bgpio.types.attr.BgpAttrNodeFlagBitTlv;
import org.onosproject.bgpio.types.attr.BgpAttrNodeIsIsAreaId; import org.onosproject.bgpio.types.attr.BgpAttrNodeIsIsAreaId;
@ -65,6 +47,10 @@ import org.onosproject.bgpio.types.attr.BgpLinkAttrMaxLinkBandwidth;
import org.onosproject.bgpio.types.attr.BgpLinkAttrTeDefaultMetric; import org.onosproject.bgpio.types.attr.BgpLinkAttrTeDefaultMetric;
import org.onosproject.bgpio.util.Constants; import org.onosproject.bgpio.util.Constants;
import org.onosproject.cluster.NodeId; import org.onosproject.cluster.NodeId;
import org.onosproject.incubator.net.resource.label.LabelResourceAdminService;
import org.onosproject.incubator.net.resource.label.LabelResourceId;
import org.onosproject.incubator.net.resource.label.LabelResourcePool;
import org.onosproject.mastership.MastershipServiceAdapter;
import org.onosproject.net.ConnectPoint; import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DefaultAnnotations; import org.onosproject.net.DefaultAnnotations;
import org.onosproject.net.DefaultDevice; import org.onosproject.net.DefaultDevice;
@ -72,12 +58,14 @@ import org.onosproject.net.DefaultLink;
import org.onosproject.net.Device; import org.onosproject.net.Device;
import org.onosproject.net.DeviceId; import org.onosproject.net.DeviceId;
import org.onosproject.net.Link; import org.onosproject.net.Link;
import org.onosproject.net.LinkKey;
import org.onosproject.net.MastershipRole; import org.onosproject.net.MastershipRole;
import org.onosproject.net.PortNumber; import org.onosproject.net.PortNumber;
import org.onosproject.net.config.Config; import org.onosproject.net.config.Config;
import org.onosproject.net.config.ConfigApplyDelegate; import org.onosproject.net.config.ConfigApplyDelegate;
import org.onosproject.net.config.ConfigFactory; import org.onosproject.net.config.ConfigFactory;
import org.onosproject.net.config.NetworkConfigRegistryAdapter; import org.onosproject.net.config.NetworkConfigRegistryAdapter;
import org.onosproject.net.config.basics.BandwidthCapacity;
import org.onosproject.net.device.DeviceDescription; import org.onosproject.net.device.DeviceDescription;
import org.onosproject.net.device.DeviceEvent; import org.onosproject.net.device.DeviceEvent;
import org.onosproject.net.device.DeviceListener; import org.onosproject.net.device.DeviceListener;
@ -91,16 +79,28 @@ import org.onosproject.net.link.LinkDescription;
import org.onosproject.net.link.LinkProvider; import org.onosproject.net.link.LinkProvider;
import org.onosproject.net.link.LinkProviderRegistry; import org.onosproject.net.link.LinkProviderRegistry;
import org.onosproject.net.link.LinkProviderService; import org.onosproject.net.link.LinkProviderService;
import org.onosproject.net.link.LinkServiceAdapter;
import org.onosproject.net.provider.ProviderId; import org.onosproject.net.provider.ProviderId;
import org.onosproject.net.config.basics.BandwidthCapacity;
import org.onosproject.net.resource.Resource; import org.onosproject.net.resource.Resource;
import org.onosproject.net.resource.ResourceAdminService; import org.onosproject.net.resource.ResourceAdminService;
import org.onosproject.net.resource.ResourceId; import org.onosproject.net.resource.ResourceId;
import org.onosproject.pcep.api.TeLinkConfig;
import com.fasterxml.jackson.databind.JsonNode; import java.util.Collection;
import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap;
import com.fasterxml.jackson.databind.node.JsonNodeFactory; import java.util.HashSet;
import com.fasterxml.jackson.databind.node.ObjectNode; import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.not;
import static org.onosproject.net.Link.State.ACTIVE;
import static org.onosproject.net.MastershipRole.MASTER;
/** /**
* Test for BGP topology provider. * Test for BGP topology provider.
@ -201,6 +201,11 @@ public class BgpTopologyProviderTest {
private class MockNetConfigRegistryAdapter extends NetworkConfigRegistryAdapter { private class MockNetConfigRegistryAdapter extends NetworkConfigRegistryAdapter {
private ConfigFactory cfgFactory; private ConfigFactory cfgFactory;
private Map<ConnectPoint, BandwidthCapacity> classConfig = new HashMap<>(); private Map<ConnectPoint, BandwidthCapacity> classConfig = new HashMap<>();
private Map<LinkKey, TeLinkConfig> teLinkConfig = new HashMap<>();
public Map<LinkKey, TeLinkConfig> getTeLinkConfig() {
return teLinkConfig;
}
@Override @Override
public void registerConfigFactory(ConfigFactory configFactory) { public void registerConfigFactory(ConfigFactory configFactory) {
@ -223,6 +228,15 @@ public class BgpTopologyProviderTest {
ConfigApplyDelegate delegate = new InternalApplyDelegate(); ConfigApplyDelegate delegate = new InternalApplyDelegate();
devCap.init((ConnectPoint) subject, null, node, mapper, delegate); devCap.init((ConnectPoint) subject, null, node, mapper, delegate);
return (C) devCap; return (C) devCap;
} else if (configClass == TeLinkConfig.class) {
TeLinkConfig linkConfig = new TeLinkConfig();
teLinkConfig.put((LinkKey) subject, linkConfig);
JsonNode node = new ObjectNode(new MockJsonNode());
ObjectMapper mapper = new ObjectMapper();
ConfigApplyDelegate delegate = new InternalApplyDelegate();
linkConfig.init((LinkKey) subject, null, node, mapper, delegate);
return (C) linkConfig;
} }
return null; return null;
@ -230,13 +244,19 @@ public class BgpTopologyProviderTest {
@Override @Override
public <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass) { public <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass) {
if (configClass == BandwidthCapacity.class) {
classConfig.remove(subject); classConfig.remove(subject);
} else if (configClass == TeLinkConfig.class) {
teLinkConfig.remove(subject);
}
} }
@Override @Override
public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) { public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
if (configClass == BandwidthCapacity.class) { if (configClass == BandwidthCapacity.class) {
return (C) classConfig.get(subject); return (C) classConfig.get(subject);
} else if (configClass == TeLinkConfig.class) {
return (C) teLinkConfig.get(subject);
} }
return null; return null;
} }
@ -387,7 +407,7 @@ public class BgpTopologyProviderTest {
/* Class implement device test registry */ /* Class implement device test registry */
private class TestLinkRegistry implements LinkProviderRegistry { private class TestLinkRegistry implements LinkProviderRegistry {
LinkProvider linkProvider; LinkProvider linkProvider;
Set<Link> links = new HashSet<>(); LinkedList<Link> links = new LinkedList<>();
@Override @Override
public LinkProviderService register(LinkProvider provider) { public LinkProviderService register(LinkProvider provider) {
@ -790,10 +810,11 @@ public class BgpTopologyProviderTest {
for (BgpLinkListener l : controller.linkListener) { for (BgpLinkListener l : controller.linkListener) {
l.addLink(linkNlri, details); l.addLink(linkNlri, details);
assertThat(linkRegistry.links.size(), is(1)); assertThat(linkRegistry.links.size(), is(1));
assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.COST), TeLinkConfig config = networkConfigService.getTeLinkConfig().get(LinkKey.linkKey(linkRegistry.links
is("10")); .getFirst().src(), linkRegistry.links.getLast().dst()));
assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.TE_COST),
is("20")); assertThat(config.igpCost(), is(10));
assertThat(config.teCost(), is(20));
l.deleteLink(linkNlri); l.deleteLink(linkNlri);
assertThat(linkRegistry.links.size(), is(0)); assertThat(linkRegistry.links.size(), is(0));
@ -1030,11 +1051,13 @@ public class BgpTopologyProviderTest {
for (BgpLinkListener l : controller.linkListener) { for (BgpLinkListener l : controller.linkListener) {
l.addLink(linkNlri, details); l.addLink(linkNlri, details);
LinkKey linkKey = LinkKey.linkKey(linkRegistry.links.getFirst().src(),
linkRegistry.links.getLast().dst());
assertThat(linkRegistry.links.size(), is(1)); assertThat(linkRegistry.links.size(), is(1));
assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.COST), TeLinkConfig config = networkConfigService.getTeLinkConfig().get(linkKey);
is("10"));
assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.TE_COST), assertThat(config.igpCost(), is(10));
is("20")); assertThat(config.teCost(), is(20));
ConnectPoint src = new ConnectPoint( ConnectPoint src = new ConnectPoint(
DeviceId.deviceId("l3:rd=0::routinguniverse=0:asn=10:isoid=1414.1414.0014"), DeviceId.deviceId("l3:rd=0::routinguniverse=0:asn=10:isoid=1414.1414.0014"),
@ -1042,18 +1065,13 @@ public class BgpTopologyProviderTest {
ConnectPoint dst = new ConnectPoint( ConnectPoint dst = new ConnectPoint(
DeviceId.deviceId("l3:rd=0::routinguniverse=0:asn=10:isoid=1e1e.1e1e.001e"), DeviceId.deviceId("l3:rd=0::routinguniverse=0:asn=10:isoid=1e1e.1e1e.001e"),
PortNumber.portNumber(4294967396L)); PortNumber.portNumber(4294967396L));
BandwidthCapacity bandwidth = networkConfigService.getConfig(src, BandwidthCapacity.class);
assertThat(bandwidth.capacity().bps(), is(70.0 * 1_000_000L));
bandwidth = networkConfigService.getConfig(dst, BandwidthCapacity.class); assertThat(config.maxResvBandwidth(), is(70.0));
assertThat(bandwidth.capacity(), is(Bandwidth.bps(70.0 * 1_000_000L)));
l.deleteLink(linkNlri); l.deleteLink(linkNlri);
assertThat(linkRegistry.links.size(), is(0)); assertThat(linkRegistry.links.size(), is(0));
bandwidth = networkConfigService.getConfig(src, BandwidthCapacity.class); config = networkConfigService.getTeLinkConfig().get(linkKey);
assertThat(bandwidth, is(nullValue())); assertThat(config, is(nullValue()));
bandwidth = networkConfigService.getConfig(dst, BandwidthCapacity.class);
assertThat(bandwidth, is(nullValue()));
} }
} }
} }