summaryrefslogtreecommitdiffstats
path: root/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/write/sid/LocatorCustomizer.java
diff options
context:
space:
mode:
Diffstat (limited to 'srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/write/sid/LocatorCustomizer.java')
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/write/sid/LocatorCustomizer.java27
1 files changed, 24 insertions, 3 deletions
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/write/sid/LocatorCustomizer.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/write/sid/LocatorCustomizer.java
index 86ab3599c..41e838ee7 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/write/sid/LocatorCustomizer.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/write/sid/LocatorCustomizer.java
@@ -16,30 +16,51 @@
package io.fd.hc2vpp.srv6.write.sid;
+import com.google.common.base.Preconditions;
import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer;
+import io.fd.hc2vpp.srv6.util.LocatorContextManager;
import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
import io.fd.honeycomb.translate.write.WriteContext;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.srv6.locators.locators.Locator;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.srv6.locators.locators.LocatorKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class LocatorCustomizer extends FutureJVppCustomizer implements ListWriterCustomizer<Locator, LocatorKey> {
- public LocatorCustomizer(@Nonnull final FutureJVppCore futureJVppCore) {
+ private final LocatorContextManager locatorCtx;
+
+ public LocatorCustomizer(@Nonnull final FutureJVppCore futureJVppCore,
+ @Nonnull final LocatorContextManager locatorContext) {
super(futureJVppCore);
+ this.locatorCtx = locatorContext;
}
@Override
public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<Locator> instanceIdentifier,
@Nonnull final Locator locator, @Nonnull final WriteContext writeContext) {
- // noop
+ Preconditions.checkNotNull(locator.getPrefix(), "Prefix should not be empty in locator: {}", locator);
+ Preconditions.checkNotNull(locator.getPrefix().getLength(),
+ "Length in prefix should not be empty for locator: {}", locator);
+ Ipv6Address locAddress = Preconditions.checkNotNull(locator.getPrefix().getAddress(),
+ "Address in prefix should not be empty for locator: {}", locator);
+ Short locLength = Preconditions.checkNotNull(locator.getPrefix().getLength().getValue(),
+ "Length in prefix should not be empty for locator: {}", locator);
+
+ locatorCtx.addLocator(locAddress.getValue(), new Ipv6Prefix(locAddress.getValue() + "/" + locLength),
+ writeContext.getMappingContext());
}
@Override
public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<Locator> instanceIdentifier,
@Nonnull final Locator locator, @Nonnull final WriteContext writeContext) {
- // noop
+ Preconditions.checkNotNull(locator.getPrefix(), "Prefix should not be empty in locator: {}", locator);
+ Ipv6Address locAddress = Preconditions.checkNotNull(locator.getPrefix().getAddress(),
+ "Address in prefix should not be empty for locator: {}", locator);
+
+ locatorCtx.removeLocator(locAddress.getValue(), writeContext.getMappingContext());
}
}